使用sendredirect在Java中保留会话

时间:2012-11-19 20:41:02

标签: java jsp java-ee servlets jspinclude

我正在JAVA中创建一个登录应用程序。我正在JSP中进行演示,并在Servlet中进行所有逻辑(数据库连接)[这不是我知道的正确方法]。 我检查Servlet中的用户名密码,然后创建一个会话变量。 并像这样添加会话

sess.setAttribute("username",oName);

然后我将用户重定向到其主页say student.jsp

response.sendRedirect("student.jsp");

它删除会话变量。我需要一种方法来保存会话变量并转移到student.jsp.I尝试使用转发但是没有成功。

RequestDispatcher dispatcher =
                getServletContext()
                    .getRequestDispatcher("/student.jsp");

            if (dispatcher != null) {
                dispatcher.forward(request, response);
            }

它转发请求,但页面地址不会更改为student.jsp,这是不好的。 在这方面的任何帮助将不胜感激 谢谢

4 个答案:

答案 0 :(得分:5)

对于重定向的请求返回并附加到同一会话,它需要一个会话ID,通常在JSESSIONID(或其他名称)cookie中或作为参数在URL中携带。

这个cookie或URL参数应该由servlet容器添加,你不必自己添加它。

如果您没有在浏览器中看到cookie,并且没有将JSESSIONID附加到URL,则它会为每个请求创建一个新会话,而不是附加到同一会话。

答案 1 :(得分:0)

尝试编辑tomcat context.xml文件并将<Context>标记替换为<Context useHttpOnly="false">,这对我有帮助。

答案 2 :(得分:0)

例如,某些浏览器(例如Chromium)不允许来自本地主机或IP地址的cookie,因此无法保留会话,并且每次刷新均会更改。可以使用显示请求的所有cookie的浏览器开发人员工具轻松地对此进行检查。

为了进行开发,请设置您的工作站以将一些更严肃的名称(例如host.kitty.com)解析为localhost。在Linux下,只需将条目添加到/ etc / hosts。

答案 3 :(得分:-1)

使用RequestDispatcher并使用request.setAttribute()设置您的用户名变量。在这种情况下,调度程序不会创建新请求,但会使用forward()方法转发相同的请求。