【问题标题】:Avoiding HTTP session with legacy code in tomcat/servlet在 tomcat/servlet 中避免与遗留代码的 HTTP 会话
【发布时间】:2023-03-22 12:00:01
【问题描述】:

有人告诉我要使用一些由 servlet 和 taglib 组成的第 3 方软件。 servlet生成搜索结果,taglib根据servlet渲染结果和其他交互元素。

问题是第 3 方解决方案是通过 http 会话实现的,这意味着 servlet 进行搜索,将结果存储在会话中,将重定向发送到浏览器和查看页面(在一个完整的单独 http 请求中)显示会话的结果。

我想摆脱会话,因为这不适用于多个选项卡并且还有其他一些缺点。但是 servlet 和 taglib 是按原样交付的,如果我需要不同的东西,我必须自己从头开始实现它。

知道如何在一个请求中实现这一点,从而不需要会话吗?在最好的情况下,无需更改代码,而只需一个包装器。它可以接受服务器创建会话,但我不希望浏览器依赖它。

我的一个想法是使用 request-dispatcher 在一个 http 请求中执行 servlet 调用和视图,但该软件仍然使用会话。然后我可以在每次请求后丢弃会话。我们非常感谢更好的想法。

我当然知道,最好的办法是在不满足我要求的情况下正确实施它。但一切照旧,我们尽量避免花费太多时间..

提前致谢,晚上愉快 米歇尔

【问题讨论】:

  • 有什么理由不能直接转发到 JSP 而不是整个“redirect-and-load-from-session”废话?
  • @MattBrock 我只想转发,但愚蠢的 servlet 会进行重定向。如果我要实现它,它将是转发或 ServletFilter,而不是带有会话内容的重定向。

标签: java session tomcat


【解决方案1】:

我知道这不是最好的解决方案,但创建一个 javax.servlet.Filter ,它用自定义的包装 HttpServletRequestHttpServletResponse。 覆盖自定义包装器中的 request.getSession()response.sendRedirect() 方法。

并通过在 web.xml 文件中定义属性 将过滤器应用到搜索 servlet 和 JSP。

【讨论】:

  • 我不确定,但可能是包装 HttpServletRequest、HttpServletResponse 和重新实现 HttpSession 比重新实现所有代码工作量更大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2013-01-25
  • 2016-01-02
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多