cari

Rumah  >  Soal Jawab  >  teks badan

java - Spring MVC无法识别Controller导致返回的结果是404?

运行环境

java8 + idea2016 + spring mvc4.3 + maven3.3 + tomcat8 + ubuntu

报错信息

访问localhost:8080/HelloWeb/hello或者localhost:8080/hello都会返回404的状态码:

具体配置

项目结构

Web.xml

<web-app id="WebApp_ID" 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">

    <display-name>Spring MVC Form Handling</display-name>

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

    <servlet-mapping>
        <servlet-name>HelloWeb</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

HelloWeb-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       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.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package="org.neo.sml"/>

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
         id="internalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/"/>
      <property name="suffix" value=".jsp"/>
   </bean>

</beans>

HelloController

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

    @RequestMapping(value="/hello")
    public String printHello(ModelMap model) {
        model.addAttribute("message", "Hello Spring MVC Framework!");
        return "hello";
    }
}

hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>

补充

我猜测原因是spring mvc没有识别@Controller注解,但是我在HelloWeb-servlet.xml中已经声明了<context:component-scan base-package="org.neo.sml"/>,请问发生错误的原因可能是什么?

按照@傅易君的提示,参考so上面,我加入了<mvc:annotation-driven />,但是还是不行:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="org.ziwenxie.sml"/>
    <mvc:annotation-driven/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
阿神阿神2805 hari yang lalu504

membalas semua(6)saya akan balas

  • 巴扎黑

    巴扎黑2017-04-18 10:57:44

    Masukkan HelloWeb-servlet.xml ke dalam sumber dan tukar web.xml kepada
    <servlet>

             <servlet-name>DispatcherServlet</servlet-name>
             <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
             <init-param>
                     <param-name>contextConfigLocation</param-name>
                     <param-value>classpath:HelloWeb-servlet.xml</param-value>
             </init-param>
     </servlet>

    Konfigurasi HelloWeb-servlet.xml mengisytiharkan <context:component-scan base-package="org.neo.sml"/>
    Laluan akses ialah http://localhost:8080/sml/hello Itu sahaja

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:57:44

    Matikan pengawal dan lihat jika ia tiada dalam pengawal?

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:57:44

    Cuba localhost:8080/sml

    balas
    0
  • 黄舟

    黄舟2017-04-18 10:57:44

    Dayakan sokongan anotasi dahulu:

    <mvc:annotation-driven />

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:57:44

    Terdapat terutamanya aspek berikut untuk diberi perhatian:
    1 Sama ada hendak mengkonfigurasi lokasi fail xml dalam fail web.xml untuk memastikan HelloWeb -servlet.xml berada dalam direktori src, konfigurasi adalah seperti berikut:

    <servlet>
          <servlet-name>springmvc</servlet-name>      
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:HelloWeb-servlet.xml</param-value>
          </init-param>  
      </servlet>

    2. Sama ada hendak mengkonfigurasinya dalam fail HelloWeb-servlet.xml, seperti yang ditunjukkan di bawah:

    <mvc:annotation-driven></mvc:annotation-driven>        
        <context:component-scan base-package="cn"></context:component-scan>                
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsps/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>

    3 Adakah direktori tempat projek dimulakan betul dan sama ada nama projek perlu ditambah
    4. adakah direktori itu betul;

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 10:57:44

    Mengakses localhost:8080/HelloWeb/hello atau localhost:8080/hello akan mengembalikan kod status 404

    Saya fikir anda tidak kehilangan laluan ini, bukan? Mengapa HelloWeb bukannya sml? Bukankah selalunya nama projek itu?
    Atau, jika anda menemui tomcat的server.xml, cari konfigurasi berikut.

    <Context docBase="test" path="/test" reloadable="true" source="org.eclipse.jst.jee.server:test"/>

    balas
    0
  • Batalbalas