使用spring和BIRT的Servlet映射url映射问题

时间:2011-04-27 03:48:20

标签: servlets spring-mvc birt

在我的应用程序中,我使用spring MVC(3.0.5)架构和BIRT报告框架。

我正在尝试使用弹簧css为所有请求(包括jshtmlDispatcherServlet和图像文件提供服务。

为此,我将以下条目添加到我的web.xml

<servlet>
    <servlet-name>springapp</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

...............
...............

<servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

这会将所有请求定向到DispatcherServlet,并在我添加的上下文文件中

<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/docs/**" location="/docs/" />
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/themes/**" location="/themes/" />

以便从文件系统加载这些资源。

这些配置工作正常。但我现在面临着BIRT报告引擎的问题。

BIRT报告引擎使用位于名为webcontent的文件夹中的一些jsp文件,该文件夹位于应用程序的根目录下。由于我们将所有请求定向到DispatcherServlet,因此即使对这些jsp页面的请求也会转到spring servlet。我从一些帖子中了解到,jsp文件通常由org.apache.jasper.servlet.JspServlet处理,该文件在Apache Tomcat的web.xml文件中注册,并且具有如下的servlet映射

<!-- The mapping for the JSP servlet -->
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

我应该在servlet映射中对此环境进行哪些更改?我需要jsp文件由默认的jsp servlet处理,而不是由spring servlet处理。我怎样才能做到这一点?

对于this post我理解servlet匹配的第二个优先级是url前缀,所以spring servelt的url模式/覆盖了默认的jsp servlet映射,这个假设是否正确?如果它是正确的,那么如何克服这个?

谢谢。

1 个答案:

答案 0 :(得分:1)

DispatcherServlet的典型映射是<url-pattern>/</url-pattern>。在这种情况下,它仍然处理除了由其他servlet处理的请求之外的所有请求(特别是对*.jsp的请求),以便它可以解决问题。