在 Spring 框架中配置多个请求映射
Posted
技术标签:
【中文标题】在 Spring 框架中配置多个请求映射【英文标题】:Configuring multiple requestmapping in Spring framework 【发布时间】:2013-02-15 18:00:00 【问题描述】:我在请求映射中有一个小问题,
我有controllerA
,请求映射为
@Controller
@RequestMapping(value="login/formA.html", "B/formB.html", "C/formC.html")
public class ControllerA
我需要在不影响现有控制器的情况下再创建一个控制器,
第二个控制器的请求映射,如下所示
@Controller
@RequestMapping(value="X/test1", "Y/test2", "Z/test3")
public class ControllerB
如何配置spring-servlet.xml
来配置上述场景并使其工作。
我有web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="https://java.sun.com/xml/ns/j2ee" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee https://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/public/login/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/public/signout/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/public/X/*</url-pattern>
</servlet-mapping>
</web-app>
我的spring-servlet.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:annotation-driven/>
<context:component-scan
base-package="com.abc.xyz.controller"/>
<context:component-scan
base-package="com.abc.xyz.controller.example1"/>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class='org.springframework.web.servlet.view.ContentNegotiatingViewResolver' p:order='1'>
<property name='mediaTypes'>
<map>
<entry key='json' value='application/json' />
<entry key='html' value='text/html' />
</map>
</property>
<property name='viewResolvers'>
<list>
<bean class='org.springframework.web.servlet.view.BeanNameViewResolver' />
<bean class='org.springframework.web.servlet.view.UrlBasedViewResolver'>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
</bean>
请给我建议来解决这个问题,几天后就解决了。
提前致谢。
【问题讨论】:
***.com/questions/2513031/…的可能重复 如果与以上链接无关。请说明您的问题 【参考方案1】:在 web.xml 中再添加一个 servlet 映射,如下所示
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/public/*/*</url-pattern>
</servlet-mapping>
【讨论】:
感谢 krish 的回复。但我也必须映射目录,因为,有些场景,比如如果 login1/login,signout/signout 两个映射,那么如果你尝试上面的配置,即使我们像 login1/signout 这样的调用,我认为请求会工作,我不想要这种行为,如果 web.xml 中的目录与控制器中 requestmapping 中的目录相匹配,那么只有被调用的方法需要调用。例如:web.xml,url-pattern 是 /public/view1 /* 和 /secured/showmessage/* 以及 view1/viewService 和 showmessage/messageDispathcer 之类的请求映射,我希望得到场景。以上是关于在 Spring 框架中配置多个请求映射的主要内容,如果未能解决你的问题,请参考以下文章
在一个请求中从 Spring Cloud Config Server 获取多个配置
spring boot cloud kubernetes 配置不适用于多个 pod