【问题标题】:During Calling a servlet from another Servlet that contains session在从另一个包含会话的 Servlet 调用 Servlet 期间
【发布时间】:2013-12-02 03:18:59
【问题描述】:

我有 3 个 Servlet:

  • Servlet1 - 用于创建会话:session = request.getSession(true)
  • Servlet2 - 用于显示 Servlet1 的内容
  • Servlet3 用于调用 Servlet2 通过 :HttpURLConnection connectionx = (HttpURLConnection) url .openConnection();得到结果:

BufferedReader reader = new BufferedReader(new InputStreamReader(((HttpURLConnection)
    (new URL(the_url)).openConnection()).getInputStream(), Charset.forName("UTF-8")));

问题是:我在运行 Servlet1 创建会话时发现了它 然后我运行 Servlet 3 来调用 Servlet2 ...> 我得到了 'servlet 2' Can not read from the created session..

但如果我直接从浏览器运行 Servlet2,我会得到一个会话。

Servlet2 有什么问题 我该如何解决?!

【问题讨论】:

  • 这是一个复杂的代码行。如果没有别的,请尝试将其分解为更小的部分以便于理解和检查。
  • 您还需要通过调用每个 servlet 来阐明您的意思。你怎么称呼他们? servlet 是通过服务器端转发还是包含相互调用?还是客户单独打电话给每个人?
  • 不只是 Servlet1 在资源管理器上手动运行.. 我在资源管理器上手动运行 Servlet3 ... 所以 Servlet3 调用 Servlet2 的 HttpRequest ,但是 Servlet2 看不到由 Servlet1 创建的会话... :(
  • 停止使用<pre> 获取代码!要使用代码格式,请选择示例并单击消息发布/编辑表单上方的{} 按钮。
  • @Maria 您是否使用任何会话属性来保存数据?

标签: java jsp servlets


【解决方案1】:

当您使用 HttpClient 从 servlet 3 调用 servlet 2 时,您错过了传递 JSESSIONID cookie。

【讨论】:

  • 我认为在 servlet 3 中,您必须使用 request 来获取名为 JSESSIONID 的 cookie 并获取 cookie 值。您还需要找到一种从您的 http 客户端发送 cookie 的方法。我推荐使用 Apache HttpClient。
  • 但问题可能是某些客户端不允许使用 cookie!?!?
  • 我不知道使用 url 连接从 servlet 3 调用 servlet 2 的确切目的是什么。我认为这里的设计不是很好,因为所有 3 个 servlet 都在同一个 servlet 上下文中,所以调用似乎没有必要。
  • 最好再创建一个问题,要求为您的目的提供解决方案或设计。
  • 因为 Servlet 2 从 Database 中返回了一些数据,而在 Servlet 3 中我们需要 Servlet2 中的数据,然后我们需要一些计算和格式化!这就是目的
猜你喜欢
  • 1970-01-01
  • 2011-12-08
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多