我正在将一个 Java Web 应用程序从 OC4J 迁移到 WebLogic 11g。该应用程序包含以下 servlet 映射:
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*_dyn.txt</url-pattern>
</servlet-mapping>
这在 OC4J 中起作用有两个原因:
- servlet 名称“jsp”自动映射到 JSP servlet
- OC4J 接受模式 *_dyn.txt,即使它不符合 servlet 标准。
我在 WebLogic 中发现,我可以通过添加以下内容将 servlet 名称“jsp”显式映射到 JSP servlet:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>weblogic.servlet.JSPServlet</servlet-class>
</servlet>
如果我使用标准 URL 模式(例如 /dyn/*)而不是 OC4J 接受的非标准 URL 模式 *_dyn.txt,则此方法有效。
我尝试使用 Tuckey 的 UrlRewriteFilter 来映射它,但这会导致 JSPServlet 类中出现异常。
我的 UrlRewriteFilter 规则如下所示:
<rule match-type="wildcard">
<from>**/*_dyn.*</from>
<run class="weblogic.servlet.JSPServlet" method="service" />
</rule>
我得到的例外是:
Error 500--Internal Server Error
[AddToMap: pattern=/bla/test_dyn.txt class=jsp_servlet._bla.__test_dyn_txt]
at weblogic.servlet.JSPServlet.service(JSPServlet.java:220)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.tuckey.web.filters.urlrewrite.Run.invokeRunMethod(Run.java:416)
谁能告诉我如何实现我的目标?
谢谢马丁
_