HTTP 404 Status in Spring 3.1 MVC Application

I am trying to create and run a simple Spring 3.1 mvc web application, where I defined a controller that simply returns “hi” to the response body using the following class:

package com.jr.freedom.controllers; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class Hello { @RequestMapping(value = "/hello", method = RequestMethod.GET) @ResponseBody public String helloWorldInJson() { return "hello"; } } 

I tried this URL, but I keep returning 404 error?

http: // localhost: 8080 / FreedomSpring / hello

Here is my servlett:

 <?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <import resource="mvc-config.xml" /> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <context:component-scan base-package="com.jr.freedom.controllers"></context:component-scan> </beans> 

here is the web.xml file

 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>FreedomSpring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>FreedomSpring</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> </param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.xml</param-value> </context-param> <welcome-file-list> <welcome-file> index.jsp </welcome-file> </welcome-file-list> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> </web-app> 

And finally my mvc-config.xml

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> <mvc:annotation-driven /> <!-- the application context definition for the springapp DispatcherServlet --> <mvc:view-controller path="/" view-name="index.jsp" /> </beans> 

I am using tomcat 7 on a windows 7 machine, by the way. No errors were found from my log file from tomcat:

 13-Feb-2012 12:37:36 org.apache.catalina.core.ApplicationContext log INFO: Destroying Spring FrameworkServlet 'FreedomSpring' 13-Feb-2012 12:37:36 org.apache.catalina.core.ApplicationContext log INFO: Shutting down log4j 13-Feb-2012 12:37:36 org.apache.catalina.core.ApplicationContext log INFO: Closing Spring root WebApplicationContext 13-Feb-2012 12:37:37 org.apache.catalina.core.ApplicationContext log INFO: Initializing Spring root WebApplicationContext 13-Feb-2012 12:37:37 org.apache.catalina.core.ApplicationContext log INFO: Set web app root system property: 'webapp.root' = [C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\FreedomSpring\] 13-Feb-2012 12:37:37 org.apache.catalina.core.ApplicationContext log INFO: Initializing log4j from [C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\FreedomSpring\WEB-INF\log4j.xml] 13-Feb-2012 12:37:37 org.apache.catalina.core.ApplicationContext log INFO: Initializing Spring FrameworkServlet 'FreedomSpring' 0:0:0:0:0:0:0:1 - - [13/Feb/2012:12:37:45 +0000] "GET /FreedomSpring HTTP/1.1" 302 - 0:0:0:0:0:0:0:1 - - [13/Feb/2012:12:37:45 +0000] "GET /FreedomSpring/ HTTP/1.1" 404 997 0:0:0:0:0:0:0:1 - - [13/Feb/2012:12:37:51 +0000] "GET /FreedomSpring/hello HTTP/1.1" 404 1012 

Any ideas?

+2
source share
1 answer

Your DispatcherServlet maps to *.htm :

 <servlet-mapping> <servlet-name>FreedomSpring</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> 

But you are accessing the controller using an inappropriate URL: http: // localhost: 8080 / FreedomSpring / hello . You have three options:

  • Change the servlet of your dispatcher to:

     <servlet-mapping> <servlet-name>FreedomSpring</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> 

    but in this case all requests will be processed through Spring MVC, including images and other static resources

  • Use the extension in the controllers:

     <url-pattern>/*.htm</url-pattern> 

    and map the Hello controller to .htm so that you use: http: // localhost: 8080 / FreedomSpring / hello.htm .

  • Card controllers in another subdirectory:

     <url-pattern>/mvc/*</url-pattern> 

    to access them, you will need to use: http: // localhost: 8080 / FreedomSpring / mvc / hello without making any changes to the controller itself.

+4
source

Source: https://habr.com/ru/post/1397254/


All Articles