Java 一个webapp如何转发到另一个webapp?
我有两个静态war,其中包含Jetty服务器和根上下文war提供的帮助文件Java 一个webapp如何转发到另一个webapp?,java,redirect,web-applications,jetty,war,Java,Redirect,Web Applications,Jetty,War,我有两个静态war,其中包含Jetty服务器和根上下文war提供的帮助文件 help.war-英文帮助文件 帮助\u CS.war-捷克帮助文件 根源战争 根据请求的区域设置,我希望将用户转移到与他们相关的语言。i、 e.用户请求/help/index.htm,当他们从捷克地区请求时,会得到/help\u CS/index.htm。其想法是,可以根据需要添加语言包,而无需太多麻烦 添加Jetty.xml中提到的自定义,该自定义从获取区域设置,并在handle()上转发或重定向。两人都抱怨,因为
- help.war-英文帮助文件
- 帮助\u CS.war-捷克帮助文件
- 根源战争 根据请求的区域设置,我希望将用户转移到与他们相关的语言。i、 e.用户请求/help/index.htm,当他们从捷克地区请求时,会得到/help\u CS/index.htm。其想法是,可以根据需要添加语言包,而无需太多麻烦 添加Jetty.xml中提到的自定义,该自定义从获取区域设置,并在handle()上转发或重定向。两人都抱怨,因为响应代码已经被发送到这里…不知怎么的 我在ROOT.war的web.xml中尝试了一个定制,但无论我尝试了什么样的url模式,都无法匹配*/help/** 然后,我在我的help.war中添加了一个与上次尝试的WEB-INF/WEB.xml相同的引用,该引用将匹配,并且可以生成URL,但此时我无法重写URL,因为它总是以/help/开头,所以用help\CS替换的带有help的URL最终会成为domain/help/help\CS/index.htm 所以我的问题是。这应该怎么做
所以!经过几天的胡闹,我发现这感觉有点不舒服,但它的工作 我使用我的自定义设置,然后将它放在WEB\u INF/WEB.xml中,用于每个help\u XX.war,每个war文件都有一个单独的servlet映射(但在其他方面是相同的)
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/help_CS</url-pattern>
</servlet-mapping>
使用javascript。如果(isCS){window.location.href=hostname/help\u CS},其中是isCS布尔变量。计划不错,但我不能。帮助文件是由一些第三方软件动态生成的,这些软件几乎不允许定制。这意味着,如果有一天我们有50种语言,每次生成帮助时,JavaScript都需要手工输入50*n(n是语言的数量)。你是对的。将帮助文件存储在主web应用程序的子目录中。我认为这是正确的。另一个我无法接受的好主意。我们在战争中分发,重新构建我们所有帮助的构建和部署方式不是一个选项:(将
/../../
隐藏到重写的URL中如何?
@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest) req;
String requestAddress = request.getRequestURI();
String country_code = req.getLocale().getCountry();
if (requestAddress.contains("/help/"))
{
ServletContext forwardContext = config.getServletContext().getContext("/help_" + country_code);
forwardContext.getRequestDispatcher(requestAddress.replace("/help", "")).forward(req, res);
}
else
{
chain.doFilter(req, res);
}
}