我有以下配置:
ServletA (在我的情况下是Apache CXFserlet - 但这并不重要),它匹配所有请求 - / *。 ServletB ,它正在调度到命名的servlet - 如果可用,则为“jsp”,否则为“JspServlet”。
配置ServletA ,以便它转发到 ServletB 所有JSP请求。这是完美的。
另一方面, ServletB 正在向“org.apache.jasper.servlet.JSPServlet”转发,如果应用程序在Tomcat上运行,或者向“weblogic.servlet.JSPServlet”运行,如果我是使用Oracle Weblogic。
Tomcat上的一切都很完美。
在Weblogic上,我遇到以下问题:
ServletA 转发到 ServletB ,转发到weblogic.servlet.JSPServlet
。 JSPServlet应该为JSP提供服务,但事实并非如此。而不是这个,我进入一个无限循环( ServletA - > ServletB - > JSPServlet - > ServletA - > ... )
有没有人知道weblogic.servlet.JSPServlet
内部发生了什么,并且知道如何让Weblogic为我的JSP提供服务?欢迎所有的想法和建议......我已经在这个问题上投入了太多时间而没有任何成功。
注意:
答案 0 :(得分:1)
我认为它是新的Servlet 2.5规范,Weblogic在URL映射时严格执行这些规范。
/
(正斜杠)字符的servlet路径字符串表示应用程序的默认servlet。 servlet路径解析为请求URI减去上下文路径;在这种情况下,路径解析为null。*
(星号)开头的字符串指定扩展名映射。这些更改通过以下HttpServletRequest方法引入了行为更改:
为了更好地说明行为的变化,请考虑解析为ServletA的请求/abc/def.html
:
/
映射到ServletA,则servletPath="abc/def.html"
和pathInfo=null
。/*
映射到ServletA,则servletPath=""
和pathInfo="abc/def.html"
。要确保返回的路径信息为非null,请将所有出现的/
(正斜杠)servlet映射字符串替换为/*
。