我正在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,这是不好的。 在这方面的任何帮助将不胜感激 谢谢
答案 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()
方法转发相同的请求。