2014-03-13 3 views
1

스프링스 3.1.1 프레임 워크에서 다중 컨트롤러를 사용하려고하는데 주석을 사용하고 있습니다. 하지만 그 작동하지 내가 다른 방법으로 XML 파일을 구성하여 주석에 대한 지원을 가능하게 했어요. 여기스프링 3.1.1에서 주석이있는 다중 컨트롤러

디스패처-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:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 

<context:component-scan base-package="com.web" /> 

<bean id="userKey" class="controllers.UserController" /> 
<bean id="newUserKey" class="controllers.UserFormController" /> 
<bean id="demoKey" class="controllers.demoController" /> 


<!-- 
Most controllers will use the ControllerClassNameHandlerMapping above, but 
for the index controller we are using ParameterizableViewController, so we must 
define an explicit mapping for it. 
--> 

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <props> 
      <prop key="index.htm">indexController</prop> 
      <prop key="user.htm">userKey</prop> 
      <prop key="add_user.htm">newUserKey</prop> 
     </props> 
    </property> 
</bean> 

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
     p:prefix="/WEB-INF/jsp/" 
     p:suffix=".jsp" /> 

<!-- 
The index controller. 
--> 
<bean name="indexController" 
     class="org.springframework.web.servlet.mvc.ParameterizableViewController" 
     p:viewName="index" /> 

</beans> 

컨트롤러 :

솔루션 1 : 나는이 시도

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
<welcome-file-list> 
    <welcome-file>redirect.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 

:

@Controller 
public class multi extends MultiActionController { 

@RequestMapping("/multi/add") 
public ModelAndView add(){ 
    return new ModelAndView("demo", "message", "Add method called"); 
} 

@RequestMapping("/user/divide.htm") 
public ModelAndView divide(HttpServletRequest request, HttpServletResponse response) { 
    return new ModelAndView("demo", "message", "divide method called"); 
} 
} 

의 web.xml :

<mvc:annotation-driven /> 

해결 방법 2 :

당신이 하나를 우선해야 지금 @Controller 주석되는 Controller이이 개 전략을 혼합하는 우선 들어
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 

답변

0

? 컨트롤러를 으로 수정하지 말고을 연장하면 MultiActionController으로 확장됩니다. 주석을 사용할 수 없기 때문입니다.

@Controller 
public class multi { 

    @RequestMapping("/multi/add") 
    public ModelAndView add(){ 
     return new ModelAndView("demo", "message", "Add method called"); 
    } 

    @RequestMapping("/user/divide.htm") 
    public ModelAndView divide(HttpServletRequest request, HttpServletResponse response) { 
     return new ModelAndView("demo", "message", "divide method called"); 
    } 
} 

귀하의 솔루션이 사물의 나이 스프링 2.5 기반 @RequestMapping 방법을 사용하고, 당신은 사용해야 RequestMappingHandlerMapping하고 <mvc:annotation-driven />를 사용할 때 모두 등록 RequestMappingHandlerAdapter.

당신이

<?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" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 

    <!-- Scan only for @Controllers --> 
    <context:component-scan base-package="com.web" use-default-filters="false"> 
     <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller /> 
    </context:component-scan> 

    <mvc:annotation-driven /> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" 
      p:suffix=".jsp" /> 

<!-- The index controller. --> 
    <mvc:view-controller view-name="index" /> 

</beans> 

이것은 @Controller 주석을 처리 할 필요가 모든 것을 등록합니다 다음 당신의 dispatcher-servlet.xml에 필요한 기본적으로 무엇을합니다 (<context:component-scan ... />@RequestMapping 주석합니다 (<mvc:annotation-driven />가. 당신은 필요하지 않습니다 SimpleUrlHandlerMappingController과 함께 사용하고 @Controller은 적어도 봄 3.x부터 사용하지 말아야합니다.

+0

감사합니다. M. Denium. 귀하의 솔루션을 시도했지만 예외는 예외입니다. 일치하는 와일드 카드는 엄격하지만 선언은 'mvc : annotation-driven'요소에서 찾을 수 있습니다. 상단에서 스키마 위치를 확인했지만이 예외에 대한 공명이 무엇인지 파악할 수 없었습니다. 나는 spring-mvc.xsd와 spring-mvc-3.1.xsd를 시도했다. 해결책을 제안하십시오. – Dramorian

+0

필요한 모든 항목 (spring-webmvc)과 올바른 jar (충돌하는 버전 없음)가 있습니까? xsd의 최신 버전을 가리키는 버전이없는 xsd 파일을 사용하는 것이 좋습니다. 내가 편집자가 아닌 온라인에서 타이핑 한 어딘가에 오타가있을 수 있습니다. –

+0

예, 타이핑 실수가 있습니다. 그러나 그것을 고쳤습니다. 모든 Jar 파일이 존재하도록 NetBeans IDE로 새 프로젝트를 만들었습니다. 를 지원하기 위해서, jar 파일이 필요한가? – Dramorian