使用Maven在SpringMVC上出现错误404

时间:2018-01-01 04:26:17

标签: java spring maven spring-mvc

我一直收到错误404,我已经完成/查看StackOverflow上几乎所有相关的解决方案,但仍无法修复我的问题。为什么我有这个错误?

当我执行http://localhost:8080时,它会向我提供我的index.jsp页面,但当我http://localhost:8080/index.jsp http://localhost:8080/WebApp/index.jsp时,它会给我404错误。

web.xml



<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-servlet.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>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
&#13;
&#13;
&#13;

调度-servlet.xml中

&#13;
&#13;
<?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"
       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-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">


<mvc:annotation-driven />

        <context:component-scan base-package="test.app" />
        <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value = "/WEB-INF/views/"/>
            <property name="suffix" value=".jsp" />
        </bean>



</beans>
&#13;
&#13;
&#13;

的applicationContext.xml

的index.jsp

&#13;
&#13;
<%--
  Created by IntelliJ IDEA.
  User: reaganyuan
  Date: 12/31/17
  Time: 12:42 PM
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>$Title$</title>
</head>
<body>
<p>HELLO WORLD</p>
</body>
</html>
&#13;
&#13;
&#13;

TestController.java

&#13;
&#13;
package test.app;

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


@Controller
public class TestController {
    @RequestMapping(value="/")
    public String test()
    {
        return "index";
    }

}
&#13;
&#13;
&#13;

的pom.xml

&#13;
&#13;
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>test</groupId>
    <artifactId>app</artifactId>
    <version>1.0-SNAPSHOT</version>

   <dependencies>

       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-webmvc</artifactId>
           <version>4.3.13.RELEASE</version>
       </dependency>



       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-core</artifactId>
           <version>4.3.13.RELEASE</version>
       </dependency>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-beans</artifactId>
           <version>4.3.13.RELEASE</version>
       </dependency>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context</artifactId>
           <version>4.3.13.RELEASE</version>
       </dependency>

       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-web</artifactId>
           <version>4.3.13.RELEASE</version>
       </dependency>

   </dependencies>

</project>
&#13;
&#13;
&#13;

我的项目结构 project structure

编辑:我在控制器中将index()更改为test(),但这并没有做任何事情。

2 个答案:

答案 0 :(得分:0)

在Web.xml中尝试将url-pattern更改为/ *,如下所示

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/dispatcher-servlet.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>1</load-on-startup>
</servlet>

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

答案 1 :(得分:0)

当您点击网址http://localhost:8080/时,您正在点击具有“/”映射的TestController。它返回一个字符串"index",它将由InternalResourceViewResolver.class解析为index.jsp。

您没有任何到/index.jsp的映射。在servlet容器中,您无法直接访问这些文件。如果您仍然想要,可以像这样更换控制器。

@Controller
public class TestController {
    @RequestMapping(value={"/","index.jsp"})
    public String test()
    {
        return "index";
    }
}

但我的建议不是这样做的。您应该只保留没有扩展名的名称,例如@RequestMapping(value={"/","index"})