如何将变量从servlet传递给jsp?
setAttribute
和getAttribute
对我不起作用: - (
答案 0 :(得分:83)
在以下情况下无效:
您正在通过response.sendRedirect("page.jsp")
将响应重定向到新请求。新创建的请求对象当然不再包含属性,并且在重定向的JSP中无法访问它们。您需要转发而不是重定向。 E.g。
request.setAttribute("name", "value");
request.getRequestDispatcher("page.jsp").forward(request, response);
您正以错误的方式访问它或使用错误的名称。假设您使用名称"name"
设置了它,那么您应该能够在转发的 JSP页面中访问它,如下所示:
${name}
答案 1 :(得分:23)
我找到的简单方法是,
在servlet中:
您可以设置值并将其转发到JSP,如下所示
req.setAttribute("myname",login);
req.getRequestDispatcher("welcome.jsp").forward(req, resp);
在Welcome.jsp中,您可以通过
获取值.<%String name = (String)request.getAttribute("myname"); %>
<%= name%>
(或)直接你可以打电话
<%= request.getAttribute("myname") %>.
答案 2 :(得分:15)
使用
了request.setAttribute( “的attributeName”);
然后
getServletContext()方法的getRequestDispatcher( “/ file.jsp”)向前();
然后可以在JSP中访问它。
作为旁注 - 在你的jsp中避免使用java代码。使用JSTL。
答案 3 :(得分:13)
除了使用属性将信息从servlet传递到JSP页面之外,还可以传递参数。这只需通过重定向到指定相关JSP页面的URL,并添加普通参数传递URL机制来完成。
一个例子。 servlet代码的相关部分:
protected void doGet( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
response.setContentType( "text/html" );
// processing the request not shown...
//
// here we decide to send the value "bar" in parameter
// "foo" to the JSP page example.jsp:
response.sendRedirect( "example.jsp?foo=bar" );
}
JSP页面example.jsp
的相关部分:
<%
String fooParameter = request.getParameter( "foo" );
if ( fooParameter == null )
{
%>
<p>No parameter foo given to this page.</p>
<%
}
else
{
%>
<p>The value of parameter foo is <%= fooParameter.toString() %>.</p>
<%
}
%>
答案 4 :(得分:12)
您可以在将请求转发到jsp之前将所有值设置到响应对象中。或者,您可以将值放入会话bean并在jsp中访问它。
答案 5 :(得分:9)
这是一个包含字符串变量a的servlet代码。 a的值来自带有表单的html页面。
然后将变量设置为请求对象。然后使用forward
和requestdispatcher
方法将其传递给jsp。
String a=req.getParameter("username");
req.setAttribute("name", a);
RequestDispatcher rd=req.getRequestDispatcher("/login.jsp");
rd.forward(req, resp);
在jsp中按照以下程序
中的步骤进行操作<%String name=(String)request.getAttribute("name");
out.print("your name"+name);%>
答案 6 :(得分:2)
您也可以使用RequestDispacher并将数据与您想要的jsp页面一起传递。
request.setAttribute("MyData", data);
RequestDispatcher rd = request.getRequestDispatcher("page.jsp");
rd.forward(request, response);
答案 7 :(得分:1)
在setAttribute
上使用getRequestDispatcher
和doGet
时,请确保使用为您定义的urlPatterns(例如&#34; / login&#34;)访问您的网页servlet的。如果你用&#34; /login.jsp"您的doGet
未被调用,因此您的所有属性都不可用。
答案 8 :(得分:0)
如果您使用Action,Actionforward方式处理业务逻辑和下一页要显示,请检查是否调用了重定向。正如许多其他人所指出的那样,重定向不会保留您的原始请求,因为它基本上迫使您向指定路径发出新请求。因此,如果使用重定向而不是requestdispatch,原始请求中设置的值将会消失。