java - Spring MVC无法识别Controller导致返回的结果是404?
阿神
阿神 2017-04-18 10:55:44
0
6
465

运行环境

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>
阿神
阿神

闭关修行中......

membalas semua(6)
巴扎黑

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

伊谢尔伦

Matikan pengawal dan lihat jika ia tiada dalam pengawal?

洪涛

Cuba localhost:8080/sml

黄舟

Dayakan sokongan anotasi dahulu:

<mvc:annotation-driven />
伊谢尔伦

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;

左手右手慢动作

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"/>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!