Springmvc 访问页面出现404错误

时间:2022-01-25 20:08:46
配置springmvc时出错:
我在web.xml中添加
<!-- springMvc配置 -->
  <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-servlet.xml</param-value>
   </init-param>
   
   <!-- 执行顺序 -->
   <load-on-startup>0</load-on-startup>
  </servlet>
 
  <servlet-mapping>
   <servlet-name>springMvc</servlet-name>
   <url-pattern>/*</url-pattern>
  </servlet-mapping>

配置springmvc项目,
1.启动tomcat没有报错,通过Controller的方法访问到页面中,总是提示404错误。提示路径为:项目名/xxx.jsp(页面都在WebRoot根目录下) 发现路径也没有错。
2.访问index.jsp还是提示404错误。
3.在Controller中的方法中断点,Debug可以进来,所以springmvc中会扫描Controller类。
5.MyEclipse控制台没有报错,当访问页面时控制台会输出:警告: No mapping found for HTTP request with URI [/springEcharts001/radio1.jsp] in DispatcherServlet with name 'springMvc'
当看到No mapping后,觉得会不会是web.xml中  <servlet-mapping>的错误,于是将
<servlet-mapping>
   <servlet-name>springMvc</servlet-name>
   <url-pattern>/*</url-pattern>
  </servlet-mapping>

改成
<servlet-mapping>
   <servlet-name>springMvc</servlet-name>
   <url-pattern>/</url-pattern>
  </servlet-mapping>
,重启服务器,再访问页面后发现真的成功了。

到这里,就引发了/和/*的区别。

解答地址:
http://m.blog.csdn.net/blog/liuxiao723846/43733287
/和/*的区别:
< url-pattern > / </ url-pattern >   不会匹配到*.jsp,即:*.jsp不会进入spring的 DispatcherServlet类 。
< url-pattern > /* </ url-pattern > 会匹配*.jsp, 会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。 

总之,关于web.xml的url映射的小知识:
<url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
<url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)


http://www.iteye.com/problems/95145

1、在tomcat\conf\web.xml中定义了 

Java代码  
    1.  <servlet>  
    2.      <servlet-name>default</servlet-name>  
    3.      <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>  
    4.      <init-param>  
    5.          <param-name>debug</param-name>  
    6.          <param-value>0</param-value>  
    7.      </init-param>  
    8.      <init-param>  
    9.          <param-name>listings</param-name>  
    10.          <param-value>false</param-value>  
    11.      </init-param>  
    12.      <load-on-startup>1</load-on-startup>  
    13.  </servlet>  

    <!-- The mapping for the default servlet --> 
    <servlet-mapping> 
        <servlet-name>default</servlet-name> 
        <url-pattern>/</url-pattern> 
    </servlet-mapping> 

即默认的,作用是如果,其主要作用就是如果过来的请求是如html/css/js等静态资源时 读取流返回。 

另外还一个类似的拦截所有*.jsp的 
Java代码  
    1.  <servlet>  
    2.        <servlet-name>jsp</servlet-name>  
    3.        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>  
    4.        <init-param>  
    5.            <param-name>fork</param-name>  
    6.            <param-value>false</param-value>  
    7.        </init-param>  
    8.        <init-param>  
    9.            <param-name>xpoweredBy</param-name>  
    10.            <param-value>false</param-value>  
    11.        </init-param>  
    12.        <load-on-startup>3</load-on-startup>  
    13.    </servlet>  

   <!-- The mapping for the JSP servlet --> 
    <servlet-mapping> 
        <servlet-name>jsp</servlet-name> 
        <url-pattern>*.jsp</url-pattern> 
    </servlet-mapping> 

    <servlet-mapping> 
        <servlet-name>jsp</servlet-name> 
        <url-pattern>*.jspx</url-pattern> 
    </servlet-mapping> 


如果springmvc拦截的是/ 即替换掉了默认的,那么这个时候我们可以使用如 
<mvc:default-servlet-handler/>   ---->委托给那个default 
<!-- 静态资源映射 -->  
<mvc:resources mapping="/images/**" location="/WEB-INF/images/" />  
see  http://jinnianshilongnian.iteye.com/blog/1423971  

进行静态资源的随意映射了。 

http://blog.sina.com.cn/s/blog_534f69a00101332u.html

No mapping found for HTTP request with URI

出现这个问题的原因是在web.xml中配置错了,如:

 <servlet>
 <servlet-name>springMVCDispatcherServlet</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/springMVC-servlet.xml</param-value>
 </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>springMVCDispatcherServlet</servlet-name>
 <url-pattern>/*</url-pattern>
 </servlet-mapping>

当你在control中返回一个路径的时候,它又把路径(/view/index.jsp)当作一个请求被dispatcherServlet所拦截。所以会抛出异常,解决的办法有两个:

第一即使让dispatcherServlet的拦截加上后缀如:*.do;

这样以jsp后缀的就不会别拦截了。

第二个方法是在spring-servlet.xml中加入:

<mvc:default-servlet-handler/>


还是有疑问,谁能不能补充下?