JSP Servlet 会话 invalidate() 不会使会话为空

2023-12-14

我的 JSP 项目中有三个简单的 Http Servlet 类:“LoginServlet”、“Logout Servlet”和“Profile Servlet”。

  • LoginServlet:通过为会话设置“name”属性来登录用户
  • LogoutServlet:注销用户并使会话无效
  • ProfileServlet:如果用户已登录,则显示用户欢迎信息

最后两个 servlet 如下,我认为是有问题的。

@SuppressWarnings("serial")
public class LogoutServlet extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html");
            PrintWriter out=response.getWriter();

            HttpSession session=request.getSession(false);
            session.invalidate();

            request.getRequestDispatcher("link.jsp").include(request, response);

            out.print("You are successfully logged out!");

            out.close();
    }
}

And

@SuppressWarnings("serial")
public class ProfileServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        request.getRequestDispatcher("link.jsp").include(request, response);

        HttpSession session = request.getSession(false);
        if (session != null) {
            String name = (String) session.getAttribute("name");

            out.print("Hello, " + name + " Welcome to Profile");
        } else {
            out.print("Please login first");
            request.getRequestDispatcher("login.html").include(request,
                    response);
        }
        out.close();
    }
}

和 link.jsp:

<% HttpSession nsession = request.getSession(false);
if(nsession == null) {
%>
<a href="login.html">Login</a>
<%
}
else {
%>
<a href="LogoutServlet">Logout</a>
<%
}
%>
<a href="ProfileServlet">Profile</a>
<hr/>

问题是当用户登录时,当单击“Logout”链接并调用“LogoutServlet”时,会话未正确失效并且 ProfileServlet 仍然打印出来

"Hello, null Welcome to Profile"

而不是重定向到“login.html”页面,因为会话仍然不为空。因此,“link.jsp”页面上不会显示“Login”链接。这会阻止用户再次尝试登录。

EDIT:为了澄清问题,我制作了一个新的 html 页面并更新了 servlet 来执行以下操作

request.getRequestDispatcher("link.html").include(request, response);

还有“link.html”。

<a href="login.html">Login</a>
<a href="LogoutServlet">Logout</a>
<a href="ProfileServlet">Profile</a>
<hr/>

有趣的是,这正是我想要的!我想问题是

request.getRequestDispatcher("link.jsp").include(request, response);

但我无法解释为什么......


在 JSP 中,默认情况下会创建新会话(如果不存在),因此您将始终获得非空会话。您可以通过将以下页面指令添加到您的页面来禁用它:

<%@ page session="false" %>

欲了解更多信息,请检查以下内容为什么要设置 JSP 页面 session = “false” 指令?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSP Servlet 会话 invalidate() 不会使会话为空 的相关文章

  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • Java:迭代 Collection 的最佳方法(此处为 ArrayList)

    今天 当我看到一段我已经使用了数百次的代码时 我很高兴地开始编码 迭代集合 此处为 ArrayList 出于某种原因 我实际上查看了 Eclipse 的自动完成选项 这让我想知道 在什么情况下以下循环比其他循环更好使用 经典的数组索引循环
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • 我可以使用子接口重新编译公共 API 并保持二进制兼容性吗?

    我有一个公共 API 在多个项目中多次使用 public interface Process
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • Java整数双除法混淆[重复]

    这个问题在这里已经有答案了 方案1 int sum 30 double avg sum 4 result is 7 0 not 7 5 VS 方案2 int sum 30 double avg sum 4 0 Prints lns 7 5
  • 欧洲中部时间 14 日 3 月 30 日星期五 00:00:00 至 日/月/年

    我尝试解析格式日期Fri Mar 30 00 00 00 CET 14至 日 月 年 这是我的代码 SimpleDateFormat formatter new SimpleDateFormat dd MM yyyy System out
  • 使用 Vaadin Flow Web 应用程序处理全局所有布局和“路由”URL 的登录

    Vaadin 8 在 Vaadin 8 中 在我的UI子类我通过检查用户的会话是否带有一个属性来处理登录 该属性表明他们是否已成功登录 如果没有的话 我的UI子类显示登录布局 而不是带有导航选项的其他内容 例如菜单栏和在该 UI 内切换布局
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我

随机推荐

  • Angular 中 angular.copy 的替代品是什么

    如何在 Angular 中复制对象并丢失其引用 有了 AngularJS 我可以使用angular copy object 但我在 Angular 中使用它时遇到一些错误 异常 参考错误 angular没有定义 假设你使用的是 ES6 你可
  • Android:可点击 TextView 中的 ClickableSpan

    我有一个可以包含可点击链接的文本视图 当单击其中一个链接时 我想开始一项活动 这工作正常 但也应该可以单击整个文本视图并启动另一个活动 这就是我当前的解决方案 TextView tv TextView findViewById R id t
  • 使用单击时中断停止 for 循环

    我有一个从 1 到 20 的简单循环 我想做的是通过单击按钮来停止循环 我所做的是 我设置了一个条件 即单击按钮后变量的值stop将更改为 1 这将触发break 但值没有改变 var stop 0 for let i 1 i lt 20
  • Homestead 上 Netbeans 中 Laravel Dusk 的 Xdebug

    在 Laravel Homestead 中 我已经能够使用 Xdebug 进行单元测试 功能测试 浏览器浏览等 但当我尝试使用 Xdebug for Dusk 时 它会挂起 在测试 浏览器文件夹中进行测试 我认为这些问题可能会有所帮助 但我
  • WPF 图像平移约束

    我试图找出如何限制平移 使图像完全保持在其包含边框的范围内 任何这方面的帮助将不胜感激 谢谢
  • 将 UIImage 转换为 Keras 模型的 MLMultiArray

    在 Python 中 我使用 keras 训练了一个图像分类模型 以接收 224 224 3 数组形式的输入并输出预测 1 或 0 当我加载保存模型并将其加载到 xcode 中时 它指出输入必须采用 MLMultiArray 格式 有没有办
  • 不可能向外界隐藏模板的实现(为了保护知识产权)。我对吗?

    我已阅读为什么模板只能在头文件中实现 and 为什么我不能将模板类的定义与其声明分开并将其放入 cpp 文件中 如果我创建模板 那么我还将提供对其的访问权限cpp 文件附加到他们的h files 或者直接将定义写入头文件中 因此 如果我想允
  • 无法更改图例符号 nvd3 气泡图

    在我的 nvd3 气泡图中 每组点都有不同的符号 但图例全部为圆圈 代码是here 我只遇到过这个 showLegend false 它可以隐藏或显示图例 我无法理解如何更改图例中的符号 nvd3 不允许您直接访问图例的内部结构 但是 您可
  • 如何在纵向应用程序中录制横向视频? (斯威夫特 2、iPhone)

    我需要在我的纵向 iPhone 应用程序中录制横向视频 是否可能 或者是否受到任何硬件限制的阻止 使用 AVCaptureVideoPreviewLayer 我能够更改预览方向 但视频仍然以纵向录制 欢迎任何想法 您应该能够将视频录制的方向
  • 如何将 cmake 与 boost asio 结合使用?

    我不明白boost asio在我的 C 程序中使用 cmake 我实际上已经尝试和谷歌搜索了很多小时 但我无法让它工作 我想包括boost asio在我的 Ubuntu 18 04 下的 c 项目中 带有一个 cmake 文件 所以我安装了
  • 如何从 Eclipse 为 javaCV 或 openCV 项目制作可运行的 jar

    我在 eclipse 中有一个 openCV 项目 现在 我试图使其可运行 Jar 但一旦尝试运行该 Jar 就无法启动它 我尝试遵循 https groups google com forum topic javacv ziqKIb7Pg
  • 如何在servlet中通过ajax获取数据?

    我想将页面上的一些数据发送到servlet 所以我写了下面的jquery来做到这一点 我用所有数据构建一个json字符串 并直接将其发送到servlet 但我不知道如何从servlet中的ajax获取全部数据 save click func
  • 优化 Sql Reporting Services 2005 中大报表的 PDF 导出

    首先 我知道运行非常大 长时间运行的报告是一个可怕的想法 我知道 Microsoft 有一条经验法则 规定 SSRS 报告的执行时间不应超过 30 秒 然而 有时 由于遵守州法律等外部力量 巨额报告是首选的祸害 在我的工作地点 我们有一个
  • Perl从命令行执行的问题

    上周我在 WinXP 上用 Strawberry Perl 替换了 ActivePerl 我发现我必须使用以下命令运行我的 Perl 脚本perl myperl pl 否则我只需要运行myperl pl在安装草莓之前 我怎么只能跑myper
  • Python:尝试使用请求发布表单

    我正在尝试使用 Python 和请求库登录网站进行一些抓取 我正在尝试以下操作 这不起作用 import requests headers User Agent Mozilla 5 0 payload username niceuserna
  • Django Forms 模板设计类

    Django Forms 框架非常出色 只需通过以下内容即可呈现整个表单 form as p 对于注册表 将上面的内容转换为 p p
  • 如何使用openjson递归解析JSON字符串

    我有以下 JSON 数据 set json N Book IssueDate 02 15 2019 Detail Type Any Type Author Name Annie Sex Female Chapter Section 1 1
  • 具有可变数量子视图的动态 UITableViewCell 高度

    我有一个UITableViewCell使用从远程源检索的数据动态填充 它具有基于单元格中表示的项目类型的可变数量的子视图 我通过使用动态计算单元格内容的大小NSMutableAttributedString和boundingRectWith
  • 无法从tomcat中自定义类加载器加载的类获取注释

    鉴于班级org popper example pages Login Page name Login public interface Login 出口到c pos example jar和以下 servlet public class P
  • JSP Servlet 会话 invalidate() 不会使会话为空

    我的 JSP 项目中有三个简单的 Http Servlet 类 LoginServlet Logout Servlet 和 Profile Servlet LoginServlet 通过为会话设置 name 属性来登录用户 LogoutSe