2010-11-29 8 views
2
でHTTPリクエストが見つかりません

エラー情報:マッピングはURI [/TestSpringWebApp/hello.htm]スプリングMVC 3は、マッピングはURI

とHTTPリクエストが見つかりません任意の助けいただければ幸いです!

私は注釈を使用してリクエストをコントローラにマッピングしています。 コントローラコード:

@Controller 
@RequestMapping("/hello.htm") 
public class HelloController {  
    protected final Log logger = LogFactory.getLog(getClass()); 

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)  
      throws ServletException, IOException { 
     String now = (new Date()).toString(); 

     logger.info("Returning hello view with " + now); 

     return new ModelAndView("hello", "now", now);  
    }  
} 

ディスパッチャ-servlet.xmlは、次のように:

<?xml version="1.0" encoding="UTF-8"?> 
<beans ...> 

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> 

    <!-- 
    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> 
      </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" /> 
    <!-- <bean name="/hello.htm" class="com.kibboko.poprocks.web.HelloController"/>--> 
</beans> 

applicationContext.xmlを

<?xml version="1.0" encoding="UTF-8"?> 
<beans ...> 

    <!--bean id="propertyConfigurer" 
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
      p:location="/WEB-INF/jdbc.properties" /> 

    <bean id="dataSource" 
      class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
      p:driverClassName="${jdbc.driverClassName}" 
      p:url="${jdbc.url}" 
      p:username="${jdbc.username}" 
      p:password="${jdbc.password}" /--> 

    <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) --> 

</beans> 

beans.xml 

<?xml version="1.0" encoding="UTF-8"?> 
<beans ...> 

    <!--bean id="propertyConfigurer" 
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
      p:location="/WEB-INF/jdbc.properties" /> 

    <bean id="dataSource" 
      class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
      p:driverClassName="${jdbc.driverClassName}" 
      p:url="${jdbc.url}" 
      p:username="${jdbc.username}" 
      p:password="${jdbc.password}" /--> 

    <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) --> 

</beans> 

のweb.xmlあなたが追加する必要が

<?xml version="1.0" encoding="UTF-8"?> 
<web-app ...> 
    <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> 

答えて

5

@RequestMapping t方法ではなく、クラスに。クラスに追加すると、このクラスのすべてのメソッドマッピングに接頭辞として適用されますが、クラスのメソッドもマッピングする必要があります。

+0

上記の@RequestMapping(method = RequestMethod.GET)メソッドを追加しました。まだ動かない。 Springがコントローラを検出できるように、xyzの自動スキャンのようなものを設定する必要がありますか?感謝万円。 – Bobo

+0

@Boboあなたはを持っていますか? – Javi

+1

こんにちはJavi、私は最初にを持っていませんでした。しかし、それを追加した後、最終的に動作します。あなたの助けにもニックドにも感謝します。 – Bobo

11

また、あなたのディスパッチャ-servlet.xmlファイルに

<mvc:annotation-driven />

を追加する必要があります。

+0

参照:http://stackoverflow.com/a/3978283/2893073 – Eddy

2

クラスの@RequestMappingを持つこともできますが、すべてのメソッドも独自の@RequestMappingを持つ必要があります。下記の例を参照してください。

@Controller 
@RequestMapping("/appointments") 
public class AppointmentsController { 

    private final AppointmentBook appointmentBook; 

    @Autowired 
    public AppointmentsController(AppointmentBook appointmentBook) { 
     this.appointmentBook = appointmentBook; 
    } 

    @RequestMapping(method = RequestMethod.GET) 
    public Map<String, Appointment> get() { 
     return appointmentBook.getAppointmentsForToday(); 
    } 

    @RequestMapping(value="/{day}", method = RequestMethod.GET) 
    public Map<String, Appointment> getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) { 
     return appointmentBook.getAppointmentsForDay(day); 
    } 

    @RequestMapping(value="/new", method = RequestMethod.GET) 
    public AppointmentForm getNewForm() { 
     return new AppointmentForm(); 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String add(@Valid AppointmentForm appointment, BindingResult result) { 
     if (result.hasErrors()) { 
      return "appointments/new"; 
     } 
     appointmentBook.addAppointment(appointment); 
     return "redirect:/appointments"; 
    } 
} 
関連する問題