404错误

404错误

报错如图,

http://img1.sycdn.imooc.com//climg/5bd911c60001007a13480881.jpg

十月 31, 2018 10:26:16 上午 org.springframework.web.servlet.PageNotFound noHandlerFound

警告: No mapping found for HTTP request with URI [/modelAndViewTest] in DispatcherServlet with name 'SpringMVC'

AnnotationHandler:

package com.imooc.handler;

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

@Controller
public class AnnotationHandler {

    @RequestMapping("/modelAndViewTest")
    public ModelAndView modelAndViewTest(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("name","xxxt");
        modelAndView.setViewName("show");
        return modelAndView;
    }
}

启动tomcat的时候,show.jsp页面正常显示空白,访问路径:http://localhost:8080/modelAndViewTest的时候就报404错误,tomcat也出现如图一的错误,看起来好像是@RequestMapping没有被识别???麻烦老师看一下这是什么原因呢

网上有解释说:

1、控制层没有被spring扫描到,控制层没有实例化,检查自己的控制层是否被spring扫描到,检查以下配置:<context:component-scan base-package=""/>    

2、web.xml配置文件的<url-pattern>标签配置成<url-pattern>/*</url-pattern>,正确的配置应该是<url-pattern>/</url-pattern>。学了structs之后再学spring mvc框架的          就会很容易犯这个错误。    

3、使用的是注解实例化控制层,且web.xml的路径配置为<url-pattern>/</url-pattern>,却没有在spring的配置文件使用<mvc:annotation-driven />标签,导致URL解析出错,检查是否加上<mvc:annotation-driven />。

1.2都已经做了,3添加了这个标签还是报一样的错误



正在回答

登陆购买课程后可参与讨论,去登陆

4回答

这里的过滤器Spring框架为我们提供了代码,我们只需要在web.xml中配置过滤器的字符编码集即可,从下图标记的类中,可以看出他是spring过滤器的一部分,所以不需要我们在去手动去写过滤器了,Spring框架都自动的为我们完成了这些需求。

http://img1.sycdn.imooc.com//climg/5bd96e810001ea0509160128.jpg

在配置encoding和forceEncoding时,这两个参数名字是固定的,因为spring框架需要识别这两个参数名,encoding就是字符编码的格式了,这里的forceEncoding需要解释一下,forceEncoding默认值为false,只要你设置了foreEncoding=true,则在代码中设置编码格式没用,都会统一将编码格式设置为ecoding的编码格式。如果同学还有什么不明白的地方,可以继续提问哦,祝学习愉快~

  • 一只javaer 提问者 #1
    谢谢老师,明白了!
    2018-10-31 18:15:43
chrismorgen 2018-10-31 14:23:10

将你的代码粘贴到老师的源码中是没有问题的,议同学将下面的代码粘贴到web.xml中试试,祝学习愉快~

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!--处理中文乱码-->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!--设置访问静态资源-->
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
    <!--配置springmvc.xml的路径-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>


  • 提问者 一只javaer #1
    不知道哪里出了错,再次启动项目的时候又正常了,谢谢老师,另外想问一下web.xml里中文乱码两个参数的设置---- <param-name>encoding</param-name> <param-name>forceEncoding</param-name> 1.encoding和forceEncoding,参数名是固定格式吗?在IDEA工具的代码提示中并没有显示这两个; 2.这两个参数是怎么执行的呢?以前的课程里面配置好了过滤器还需要在init()方法中获取这个参数并设置,在这里没有这一步是怎么进行过滤的呢?
    2018-10-31 16:12:53
提问者 一只javaer 2018-10-31 11:39:54
<?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:tool="http://www.springframework.org/schema/tool"
       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/tool http://www.springframework.org/schema/tool/spring-tool.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--<mvc:default-servlet-handler/>-->
    <context:component-scan base-package="com.imooc"/>
    <!--<mvc:annotation-driven />-->
    <!--<context:annotation-config />-->
    <!--<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">-->
        <!--<property name="mappings">-->
            <!--<props>-->
                <!--<prop key="/test">testHandler</prop>-->
            <!--</props>-->
        <!--</property>-->
    <!--</bean>-->
    <!--<bean id="testHandler" class="com.imooc.handler.MyHandler"></bean>-->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

上面是springmvc.xml

chrismorgen 2018-10-31 11:34:14

同学配置视图解析器了么?建议在springmvc.xml中添加如下代码,如果问题没有解决,可以将springmvc.xml中的代码粘贴上来,方便我们具有针对性的为你解答,祝学习愉快~

<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--配置前缀-->
    <property name="prefix" value="/"></property>
    <!--配置后缀-->
    <property name="suffix" value=".jsp"></property>
</bean>


  • 提问者 一只javaer #1
    已经贴出来了
    2018-10-31 11:43:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师