SpringMVC得到404错误

时间:2017-03-20 03:23:27

标签: java jsp spring-mvc tomcat

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

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

enter image description here

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

enter image description here

在我的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的页面:

enter image description here

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

更新 - 1:

我很抱歉,当我发布这个快照时出现错误,在我的问题项目中,web文件夹上没有蓝点。看到我的回答我发现了它的问题。

更新图片:

那么,错误在哪里?

修改

我的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:战争爆炸:服务器未连接。部署不可用。   连接到目标VM,地址:&#39; 127.0.0.1:51764&#39;,transport:&#39; socket&#39;   2017年3月20日15:06:50.080 info [main] org.apache.catalina.startup.VersionLoggerListener.log服务器版本:Apache Tomcat / 9.0.0.M17   2017年3月20日15:06:50.085 info [main] org.apache.catalina.startup.VersionLoggerListener.log服务器内置:2017年1月10日20:59:20 UTC   2017年3月20日15:06:50.085 info [main] org.apache.catalina.startup.VersionLoggerListener.log服务器编号:9.0.0.0   2017年3月20日15:06:50.085 info [main] org.apache.catalina.startup.VersionLoggerListener.log操作系统名称:Mac OS X   2017年3月20日15:06:50.088 info [main] org.apache.catalina.startup.VersionLoggerListener.log操作系统版本:10.12.2   2017年3月20日15:06:50.089 info [main] org.apache.catalina.startup.VersionLoggerListener.log架构:x86_64   2017年3月20日15:06:50.089 info [main] 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 info [main] org.apache.catalina.startup.VersionLoggerListener.log JVM版本:1.8.0_121-b13   2017年3月20日15:06:50.089 info [main] org.apache.catalina.startup.VersionLoggerListener.log JVM供应商:Oracle Corporation   2017年3月20日15:06:50.089 info [main] 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 info [main] 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 0.3 / Tomcat的/ Tomcat_9_0_0_M17_SpringMVCDemo / CONF / logging.properties   2017年3月20日15:06:50.091 info [main] org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Djava.util.logging.manager = org.apache.juli.ClassLoaderLogManager   2017年3月20日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,服务器=正   2017年3月20日15:06:50.091 info [main] org.apache.catalina.startup.VersionLoggerListener.log命令行参数:-Dcom.sun.management.jmxremote =   2017年3月20日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   2017年3月20日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   2017年3月20日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库,它可以在生产环境中实现最佳性能: /用户/插孔/图书馆/的Java /扩展:/图书馆/的Java /扩展:/网络/资源库/的Java /扩展:/系统/库/的Java /扩展:/ usr / lib中/ JAVA :.   2017年3月20日15:06:50.527 info [main] org.apache.coyote.AbstractProtocol.init初始化ProtocolHandler [&#34; http-nio-8080&#34;]   2017年3月20日15:06:50.560 info [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector使用共享选择器进行servlet写入/读取   2017年3月20日15:06:50.563 info [main] org.apache.coyote.AbstractProtocol.init初始化ProtocolHandler [&#34; ajp-nio-8009&#34;]   2017年3月20日15:06:50.565 info [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector使用共享选择器进行servlet写入/读取   2017年3月20日15:06:50.581 info [main] org.apache.catalina.startup.Catalina.load在1455 ms内处理初始化   2017年3月20日15:06:50.709 info [main] org.apache.catalina.core.StandardService.startInternal开始服务Catalina   2017年3月20日15:06:50.709 info [main] org.apache.catalina.core.StandardEngine.startInternal启动Servlet引擎:Apache Tomcat / 9.0.0.M17   2017年3月20日15:06:50.745 info [main] org.apache.coyote.AbstractProtocol.start启动ProtocolHandler [http-nio-8080]   2017年3月20日15:06:50.766 info [main] org.apache.coyote.AbstractProtocol.start启动ProtocolHandler [ajp-nio-8009]   2017年3月20日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]神器SpringMVCDemo:战争爆炸:神器部署成功   [2017-03-20 03:06:51,751]神器SpringMVCDemo:战争爆炸:部署耗时705毫秒   2017年3月20日15:07:00.750 info [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory部署Web应用程序目录/ Users / jack / Library / Tomcat9 / webapps / manager   2017年3月20日15:07:00.802 info [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录/ Users / jack / Library / Tomcat9 / webapps / manager的部署已完成52 MS

修改

我的tomcat部署配置: enter image description here

编辑-2

enter image description here

4 个答案:

答案 0 :(得分:0)

将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>

答案 1 :(得分:0)

有几件事需要注意。

  1. 在网址
  2. 中未指定任何项目名称
      

    网址应为:RequestMapping(mvc,hello)

    1. 为什么您只为一个页面提及两个@RequestMapping(value="/mvc")。您可以删除@RequestMapping("/hello")并在hello()方法上保留load-on-startup
    2. <强>更新

      web.xml

      中添加<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}}

答案 2 :(得分:0)

我认为你的tomcat部署配置并不都行。您的应用程序上下文应该是您要加载应用程序的上下文,并告诉tomcat在该上下文中分派所有请求。

e.g。您的应用程序上下文可以是/helloApp。现在,当您启动tomcat时,您的应用程序将加载到localhost:8080/helloApp/。这是您的应用程序根上下文。现在,如果您点击localhost:8080/helloApp/mvc/hello,则需要看到您的内容。

答案 3 :(得分:0)

最后,我发现了我丢失的问题。看到我的问题 - &gt; 更新-1

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

enter image description here

所以我删除了红色目录,然后重新选择了web目录:

enter image description here

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

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

enter image description here