范围从会话更改为请求

时间:2012-05-30 06:54:23

标签: java jsp java-ee servlets jstl

我正在使用会话范围来存储bean,我希望像这样在需要时将bean值投影到jsp页面

request.getSession().setAttribute("bean", bean);

        response.sendRedirect("test.jsp");

在jsp中我使用下面的代码来获取jsp上的值

<%  bean1 bean = (bean1) session.getAttribute("bean");

  %>
<%= bean.getValue() %> 

我想使用请求范围而不是使用会话范围,所以我可以用这种方式在我的servlet中设置我的属性

request.setAttribute("bean", bean);

那我怎么能在我的jsp上调用它呢 我可以说

<%  bean1 bean = (bean1) request.getAttribute("bean");

但它显示错误。或者不使用scriplet如何使用JSTL显示我的输出。

1 个答案:

答案 0 :(得分:4)

您不了解重定向是什么。重定向是您发送给浏览器的响应,以便浏览器向您重定向到的位置发送另一个新请求。因此,当您调用sendRedirect("test.jsp")时,浏览器将向test.jsp发送新请求。很明显,您存储在当前请求中的所有属性将不再可用。

在没有上下文的情况下,如果重定向是在这种情况下你应该做的事情,或者你应该转而转向JSP,那是不可能的。转发与重定向非常不同,因为它仅将当前请求和响应的责任转移到另一个组件。在这种情况下,会有一个唯一的请求,JSP可以在请求中找到servlet设置的属性。

我唯一可以说的是,在一个设计合理的MVC应用程序中,JSP被用作视图,并且永远不应该对视图有直接请求。每个请求都应该通过一个控制器。