如何使用servlet过滤器来更改传入的servlet请求URL
http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123
至
http://nm-java.appspot.com/Check_License?Contact_Id=My_Obj_123
?
更新:根据BalusC的以下步骤,我想出了以下代码:
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
if (requestURI.startsWith("/Check_License/Dir_My_App/")) {
String toReplace = requestURI.substring(requestURI.indexOf("/Dir_My_App"), requestURI.lastIndexOf("/") + 1);
String newURI = requestURI.replace(toReplace, "?Contact_Id=");
req.getRequestDispatcher(newURI).forward(req, res);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
//
}
}
Run Code Online (Sandbox Code Playgroud)
相关条目web.xml如下所示: …
目前我在Tomcat 6上运行了2个web应用程序app1和app2:
我想配置Tomcat,以便它们在不同端口后面的根上下文中运行:
需要做什么?
问题背景
这是情况.我们正在从战争中运行模拟器servlet.我们正在模拟的servlet在一台机器上有许多实例,这些实例由端口号区分.我们只想部署一个可以被许多端口访问的单一战争.
我们到目前为止
使用java Filter(参见下面的web.xml),我们可以根据端口号转发到每个servlet实现(通过添加额外的连接器来添加端口deploy/jbossweb.sar/server.xml).这适用于所有Web服务调用,但不适用于wsdl请求,例如http://localhost:8092/simulator/sim?wsdl8092是许多模拟器的所需版本(8091,8092,8093,8094).在该请求上,正确返回wsdl(每个模拟器实现略有不同),但URL soap:address标记始终使用端口8091.
注意:我们使用的是JBoss 5.0
web.xml的相关部分:
<filter>
<filter-name>SimFilter</filter-name>
<filter-class>com.example.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SimFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)