Joe*_*lum 9 java session attributes servlets
我正在使用WinXP,Eclipse Indigo和Google web插件中的webapp.
我有一个简单的表单,从用户(例如电子邮件)获取值,将其传递给名为SignIn.java处理它的servlet并将电子邮件值保存到会话.该SignIn代码很简单,这里是它的doGet主要作用:
String email = req.getParameter("email"); //getting the parameter from html form
...
...
HttpSession session = req.getSession(); //create a new session
session.setAttribute("email", email);
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,我已经证实这些数值不是null在这一点上.现在出现了问题,我想重定向到ShowOnline.java需要进行更多处理的另一个servlet().当我写作
resp.sendRedirect(resp.encodeRedirectURL("/ShowOnlineServlet"));
Run Code Online (Sandbox Code Playgroud)
ShowOnline获取null会话值(我之前保存的第二个相同的电子邮件属性null)
当我写作
getServletConfig().getServletContext().getRequestDispatcher("/ShowOnlineServlet");
Run Code Online (Sandbox Code Playgroud)
一切都好,以前的邮件属性不是null!
到底是怎么回事?sendRedirect()只是让你的浏览器发送一个新请求,它不应该影响会话范围.我已经检查了cookie并且它们很好(这是以前的会话,因为它是我的webapp创建的第一个也是唯一一个会话,而且我甚至打扰并检查了sesison ID,并且它们在两个请求中都是相同的) .
为什么sendRedirect()和之间会有区别forward()?简单的解决方案是使用,forward()但我想在我放手之前了解这一点,我认为了解发生的事情对我来说很重要.我不确定我喜欢不知道这些基本概念发生了什么的想法(因为我是初学者,我的整个webapp在这一点上非常简单和基本).
任何想法的想法或建议都将受到热烈欢迎!
如果您的servlet 仅保存请求参数(电子邮件),那么您也可以用过滤器SignIn替换 servlet ,例如。SignInFilter
SignInFilter将包含与您的 servlet 相同的逻辑SignIn(将电子邮件从请求参数复制到会话),但会调用链中的下一个项目(这将是您的ShowOnlineservlet),而不是执行任何重定向/转发。
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
String email = req.getParameter("email");
session.setAttribute("email", email);
chain.doFilter(req, res); // continue to 'ShowOnline'
}
Run Code Online (Sandbox Code Playgroud)
将表单设置为 POST 到ShowOnlineservlet,并将新的 SignInFilter 配置为在之前执行ShowOnline(为简洁起见,下面省略了 servlet 映射)。
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<filter>
<filter-name>SignInFilter</filter-name>
<filter-class>com.example.SignInFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SignInFilter</filter-name>
<url-pattern>/ShowOnline</url-pattern>
</filter-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13039 次 |
| 最近记录: |