0

假设我有一个以 JPA 作为后端的 Spring MVC 应用程序。现在在这里我们想为用户提供简单的 UI 来对一些属性文件进行简单的配置。将其与主 Spring 应用程序分开是有意义的,因为某些配置与 Spring MVC 相关,因此当主 UI 通过 Spring MVC 启动主应用程序时它将失败。

但是如何在同一个 Web 应用程序中注册两个 servlet(Spring 和纯 JSP)?

<!-- Handles Spring requests -->
<servlet>
    <servlet-name>SpringApplication</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/mvc-config.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>


<servlet-mapping>
    <servlet-name>SpringApplication</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>PlainJSPApplication</servlet-name> <!--Is it ok to separate request to different servlet like this?-->
    <servlet-class>com.app.plainJSP</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>PlainJSPApplication</servlet-name>
    <url-pattern>/config</url-pattern> <!--How to handle mapping so not conflict to Spring main application-->
</servlet-mapping>

我认为在SAMEweb.xml 中注册另一个 servlet 类是很常见的,可以吗?以及如何处理该请求 URL 模式,因为“/”已分配给 Spring servlet?

任何意见,将不胜感激。

4

1 回答 1

1

您可以通过使用不同的 url 模式映射两者来分离 Spring 托管控制器和您自己的 servlet。

Spring 控制器的请求由DispatcherServlet管理。基本上,它只是一个 Servlet,当您将 url 映射到它时,Spring 会自动看到它,从而将它映射到正确的控制器、视图等。

web.xml

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

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>PlainJSPApplication</servlet-name> <!--Is it ok to separate request to different servlet like this?-->
        <servlet-class>com.app.plainJSP</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>PlainJSPApplication</servlet-name>
        <url-pattern>*.htm</url-pattern>
        <url-pattern>*.html</url-pattern>
        <url-pattern>*.bmk</url-pattern>
        <!-- other url pattern ... -->
        <!-- other url pattern ... -->
        <!-- other url pattern ... -->
    </servlet-mapping>

在这里,所有以 .do 结尾的请求都会被 Spring 看到。然后您的 servlet 将看到其他人。

因此,只要您不损害此映射,Spring MVC 和您的普通 servlet 就会优雅地集成。

于 2013-07-23T07:11:24.940 回答