处理Jetty响应时,我想知道请求源自哪个端口?
public static void main(String[] args) {
Server server = new Server();
server.setConnectors(new Connector[] {connectorUnsecure, connectorSecure});
ServletContextHandler handler = new ServletContextHandler();
handler.setContextPath("/");
handler.addServlet(MyServlet.class, "/*");
server.setHandler(handler);
server.start();
server.join();
}
public abstract class MyServlet extends HttpServlet {
@Override
protected final void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Find out on which connector port the request came from.
// (The request.getRequestURL() does not contain the port at all times.)
}
}
使用自定义处理程序时,我可以使用以下内容:
public class CustomHandler extends AbstractHandler {
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// baseRequest.getConnection().getConnector().getPort()
}
}
但是,我不想使用自定义处理程序。
使用普通的HttpServlet时是否可以获取连接器及其端口?
谢谢!
答案 0 :(得分:3)
javax.servlet.http.HttpServletRequest
上有5种可能对您有用的方法。
.getLocalAddr()
- 正在处理请求的服务器地址(可以是IPv4或IPv6).getLocalPort()
- 正在处理.getRemoteAddr()
- 正在处理请求的客户端地址(可以是IPv4或IPv6).getRemotePort()
- 正在处理.getHeader("Host")
- 客户端认为与之通信的请求的HTTP主机(和端口)。 (HTTP规范的一部分,对虚拟主机特别有用)注意:也可以通过.getRequestURI()方法获取HTTP请求主机标头。
String serverAddr = URI.create(request.getRequestURI()).getHost();