调用客户端重定向后会话属性丢失

2024-01-07

以前,servlet 使用response.sendRedirect("pages/my_page.jsp?foo=bar");没有问题。可以在重定向到的后续页面中检索会话属性。

目前,我正在更改发送请求的方式。最初,Javascript 使用myForm.submit();,但我现在已将其更改为jQuery.ajax("my_page.jsp?foo=bar", {...});。然后,servlet 在 JSON 响应中包含 URL,而不是response.sendRedirect(),并且在success功能,我用window.location.replace(url);导航到新页面。但是,保存的会话属性无法在后续页面中获取。

我通过插入比较了会话 ID<%= session.getId() %>在我的 JSP 页面中。他们是一样的。这里的问题是session.getAttribute("myAttribute_1")回报null在重定向到的页面中。

我不确定这是否重要,但实际上我正在使用超过 1 个 JSP 页面执行此任务:

A.jsp --- (redirect) ---> B.jsp --- (redirect) ---> C.jsp

在这种情况下,如何获取保存的会话属性C.jsp?


Edit

下面是我用来保存会话属性的代码片段。

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(true);

    response.setContentType("application/json");

    CustomObject customObject = new CustomObject();
    // ...
    session.setAttribute("myAttribute_1", customObject);

    PrintWriter writer = response.getWriter();
    JsonObject json = new JsonObject();
    Gson gson = new GsonBuilder().setPrettyPrinting().create();

    json.addProperty("url", "next_page.jsp?foo=bar");
    writer.println(gson.toJson(json));
    writer.close();
}

下面是重定向的代码片段。

function redirectHandler(data, currentUrl) {
    if (data && data.hasOwnProperty('url')) {
        var redirectUrl = data.url;
        jQuery.get(redirectUrl).done(function(response) {
            redirectHandler(response, redirectUrl);
        });
    } else {
        window.location.replace(currentUrl);
    }
}

function sendFormData(method, url, form) {
    jQuery.ajax(url, {
        'method': method,
        'data': parseData(jQuery(form).serializeArray()),
        'success': function(data) {
            redirectHandler(data, window.location.href);
        }
    });
}

Result

我已经恢复使用response.sendRedirect("pages/my_page.jsp?foo=bar")在我的 servlet 中。

在客户端,jQuery.ajax()被删除并且函数sendFormData()更新如下。

function sendFormData(form) {
    var data = parseData(jQuery(form).serializeArray());
    var f = document.createElement('form');

    for (var key in data) {
        jQuery('<input>').attr({
            'type': 'hidden',
            'name': key,
            'value': data[key]
        }).appendTo(f);
    }

    f.setAttribute('method', form.getAttribute('method'));
    f.setAttribute('action', form.getAttribute('action'));
    f.submit();
}

每当我想提交表格时,click事件处理程序已附加。它会调用sendFormData(myOriginalForm);而不是myOriginalForm.submit();因为我需要自定义要发送的数据。

仅通过应用这些简单的更改,一切都会恢复正常。

尽管如此,我仍在寻找对这种奇怪行为的解释。


您是否尝试过不同形式的 Javascript 重定向?

推荐的方法是:

window.location.href=currentUrl;

根据这个article http://rricketts.com/javascript-window-location-redirects-assigns-replace-and-more/, using window.location.replace将取代当前会话。

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

调用客户端重定向后会话属性丢失 的相关文章

  • 如何在 Web 服务器上设置 gzip 压缩?

    我有一个嵌入式网络服务器 总共有 2 兆空间 通常 您使用 gzip 文件对客户端有利 但这会节省我们在服务器上的空间 我读到你可以只 gzip js 文件并将其保存在服务器上 我在 IIS 上测试过 但没有任何运气 为了使这项工作成功 我
  • 使用 JQuery 禁用和启用所有超链接

    我有以下禁用所有超链接的内容 但在事件发生后我想再次启用它们 我该如何执行此操作 a click function return false 我认为这不仅仅是将其设置为 true 那么简单 谢谢大家 不要以这种方式绑定 点击 处理程序 而是
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • 如何仅显示/隐藏此 bootstrapvue 表的第二列和第三列?

    下面的代码将显示 隐藏 a 中的所有列BootstrapVue桌子 代码的来源就是这里的答案 使用 bootstrap vue 组件和 bootstrap 3 动态显示 隐藏列 https stackoverflow com questio
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 为什么我收到“在嵌套函数中通过 this 对类字段进行潜在无效的引用访问”错误

    在普通 JS 中 我的代码可以正常工作 对于这种情况 我想组件化我的Wall类应该在浏览器中显示用户上传的图像 同样 这在 vanilla JS 中正常工作 但在 JSX 中不起作用 我得到了一个potentially invalid re
  • 模板中带有 ng-if 的 angularjs 指令

    我正在构建一个在模板内使用 ng if 的指令 奇怪的是 提供给链接函数的元素没有扩展ng if代码 它只是ng if的注释行 经过一番尝试 我发现通过将链接代码包装在 timeout 中似乎可以使其正常工作 但我想知道这是否不是正确的处理
  • Web组件中嵌套槽的内容不可见

    我有一个 Web 组件 它应该接受任意元素来包装其内容 虽然我可以在 Chrome 开发工具中看到插槽已正确分配 但 DOM 中什么也没有出现 以前有人见过这个问题吗 定义 class ExampleParent extends HTMLE
  • 使用 JAD 反编译 java - 限制

    我正在尝试使用 Java 中的 JAD 反编译几个 jar 文件 我也尝试过 JD GUI 但运气更差 但出现了很多错误 一种类型 易于修复 似乎是内部类 但我也发现了这段代码 static int SWITCH TABLE atp com
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 公共方法与公共 API

    在干净的代码书中 有一个观点是 公共 API 中的 Javadocs 同样 Effective java 一书也有这样的内容 项目 56 为所有公开的 API 元素编写文档注释 所以这就是我的问题 所有公共方法都被视为公共 API 吗 它们
  • 摩纳哥:如何添加内联自动完成/代码建议?

    我找不到任何有关如何添加内联自动完成功能的示例 如下图所示 有人可以指导我如何在摩纳哥做到这一点吗 这可以在 v1 66 中启用 现在在 Insiders 中 The editor quickSuggestions设置现在接受内联为 配置值
  • 我可以使用 ASP.NET WebForms 母版页在每个内容页中包含不同的 javascript/css 文件吗?

    我有几个使用相同母版页的内容页 它们并不都需要包含在相同的 javascript 和 css 文件中 tag 是否可以更改内容来自内容页面的标签 确实如此 但我建议采取一些不同的做法 我在关闭正文标签的正上方放置了一个内容占位符 然后我填充
  • 春季 CORS。在允许的来源中添加模式

    查看CORS的弹簧指南 以下代码启用所有允许的来源 public class MyWebMVCConfigurer extends WebMvcConfigurerAdapter Override public void addCorsMa
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • 确定 Javascript 中的日期相等性

    我需要找出用户在 Javascript 中选择的两个日期是否相同 日期以字符串 xx xx xxxx 形式传递给该函数 这就是我需要的全部粒度 这是我的代码 var valid true var d1 new Date datein val
  • 如何捕获 try-with-resource 语句中 close 方法抛出的异常

    我正在读关于try with resourceJava 中的语句可用于指定任意数量的资源 try Resource1 res1 initialize code Resource1 res2 initialize code statement
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo
  • 如何在 Jquery/Javascript 中绑定模糊和更改,但只触发一次函数?

    我试图在选择元素更改时触发函数 由于 Ipad 在 on change 方面遇到问题 我还想绑定到 blur 这在 Ipad 上工作得很好 但是我不希望两个事件都触发该函数两次 所以我需要某种挂钩来确保两个事件是否都触发change and

随机推荐

  • Firebase UI - facebook、google 和电子邮件登录无法正常工作

    我在我的应用程序中使用 firebase ui 进行登录 当我在调试模式下运行它时 一切正常 完全没有错误 我用手机运行它 效果很好 当我将应用程序上传到 Play 商店时 我的问题就开始了 当用户尝试使用 Facebook 登录时 它会告
  • Amazon DynamoDB——特定于区域的连接

    我正在使用botoPython 中的库用于连接到 DynamoDB 以下代码对我来说效果很好 import boto key abc secret 123 con boto connect dynamodb key secret table
  • 如何防止跟踪的配置文件被 git 中的合并更改?

    我有一个 Web 项目 有两个 git 分支 开发和生产 每个分支连接到不同的服务器 开发和生产 每个分支都有一组跟踪的配置文件 例如不同的 URL 数据库选项 sql 导出文件等 这些文件在两个分支上都是不同的 每次我尝试合并这些分支时
  • 按对象类型进行 LINQ 选择

    我有一个包含两种类型的对象 A 和 B 的集合 Class Base Class A Base Class B Base List collection new List collection Add new A collection Ad
  • 关于 Swagger API 的建议

    我正在使用 SpringBoot 和 Spring REST 服务使用 Java 8 构建 API 我刚刚发现了 Swagger API 现在我想让我的 API Swagger 兼容 据我所知 Swagger 是一个记录 API 的工具 除
  • 从 Azure Cosmos DB 导出数据(其中类型为 MongoDB API)

    我需要将数据以 CSV 或 JSON 格式从 Azure Cosmos DB 导出到本地系统 有人能帮我吗 你可以使用cosmos 数据库迁移工具 https learn microsoft com en us azure cosmos d
  • 分隔来自套接字的数据

    在我的 Java 应用程序中 有一个 Socket 打开 并且正在从其 InputStream 读取数据 在最佳条件下 每个传入的数据包都会调用 read 返回其应用层数据 这就是我想要得到的 每一条 消息 packet 但是 数据可能会根
  • 如何调用离用户最近的云函数

    我有一个像这样的云函数 它已设置为在多个区域运行 export const cloudFunction functions region asia south1 us central1 europe west1 southamerica e
  • Android Firebase如何在特定用户下保存和检索数据

    我正在尝试将我的应用程序与 firebase 集成以在云上保存简单数据 Example 用户打开应用程序并登录 用户写一些东西 数据保存在云端 当用户再次使用该应用程序时 他将看到他的数据 我已阅读文档 但我找不到任何示例 结构在用户和数据
  • Dapper:具有重复列名称的多重映射

    我有一个看起来像这样的表 ID ERR1 ERR2 ERR3 05A2 A001 B223 C212 06B3 B392 C234 D234 我想将其映射到如下所示的对象 public class Entry public string I
  • 如何在没有 UIWebView 的情况下播放 youtube 视频或当 youtube 视频开始使用 webview 播放时检测视频播放器?

    我需要在我的 iOS 应用程序中播放 YouTube 视频 并且在播放视频时我需要在视频上添加叠加层 1 现在如何在本机播放器中运行 youtube 视频 2 如果我在 UIWebview 中播放视频 那么我如何检测该视频是 播放以及如何在
  • 使用gdb查找程序卡在哪里

    我的程序无法正常工作 看起来它陷入了无限循环或错误的互斥锁定 解锁 但是 我不知道错误在哪里 我尝试使用 gdb 进行调试 我无法使用 gdb backtrace 命令 因为我没有指定断点 我无法指定它 因为我不知道错误在哪里 gdb 有
  • Awesome-wm 中特定标签下的应用程序自动启动

    我读过了在 Awesome wm 中为特定应用程序设置窗口布局 https stackoverflow com questions 5120399 setting windows layout for a specific applicat
  • NuGet - 从命令行添加新的包源

    我有一个场景 我在 VSTS 中创建构建 我无权访问托管代理的虚拟机 并且未将其设置为包含我们的内部包源 我确实可以通过命令行 powershell 进行访问 如何通过命令行向 VS2017 添加新的包源 或者我什至可以这样做 您可以使用
  • symfony 4 设置以匿名身份登录

    我正在研究一个Symfony 4项目 尝试登录后 它使用匿名令牌将我重定向回登录页面 我的设置是使用来自的登录表单symfony docs 单击登录后 我的会话只有csrf authenticate属性 有什么想法我做错了什么吗 安全 ya
  • 企业架构师显示奇怪的符号。这是什么意思?

    有时 我在开始更详细的 UML 工作和开发之前构建的一些 不是全部 需求工件上会出现一个红色三角形 我不知道是什么原因造成的 也不知道它想表达什么 更重要的是 我无法摆脱它 据我所知 这与 UML 或 SysML 规范无关 是吗 谁能解释一
  • 对话框布局双层错误透明背景

    我想制作一个白色的 无边框的弹出视图 为了实现此目的 我使用具有自定义样式的自定义对话框 public Builder createNewDialog int type AlertDialog Builder dlg null switch
  • 如何以编程方式设置和启动 Scrapy 蜘蛛(url 和设置)

    我用 scrapy 写了一个工作爬虫 现在我想通过Django webapp来控制它 也就是说 设置1个或多个start urls 设置1个或多个allowed domains Set settings values 启动蜘蛛 停止 暂停
  • Windows 中的 cmake 和 make

    据我所知 在linux cmake中 make和make install可以组合在一起生成一个版本 例如 cmake DCMAKE BUILD TYPE Release make make install 然而 在 Windows 中 我找
  • 调用客户端重定向后会话属性丢失

    以前 servlet 使用response sendRedirect pages my page jsp foo bar 没有问题 可以在重定向到的后续页面中检索会话属性 目前 我正在更改发送请求的方式 最初 Javascript 使用my