Java 一个web.xml中的两个DispatherServlet

Java 一个web.xml中的两个DispatherServlet,java,spring,rest,spring-mvc,web.xml,Java,Spring,Rest,Spring Mvc,Web.xml,我编写了SpringMVC应用程序 我有两个控制器。我想处理不同的dispatcherservlet实例 我怎样才能做到 控制器1: @Controller @RequestMapping("/controllerPath") public class MyController { @RequestMapping("/sayHello") public String sayHello(Model model){ ... } } 控制器2: @Cont

我编写了SpringMVC应用程序

我有两个控制器。我想处理不同的dispatcherservlet实例

我怎样才能做到

控制器1:

@Controller
@RequestMapping("/controllerPath")
public class MyController {

    @RequestMapping("/sayHello")
    public String sayHello(Model model){
        ...
    }

}
控制器2:

@Controller
@RequestMapping("/restControllerPath")
public class RestController {

    @RequestMapping (value = "importantObject", method = RequestMethod.GET)
    @ResponseBody
    public  VeryImportantlClass getInformation(){
        ...
    }
}
我需要在web.xml中编写什么

更新

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

  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>controllerPath/**</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>mvc-dispatcher-rest</servlet-name>
        <url-pattern>restControllerPath/**</url-pattern>
  </servlet-mapping>
其他尝试:

<servlet-mapping>
    <servlet-name>mvc-dispatcher-rest</servlet-name>
        <url-pattern>/restControllerPath/**</url-pattern>
  </servlet-mapping>

mvc调度程序rest
/restControllerPath/**
上面的变体是-404

但是

<servlet-mapping>
    <servlet-name>mvc-dispatcher-rest</servlet-name>
        <url-pattern>/</url-pattern>
  </servlet-mapping>

mvc调度程序rest
/

工作方式

您只需要一个DispatcherServlet

它可以同时处理REST控制器和JSP呈现

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

<servlet-mapping>
  <servlet-name>jspservlet</servlet-name>
  <url-pattern>/controllerPath/**url-pattern>
</servlet-mapping>

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    /WEB-INF/applicationContext.xml
    /WEB-INF/user-webservice-beans.xml
  </param-value>
</context-param>

<servlet>
  <servlet-name>user-webservice</servlet-name>
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>user-webservice</servlet-name>
  <url-pattern>/restControllerPath/**</url-pattern>
</servlet-mapping>

jspservlet
org.springframework.web.servlet.DispatcherServlet
1.
jspservlet
/controllerPath/**url模式>
上下文配置位置
/WEB-INF/applicationContext.xml
/WEB-INF/user-webservice-beans.xml
用户Web服务
org.apache.cxf.transport.servlet.CXFServlet
2.
用户Web服务
/restControllerPath/**

无法理解为什么需要两个单独的dispatcher servlet,但web.xml配置应类似于:

<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/controllerPath/*</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>Servlet2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Servlet2</servlet-name>
<url-pattern>/restControllerPath/*</url-pattern>
</servlet-mapping>

Servlet1
org.springframework.web.servlet.DispatcherServlet
1.
Servlet1
/控制器路径/*
Servlet2
org.springframework.web.servlet.DispatcherServlet
1.
Servlet2
/restControllerPath/*

您需要将2个dispatcher servlet配置为具有不同的配置上下文,否则spring会感到困惑。以下是我们对此的定义:

<servlet>
    <servlet-name>web-spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/web-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>api-spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/api-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>web-spring-mvc</servlet-name>
    <url-pattern>/web/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>api-spring-mvc</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

WebSpringMVC
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/WEB-servlet.xml
1.
api spring mvc
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/api-servlet.xml
1.
WebSpringMVC
/网/*
api spring mvc
/原料药/*
您应该能够使用这种类型的配置,只需更改上下文和url模式以满足您的需要


请注意,两个控制器都需要将
@RequestMapping
更改为
@RequestMapping(value=“/”)
,才能工作。

为什么需要2个dispatcher servlet?第二个是rest web服务,第一个是呈现到JSPY您说需要2个dispatcher servlet,但在我的回答中,您说需要一个。你能更新你的问题来澄清你真正想要的是什么吗?我想要不同的配置不同的*-servlet.xml文件为什么你想要这样?好处是什么?是的,你说了你为什么要这样。但是想要好处吗?它不会使任何事情更快…一个项目由RESTWeb服务和standart jsp组成。对itI使用不同的配置请参见404,我需要一个控制器-一个DispatcherServlet
<servlet>
    <servlet-name>web-spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/web-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
    <servlet-name>api-spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/api-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>web-spring-mvc</servlet-name>
    <url-pattern>/web/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>api-spring-mvc</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>