Servlet未将参数发送到.jsp文件

Servlet not sending parameter to .jsp file

本文关键字:jsp 文件 参数 Servlet      更新时间:2023-09-26

所以,我有一个Servlet,它应该向.jsp文件发送一个参数:

request.setAttribute("parameter1", new BigDecimal(50));
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB/pages/page1.jsp");
requestDispatcher.forward(request, response);

然而,当我试图在jsp中使用一些javascript代码来提醒这个参数时,我会得到一条空消息。此外,如果我使用JSP表达式将属性打印到带有Java的控制台,则会得到null。。所以,我认为我没有正确地在这个servlet中发送参数,有人能帮我吗?

有两种方法可以实现这一点。

使用JSP表达式,您将使用<%= %>作为(注意末尾没有;

data : [<%= parameter1 %>, Y, Z]

第二种也是首选的方法是使用JSP-EL语法,并使用${ }作为直接引用request属性

data : [${parameter1}, Y, Z]

第一个选项要求您首先将属性从其作用域中拉出。第二个没有。

BigDecimal parameter1 = (BigDecimal) request.getAttribute("parameter1");

解决方案:

我真的看不出有什么不同,只是从开始改变

request.setAttribute("parameter1", new BigDecimal(50));
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB/pages/page1.jsp");
requestDispatcher.forward(request, response);

至:

request.setAttribute("parameter1", new BigDecimal(50));
request.getRequestDispatcher("/WEB/pages/page1.jsp").forward(request, response);

允许alert(${parameter1});显示我传递的实际值,但是,在用java读取参数时,我仍然为null。此外,一些我不得不显示图表的javascript代码也停止了工作。

因此,我尝试通过会话传递参数:

request.getSession().setAttribute("parameter1", new BigDecimal(50));
request.sendRedirect("/WEB/pages/page1.jsp");

这很好,现在我可以在.jsp文件中使用javascript和java获取参数了。

使用sendRedirect重定向到一个新请求似乎不会破坏.jsp文件中的javascript代码,然而,我真的不知道为什么这种方法在面对其他方法时有效,所以我为这个糟糕的答案道歉,我从来没有真正使用过servlet和jsp,但我真的很感激有一个比我更确凿的答案,所以我也学到了更多。