gpt4 book ai didi

java - java中什么情况下控件从Filter传递给Servlet?

转载 作者:行者123 更新时间:2023-11-29 05:52:38 25 4
gpt4 key购买 nike

我有在 JBOSS 中运行的服务器。有一个 Filter 监听所有请求,即所有请求都进入 Filter 并从这里传递给其他 Servlet。我注意到了这一点:

当我使用下面的代码时,只调用了过滤器,但控件没有传递给相应的 Servlet(当我使用 打印时,过滤器打印正确的 servlet request.getRequestURI()。它还会打印请求 header 的正确值 usernamepassword)

 HttpURLConnection connection=gs.getconnection("send_user_detail");
connection.setRequestProperty("user", gs.get_login_id());
connection.setRequestProperty("password", gs.get_pass());
connection.setRequestProperty("timezone", TimeZone.getDefault().getDisplayName());
connection.connect();

但是 当我使用下面的代码时,控制被传递到相应的 Servlet 并且工作正常。

 HttpURLConnection connection=gs.getconnection("send_user_detail");
connection.setRequestProperty("user", gs.get_login_id());
connection.setRequestProperty("password", gs.get_pass());
connection.setRequestProperty("timezone", TimeZone.getDefault().getDisplayName());
//connection.connect();
ObjectOutputStream out=new ObjectOutputStream(connection.getOutputStream());
out.writeObject("string"); //some random string not used in the servlet


因此,只有当我在 OutputStream 上写一些东西时,控制才会传递给 servlet。但是使用 connection.connect(),它仍然会上升到过滤器,甚至打印请求的 Servlet 的正确名称。这是什么原因?

最佳答案

URLConnection 中写入请求体意味着一个 HTTP POST 请求。

您的 servlet 显然是在 doPost() 中完成工作,而不是在 doGet() 中。

如果您希望您的 servlet 处理 HTTP GET 请求,您需要在 doGet() 中执行该工作。

这与过滤器完全无关。移除过滤器时,您会遇到完全相同的问题。


与具体问题无关connection.setRequestProperty() 行设置请求 header ,而不是请求参数。确保您没有滥用 header 作为参数(糟糕的设计)。在 POST 的情况下,请求参数应在请求正文中写为 URL 编码的查询字符串。

另见:

关于java - java中什么情况下控件从Filter传递给Servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com