java – 重定向到另一个端口,保留所有其余的端口
在服务器(嵌入式Jetty)上,我需要重定向到另一个端口,保持其他所有内容不变,例如,重定向
http://com.example.myserver:1234/whatever?with=params#and-hash?and=whoknowswhat 至 http://com.example.myserver:5678/whatever?with=params#and-hash?and=whoknowswhat 看起来我必须从我不知道的事情中编写结果URL: >浏览器使用的服务器名称 解决方法
开箱即用的重写处理程序
http://wiki.eclipse.org/Jetty/Feature/Rewrite_Handler 我快速浏览了Jetty开箱即用的重写处理程序.从我可以从文档/示例中收集到的内容,它们似乎只在URL的路径部分进行实际重写(即端口之后的所有内容,而不是我们想要的内容)(如果我错了,请纠正我! ). 编写请求处理程序 一个让你开始的基本例子,如果你只想使用嵌入式jetty,你可以编写一个请求处理程序,将所有请求重定向到给定的端口. 它的工作方式是PortRedirector使用handle方法处理HTTP请求.它构建原始请求URL,将端口更改为目标“to”端口,并将客户端重定向到新URL. 在以下示例中,服务器侦听端口1234,并将所有请求重定向到端口8080. import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.AbstractHandler; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class Redirector { public static void main(String[] args) throws Exception { Server server = new Server(1234); server.setHandler(new PortRedirector(8080)); server.start(); server.dumpStdErr(); server.join(); } static class PortRedirector extends AbstractHandler { int to; PortRedirector(int to) { this.to = to; } public void handle(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { String uri = request.getScheme() + "://" + request.getServerName() + ":" + to + request.getRequestURI() + (request.getQueryString() != null ? "?" + request.getQueryString() : ""); response.sendRedirect(uri); } } } 参考文献: > Get full URL and query string in Servlet for both HTTP and HTTPS requests (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |