gpt4 book ai didi

java - 检测新的 HttpSession

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:21 24 4
gpt4 key购买 nike

我是 J2EE 的新手,一直停留在 session 管理中。根据规范,HttpSession 的 isNew() 方法如果没有之前创建的则返回 true来自客户端的 sessionID 存储在服务器上。我运行了以下代码,即使在第一次执行时,isNew() 方法也没有返回 true。到目前为止,我已经尝试了以下操作:

  1. 删除了我的浏览器历史记录(所有...我使用的是 Firefox)。
  2. 从 Netbeans 7.3.1 构建并运行我的网络应用程序。在这种情况下,会生成一个新的 session ID,但 isNew() 方法肯定不会返回 true。
  3. 重新启动 PC(尽管这样做很愚蠢)。

我的问题是,我应该如何执行 servlet 代码中的 if (session.isNew()){} block (包括浏览器的任何设置和其他任何设置)?我的代码有什么问题?

下面是我的代码..

初始 View 的代码::index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Welcome to color selection page</h1>
<form method="POST"
action="NewPattern">
Select beer characteristics<br>
Color:
<select name="color" size="1">
<option value="light">light</option>
<option value="amber">amber</option>
<option value="brown">brown</option>
</select>
<br>
<input type="SUBMIT">
</form>
</body>
</html>

servlet 的代码::

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class NewServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
try {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet NewServlet</title>");
out.println("</head>");
out.println("<body>");

if (session.isNew())
out.println("It is a new session. Session ID: " + request.getSession());
else
out.println("It is not a new session. Session ID: " + request.getSession());

out.println("<h1>Got your chosen color " + request.getParameter("color") + "</h1>");
out.println("</body>");
out.println("</html>");
}
finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}

DD::的代码:

<?xml ...>
<web-app ...>
<servlet>
<servlet-name>ServletNew</servlet-name>
<servlet-class>NewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletNew</servlet-name>
<url-pattern>/NewPattern</url-pattern>
</servlet-mapping>
</web-app>

最佳答案

问题是你先访问index.jsp,然后再访问servlet。

服务器很可能会在您访问的第一个资源处创建 session ,因此该 session 在 index.jsp 上是新的。随后访问 servlet,因此 session 不再是新的。

您基本上可以通过清除 session cookie 来测试您的代码,并通过手动输入其 URL 直接在浏览器中打开 servlet。

我还建议安装 Firefox 插件“Firebug”,它有一个网络控制台,您可以在其中查看对服务器的每个请求,包括所有传输的数据。 (另一个很棒的插件是“Web Developer Toolbar”,它可以很容易地只清除 session cookie。)

根据您要实现的目标,您要么需要重新考虑页面流,要么考虑使用 Struts 等网络框架。

关于java - 检测新的 HttpSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19882604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com