检测新的HttpSession

塔希米·阿里(Tahmid Ali)

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

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

我的问题是,我应该怎么做才能在servlet代码中执行if(session.isNew()){}块(包括浏览器的任何设置以及其他任何设置)?我的代码有什么问题?

这是我的下面代码。

初始视图的代码: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>
jCoder

问题是您先访问index.jsp然后访问servlet。

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

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

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

根据要实现的目标,您要么需要重新考虑页面流,要么考虑使用诸如Struts之类的Web框架。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ubuntu,检测新显示

来自分类Dev

检测新tr或内容更改

来自分类Dev

Ubuntu 停止检测新磁盘

来自分类Dev

实体框架6检测新实体

来自分类Dev

检测新的视频和音频输入

来自分类Dev

Vbscript在新的IE窗口中检测按钮

来自分类Dev

使用JS检测网站访问是否是新的

来自分类Dev

JavaScript检测何时创建新的对象属性

来自分类Dev

检测新的视频和音频输入

来自分类Dev

Mint未检测到新内存(RAM)

来自分类Dev

无法检测到新硬盘的大小

来自分类Dev

Arch Linux无法检测到新的SSD

来自分类Dev

检测新的结构初始化

来自分类Dev

Tensorflow 对象检测:使用新检测到的图像重新训练模型

来自分类Dev

检测何时使用jQuery加载新推文?

来自分类Dev

如何检测滚动到UICollectionView中的新部分?

来自分类Dev

使用Android Studio后Google Play检测到新权限

来自分类Dev

在contactList中检测新的联系人添加

来自分类Dev

通过重载新运算符检测内存泄漏?

来自分类Dev

从父级(启动器)检测新的标签关闭

来自分类Dev

无法在新服务器上检测代理

来自分类Dev

检测到新的一天时调用方法

来自分类Dev

使用新的Facebook分享按钮检测成功分享

来自分类Dev

新操作员未检测到错误

来自分类Dev

检测新的Html5标签<mark>的兼容性

来自分类Dev

在resource.save之后检测新的嵌套字段

来自分类Dev

TouchID-检测添加的新指纹-EvaluationPolicyDomainState何时更改?

来自分类Dev

使用新的iPadOS / iOS 13进行PHP移动检测

来自分类Dev

如何检测是否在新的Windows Terminal中运行?