【问题标题】:SpringMVC get 404 errorSpringMVC 得到 404 错误
【发布时间】:2017-08-11 05:49:36
【问题描述】:

在我启动我的 tomcat 后,我​​的浏览器出现 404 错误:

我输入localhost:8080/mvc/hellolocalhost:8080/mvc/hello.jsp

但是如果我输入localhost:8080,就正常了,可以访问:

在我的springmvc-servlet.xml

<?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.1.xsd  
 http://www.springframework.org/schema/mvc 
 http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> 
    <!-- scan the package and the sub package --> 
    <context:component-scan base-package="com.ypd.springmvcdemo"/>
    <!-- don't handle the static resource -->
    <mvc:default-servlet-handler />
    <!-- if you use annotation you must configure following setting -->
    <mvc:annotation-driven />
    <!-- configure the InternalResourceViewResolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">

        <property name="prefix" value="/WEB-INF/jsp/" />

        <property name="suffix" value=".jsp" />
    </bean>
</beans>

在我的MVCController.java:

@Controller
@RequestMapping("/mvc")
public class MVCController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}

在我的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">

    <!--configure the setting of springmvcDispatcherServlet and configure the mapping-->
   <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:springmvc-servlet.xml</param-value>
       </init-param>
   </servlet>

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

</web-app>

这是我的hello.jsp页面:

(对于springmvc-servlet.xml 的位置,我很抱歉,我已将其定位到resource 库下)

更新 - 1:

非常抱歉,我发布此快照时出现错误,在我的问题项目中,网络文件夹上没有蓝点。查看我的回答我发现了它的问题。

更新图片:


那么,错在哪里?


编辑

我的hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
Hello, world, jack loly!
</body>
</html>

编辑

日志看起来正确:

[2017-03-20 03:06:48,255] 工件 SpringMVCDemo:war 爆炸:服务器未连接。部署不可用。 连接到目标VM,地址:'127.0.0.1:51764',传输:'socket' 2017 年 3 月 20 日 15:06:50.080 info [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本:Apache Tomcat/9.0.0.M17 20-Mar-2017 15:06:50.085 info [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器建成时间:2017 年 1 月 10 日 20:59:20 UTC 20-Mar-2017 15:06:50.085 info [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器号:9.0.0.0 20-Mar-2017 15:06:50.085 info [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统名称:Mac OS X 20-Mar-2017 15:06:50.088 info [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统版本:10.12.2 2017 年 3 月 20 日 15:06:50.089 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log 架构:x86_64 2017 年 3 月 20 日 15:06:50.089 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log Java 主页:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre 2017 年 3 月 20 日 15:06:50.089 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 版本:1.8.0_121-b13 20-Mar-2017 15:06:50.089 info [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 供应商:Oracle Corporation 2017 年 3 月 20 日 15:06:50.089 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /Users/jack/Library/Caches/IntelliJIdea2016.3/tomcat/Tomcat_9_0_0_M17_SpringMVCDemo 2017 年 3 月 20 日 15:06:50.090 信息 [主要] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /Users/jack/Library/Tomcat9 2017 年 3 月 20 日 15:06:50.091 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.util.logging.config.file=/Users/jack/Library/Caches/IntelliJIdea2016 .3/tomcat/Tomcat_9_0_0_M17_SpringMVCDemo/conf/logging.properties 20-Mar-2017 15:06:50.091 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 20-Mar-2017 15:06:50.091 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51764,suspend=y,服务器=n 2017 年 3 月 20 日 15:06:50.091 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dcom.sun.management.jmxremote= 20-Mar-2017 15:06:50.092 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dcom.sun.management.jmxremote.port=1099 2017 年 3 月 20 日 15:06:50.093 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dcom.sun.management.jmxremote.ssl=false 2017 年 3 月 20 日 15:06:50.093 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dcom.sun.management.jmxremote.authenticate=false 2017 年 3 月 20 日 15:06:50.093 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.rmi.server.hostname=127.0.0.1 2017 年 3 月 20 日 15:06:50.093 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djdk.tls.ephemeralDHKeySize=2048 20-Mar-2017 15:06:50.093 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.protocol.handler.pkgs=org.apache.catalina.webresources 2017 年 3 月 20 日 15:06:50.093 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dcatalina.base=/Users/jack/Library/Caches/IntelliJIdea2016.3/tomcat/Tomcat_9_0_0_M17_SpringMVCDemo 20-Mar-2017 15:06:50.094 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dcatalina.home=/Users/jack/Library/Tomcat9 2017 年 3 月 20 日 15:06:50.094 info [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.io.tmpdir=/Users/jack/Library/Tomcat9/temp 2017 年 3 月 20 日 15:06:50.094 info [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 在 java.library.path 上找不到基于 APR 的 Apache Tomcat Native 库,它允许在生产环境中获得最佳性能: /Users/jack/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:。 2017 年 3 月 20 日 15:06:50.527 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化 ProtocolHandler ["http-nio-8080"] 20-Mar-2017 15:06:50.560 info [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector 使用共享选择器进行 servlet 写入/读取 2017 年 3 月 20 日 15:06:50.563 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化 ProtocolHandler ["ajp-nio-8009"] 20-Mar-2017 15:06:50.565 info [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector 使用共享选择器进行 servlet 写入/读取 20-Mar-2017 15:06:50.581 info [main] org.apache.catalina.startup.Catalina.load 初始化在 1455 毫秒内处理 20-Mar-2017 15:06:50.709 info [main] org.apache.catalina.core.StandardService.startInternal 启动服务 Catalina 20-Mar-2017 15:06:50.709 info [main] org.apache.catalina.core.StandardEngine.startInternal 启动 Servlet 引擎:Apache Tomcat/9.0.0.M17 20-Mar-2017 15:06:50.745 info [main] org.apache.coyote.AbstractProtocol.start 启动 ProtocolHandler [http-nio-8080] 2017 年 3 月 20 日 15:06:50.766 信息 [main] org.apache.coyote.AbstractProtocol.start 启动 ProtocolHandler [ajp-nio-8009] 20-Mar-2017 15:06:50.769 info [main] org.apache.catalina.startup.Catalina.start 服务器在 187 毫秒内启动 连接到服务器 [2017-03-20 03:06:51,046] 工件 SpringMVCDemo:战争爆炸:正在部署工件,请稍候... [2017-03-20 03:06:51,751] Artifact SpringMVCDemo:war 爆炸:Artifact 部署成功 [2017-03-20 03:06:51,751] 工件 SpringMVCDemo:战争爆发:部署耗时 705 毫秒 20-Mar-2017 15:07:00.750 info [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 部署 Web 应用程序目录 /Users/jack/Library/Tomcat9/webapps/manager 20-Mar-2017 15:07:00.802 info [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Web 应用程序目录 /Users/jack/Library/Tomcat9/webapps/manager 的部署已于 52 完成毫秒


编辑

我的 tomcat 部署配置:


编辑-2

【问题讨论】:

  • 是否有任何CSS或JS绑定到JSP?
  • @srikanthr 不,没有,它是一个静态页面,就像一个 html。
  • 看起来很奇怪的是目录。 src/main/webapp 是 maven 的约定。此外,您的 spring xml 通常位于src/main/resources
  • 您检查日志是否有错误?
  • @Philip YW,日志看起来是正确的。

标签: java jsp spring-mvc tomcat


【解决方案1】:

我认为你的 tomcat 部署配置并不完全正常。您的应用程序上下文应该是您将要加载应用程序并告诉 tomcat 在该上下文中调度所有请求的上下文。

例如您的 Application Context: 可以是 /helloApp。现在,当您启动 tomcat 时,您的应用程序将在 localhost:8080/helloApp/ 加载。这是您的应用程序根上下文。现在,如果您点击localhost:8080/helloApp/mvc/hello,您应该会看到您的内容。

【讨论】:

  • 我尝试将 tomcat 部署应用程序上下文配置为:/SpringMVCDemo,但在我重新启动我的 tomcat 并在 safari 中键入http://localhost:8080/SpringMVCDemo/mvc/hello 后,仍然得到 404。
  • 请不要只重启tomcat,而是删除target文件夹并重建你的项目,然后重启tomcat,这样tomcat就会得到你应用程序的更新版本。换句话说,我发现你的代码没问题,它应该按预期运行。
【解决方案2】:

将你的 springmvc-servlet.xml 文件放在 WEB-INF 并更改 web.xml 的行

<init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>

<init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>

【讨论】:

  • 你检查你的 hello() 方法是否被调用了吗?
  • 我用的是IntenliJ IDEA,springmvc-servlet.xml应该放到资源库里吧?
  • 我试过了,同样的错误,还有更多springmvc-servlet.xml无法解决。
【解决方案3】:

有几点需要注意。

  1. url 中未指定项目名称

网址应该是:http://localhost:8080/SpringMVCDemo/mvc/hello

  1. 你为什么只在一个页面上提到两个RequestMapping(mvc,hello)。你可以删除@RequestMapping(value="/mvc")并在hello()方法上保留@RequestMapping("/hello")

更新:

web.xml中添加load-on-startup

<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:springmvc-servlet.xml</param-value>
       </init-param>
     <load-on-startup>1</load-on-startup>
   </servlet>

【讨论】:

  • 朋友,1)我像EDIT一样配置我的tomcat部署,你可以看到我的更新。对于2)我尝试注释@RequestMapping(value="/mvc"),然后重新启动我的tomcat,但没用。
  • @qg_java 删除 @RequestMapping(value="/mvc") 并重新启动并检查...还有一件事,通过浏览器中的检查元素查看控制台并让我知道是否有任何错误
  • 朋友,如果我删除@RequestMapping(value="/mvc"),我会得到HTTP Status 404 -,然后在我的Safari 中输入http://localhost:8080/SpringMVCDemo/mvc/hello
  • 很抱歉,http://localhost:8080/SpringMVCDemo/hello 也是 404。
  • 或者留下你的邮箱,我把我的项目发给你。
【解决方案4】:

终于,我找到了我迷失的问题。查看我的问题 -> UPDATE -1

上面没有蓝点表示 Web Source Dictory 不正确。看下图我发现了问题。

于是我删除了红色的目录,然后重新选择了web目录:

然后在我的项目中,我现在可以在 web 目录上看到蓝点:

然后我重启tomcat,我成功了:

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多