将变量从servlet传递给jsp

时间:2010-08-31 12:15:18

标签: jsp servlets

如何将变量从servlet传递给jsp? setAttributegetAttribute对我不起作用: - (

9 个答案:

答案 0 :(得分:83)

在以下情况下无效:

  1. 您正在通过response.sendRedirect("page.jsp")将响应重定向到新请求。新创建的请求对象当然不再包含属性,并且在重定向的JSP中无法访问它们。您需要转发而不是重定向。 E.g。

    request.setAttribute("name", "value");
    request.getRequestDispatcher("page.jsp").forward(request, response);
    
  2. 您正以错误的方式访问它或使用错误的名称。假设您使用名称"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页面。 然后将变量设置为请求对象。然后使用forwardrequestdispatcher方法将其传递给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上使用getRequestDispatcherdoGet时,请确保使用为您定义的urlPatterns(例如&#34; / login&#34;)访问您的网页servlet的。如果你用&#34; /login.jsp"您的doGet未被调用,因此您的所有属性都不可用。

答案 8 :(得分:0)

如果您使用Action,Actionforward方式处理业务逻辑和下一页要显示,请检查是否调用了重定向。正如许多其他人所指出的那样,重定向不会保留您的原始请求,因为它基本上迫使您向指定路径发出新请求。因此,如果使用重定向而不是requestdispatch,原始请求中设置的值将会消失。