gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:43:23 26 4
gpt4 key购买 nike

我使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com