java - Spring mvc 创建indexservlet作为根路径

标签 java spring spring-mvc

我使用 spring mvc (4.0),我想使用 servlet 来拦截根映射(“/”)而不是调度程序servlet。 Spring 有一个配置,称为“default-servlet-name”。文档内容如下:

静态资源请求转发到的默认 Servlet 的名称。处理程序将尝试在启动时使用已知名称列表自动检测容器的默认 Servlet。如果由于使用未知容器或手动配置而无法检测到默认Servlet,则必须显式设置Servlet名称。

上述配置的问题是每个请求都会调用默认的 servlet。

Web.xml:

 <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

<servlet>
        <servlet-name>index</servlet-name>
        <servlet-class>com.company.main.IndexServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>index</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
<servlet>
        <servlet-name>spring-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
<welcome-file-list>
    <welcome-file>index</welcome-file>
</welcome-file-list>

spring-servlet-config.xml:

<mvc:annotation-driven/>
<context:annotation-config />
<mvc:default-servlet-handler  default-servlet-name="index" />
<context:component-scan base-package="com.company.controller"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
              p:prefix="/jsp/"
              p:suffix=".jsp"
              p:requestContextAttribute="rc" />

因此,通过上述配置,indexServlet 充当根路径。但被多次调用,因为它是默认处理程序。如果我从 spring 配置中删除标签“default-servlet-handler”,则页面将无法加载。有什么解决办法吗?

提前致谢!

最佳答案

问题是根映射 / 只能由默认 servlet 映射(Java EE 意义上)。

所以恕我直言,你只有一种干净的方法来满足你的要求:你将 Spring Dispatcher-Servlet 映射到 /,你不映射 IndexServlet 并让 spring 转发到它代表 / URL。

您可以使用 ServletForwardingController 来实现:

在 web.xml 中:

<servlet>
    <servlet-name>index</servlet-name>
    <servlet-class>com.company.main.IndexServlet</servlet-class>
</servlet>
<servlet>
    <servlet-name>spring-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

在 spring-servlet-config.xml 中:

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
    /=indexForwardingController
  </property>
</bean>

<bean id="indexForwardingController" class="org.springframework.web.servlet.mvc.ServletForwardingController">
  <property name="servletName"><value>index</value></property>
</bean>

关于java - Spring mvc 创建indexservlet作为根路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886278/

相关文章:

java - 继承变量上的@ConfigurationProperties

java - 更新线程之间的共享变量

java - 自动设置反向引用

java - 有关 Spring MVC 消息转换器的一些信息?

java - CrudRepository 不会删除具有关系的对象

java - 如何创建一个循环,转到文件路径并对每个目录上的文件进行计数

java - 表达式与文字 && 表达式与语句

java - 当我写入内容时,csv 文件为空

java.lang.IllegalAccessError : org. apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z

java - EnableWebMvc 注解含义