在 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 框架中配置多个请求映射的主要内容,如果未能解决你的问题,请参考以下文章

ssm框架中怎么让spring扫描多个包

在一个请求中从 Spring Cloud Config Server 获取多个配置

spring boot cloud kubernetes 配置不适用于多个 pod

在一个请求中从 JS 到 Spring 的多个 STOMP 订阅

spring boot框架的web.xml文件怎么配置

SSH:Hibernate框架(七种关联关系映射及配置详解)