springMVC中404可能出现的原因

1. 如果tomcat启动正常的话,就检查springMVC的配置,如果tomcat启动 都报错,就找原因去吧。

2. 地址不正确或没有响应

1) 检查Controller类上是否有@Controller注解。@RequestMapping加了没有,是不是在类上面加了父路径了?

2) 检查SpringMVC的配置文件是否扫描了Controller所在的包

 <!--扫描Controller所在的包-->
    <context:component-scan base-package="com.ssm.blog.controller">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
3) 相对路径的问题

如果controller中返回的是index.jsp,那么SpringMVC就会再后面再追加一个.jsp,变成index.jsp.jsp导致页面找不到。

@Controller
@RequestMapping("/aa")
public class MYController {
    @RequestMapping("/blog.html")
    public String page() {
        return "index.jsp";
    }
}


这段代码会到webapp下找/aa/index.jsp这个文件,因为controller上有父路径。如果返回值前面加上/

@Controller
@RequestMapping("/aa")
public class MYController {
    @RequestMapping("/blog.html")
    public String page() {
        return "/index.jsp";
    }
}


上面这个代码就会去webapp下找index.jsp了,因为多了一个/就是相对于根路径了


4)查看视图解析器是否配置正确

 <!-- 配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/page/"></property><!--前缀-->
        <property name="suffix" value=".jsp"></property><!--后缀-->
    </bean>
上面这个配置是给controller返回的视图名自动加上前缀和后缀
@RequestMapping("/blog.html")
public String page(){
return "index.jsp";
}

另外视图解析器的prefix是前缀,这段代码加上视图解析器后,运行结果是返回/page/index.jsp。查看一下webapp目录下是否有这个页面,路径是否正确。

404的时候控制台不会报错,但是log4j可以看到运行的过程:

2018-01-06 13:55:29,773 DEBUG [org.springframework.web.servlet.view.JstlView] - Forwarding to resource [/page/index.jsp] in InternalResourceView 'index'
2018-01-06 13:55:29,781 DEBUG [org.springframework.web.servlet.DispatcherServlet] - Successfully completed request

一般情况如果Controller的类上加了@ResuqstMapping("/aa") 如果controller中的方法返回的视图地址前面没加/的话,就会是相对于aa的路径

5) ajax的请求响应是404

ajax一般要求返回的是json,看一下controller的方法上有没有加@ResponseBody注解

springMVC的配置文件中是否配置了json转换器

<!--配置返回值转换器-->
    <bean id="contentNegotiationManagerFactoryBean"
          class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="false"/>
        <property name="favorParameter" value="false"/>
        <property name="ignoreAcceptHeader" value="false"/>
        <property name="mediaTypes">
            <map>
                <entry key="json" value="application/json"/>
            </map>
        </property>
    </bean>
配置成功后需要启用它:

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManagerFactoryBean"/>
记得要导json的相关jar包,ajax的请求可以在浏览器的控制台上看响应状态




  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专治八阿哥的孟老师

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值