配置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/>
还是有疑问,谁能不能补充下?