Java 未为连接请求调用Servlet service()方法
我正在尝试使用Servlet3.0在Jetty中编写一个转发代理 我有一个简单的代码- 公共类testServlet扩展了HttpServlet{ @凌驾 受保护的无效服务(HttpServletRequest-req、HttpServletResponse-resp)引发ServletException、IOException{ System.out.println(req.toString()); } } 若客户端请求HTTP站点,将调用上述服务方法,但当请求HTTPS站点时(使用HTTP连接方法),将不调用上述方法。为什么? 我显然可以使用Jetty的处理程序,但我更喜欢使用servlet,这样代码就可以保持一定的可移植性(我可以在Glassfish、Tomat、Jetty等环境下运行它)Java 未为连接请求调用Servlet service()方法,java,http,servlets,https,jetty,Java,Http,Servlets,Https,Jetty,我正在尝试使用Servlet3.0在Jetty中编写一个转发代理 我有一个简单的代码- 公共类testServlet扩展了HttpServlet{ @凌驾 受保护的无效服务(HttpServletRequest-req、HttpServletResponse-resp)引发ServletException、IOException{ System.out.println(req.toString()); } } 若客户端请求HTTP站点,将调用上述服务方法,但当请求HTTPS站点时(使用HTTP
知道什么地方可能出了问题吗?不确定这是否可行 一般来说,servlet需要来自请求的上下文来知道要执行哪个servlet。这是pathSpec到Servlet描述符中存在的Servlet的映射 对于连接请求,实际上没有用于查找此映射的上下文。(换句话说,Servlet容器很难根据CONNECT请求中的信息知道要执行哪个Servlet) 一些想法:
- 请尝试使用pathSpec
(适用于所有pathSpec)设置筛选器“/*”
- 将Servlet设置为pathSpec
(对于默认Servlet)。注意:可能需要先禁用“/”
中的标准DefaultServlet${jetty.home}/etc/webdefault.xml
- 请尝试使用pathSpec
(适用于所有pathSpec)设置筛选器“/*”
- 将Servlet设置为pathSpec
(对于默认Servlet)。注意:可能需要先禁用“/”
中的标准DefaultServlet${jetty.home}/etc/webdefault.xml
- 不确定这是否可行
一般来说,servlet需要来自请求的上下文来知道要执行哪个servlet。这是pathSpec到Servlet描述符中存在的Servlet的映射
对于连接请求,实际上没有用于查找此映射的上下文。(换句话说,Servlet容器很难根据CONNECT请求中的信息知道要执行哪个Servlet)
一些想法:
不会说英语真的好痛。。。呵呵,我需要使用翻译工具来回答您的问题可以将连接请求传递到Servlet服务方法,但这样做最终是徒劳的,因为不可能在Servlet中处理连接。您实际上没有访问原始IO流的权限,只有请求/响应的HTTP内容。您几乎可以完成他的工作,但从来没有效率(没有异步IO等),因此最终还是会回到Jetty API 此外,为什么不利用Jetty已经提供的支持:
可以将连接请求传递给Servlet服务方法,但这样做最终是徒劳的,因为不可能在Servlet内部处理连接。您实际上没有访问原始IO流的权限,只有请求/响应的HTTP内容。您几乎可以完成他的工作,但从来没有效率(没有异步IO等),因此最终还是会回到Jetty API 此外,为什么不利用Jetty已经提供的支持:
你做错了。ServletAPI和框架用于编写Servlet,即端点。不用于编写HTTP代理。HTTP代理基本上非常简单,只需理解一个命令,
CONNECT
,然后在两个方向上复制字节即可。即使您可以将其作为一个servlet工作(您几乎肯定不能这样做),性能影响也会非常严重,因为容器会在调用您之前读取整个请求,并且可能还会缓冲响应。您不希望增加所有延迟。您这样做是错误的。ServletAPI和框架用于编写Servlet,即端点。不用于编写HTTP代理。HTTP代理基本上非常简单,只需理解一个命令,CONNECT
,然后在两个方向上复制字节即可。即使您可以将其作为一个servlet工作(您几乎肯定不能这样做),性能影响也会非常严重,因为容器会在调用您之前读取整个请求,并且可能还会缓冲响应。您不希望所有这些都增加延迟
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
}