springmvc配置servlet的拦截形式/*和/的区别

今天复制一个现有的spring-mvc的项目修改配置作为新的项目,结果悲剧了!遇到了一个小问题困扰了半天,找同事找总监都没有搞定,纠结了半天终于发现了问题所在,随笔记一下,所谓好记性不如烂博客嘛!

问题描述:

   项目很简单,只是简单搭建一个spring-mvc框架,写一个测试的NewsController,关于问题的配置如下:

web.xml

 1 <servlet>
 2     <servlet-name>spring-mvc</servlet-name>
 3     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 4     <init-param>
 5       <param-name>contextConfigLocation</param-name>
 6       <param-value>/WEB-INF/spring-mvc.xml</param-value>
 7     </init-param>
 8   </servlet>
 9   <servlet-mapping>
10     <servlet-name>spring-mvc</servlet-name>
11     <url-pattern>/*</url-pattern>
12   </servlet-mapping>

spring-mvc的视图解析器如下:

    <!-- 视图解释类 通过配置文件,把一个视图名交给到一个View来处理 InternalResourceViewResolver加入了JSTL的支持 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

controller方法如下

    //首页
        @RequestMapping("/index")
        public String getnewsList(ModelMap model) {
            return "ttt";
        }

ttt.jsp是/WEB-INF/views/目录下的一个新建的ttt.jsp,就这样启动项目后,访问项目http://localhost:8080/news/index,结果返回404,Problem accessing /news/WEB-INF/views/ttt.jsp。

解决方案

  开始一直以为jsp页面没有编译,最后发现确实没有编译,tomcat的jsp是在第一次请求页面的时候编译的,但是为什么没有编译呢?说明没有请求到页面,查看控制台打印的信息发现

日志打印没有找到/WEB-INF/views/ttt.jsp对应的handler,说明/WEB-INF/views/ttt.jsp请求又被spring-mvc的selvet拦截了两次,问题出现了,为什么会拦截两次呢?原因就出在web.xml里配置的拦截形式/*上面,修改成/就没问题了。

总结一下

  /*是拦截所有请求,包括视图解析后跳转的.jsp页面,/则不会拦截视图解析后的.jsp页面!

时间: 2024-12-08 07:48:27

springmvc配置servlet的拦截形式/*和/的区别的相关文章

SpringMVC配置servlet的URL

在配置SpringMVC的核心过滤器的url-pattern时是不能随便配的. <servlet> <servlet-name>...</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation<

使用框架时,在web.xml中配置servlet时,拦截请求/和/*的区别。

关于servlet的拦截设置,之前看了好多,说的都不太清除,明白. 最近明白了一些,总的来说就是保证拦截所有用户请求的同时,放行静态资源. 现整理如下: 一.我们都知道在基于Spring的Application中,需要在web.xml中增加下面类似的配置信息: 1 <listener> 2 <listener-class> 3 org.springframework.web.context.ContextLoaderListener 4 </listener-class>

springMVC --配置详细与注解说明

<?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:tx="http://www.springframework.org/schema/t

SpringMVC配置实例

一.SpringMVC概述 MVCII模式实现的框架技术 Model--业务模型(Biz,Dao...) View--jsp及相关的jquery框架技术(easyui) Contraller--DispatcherServlet以及控制器组件 二.控制器组件 1).DispatherServlet 2).xxx-servlet.xml文件 3).转向模型ModelAndView类 4).相应的Aop组件和拦截器组件 三.springMvc的开发步骤 1.在当前工程引入spring组件包 2.编写

springMVC学习(12)-使用拦截器

一.拦截器配置和测试: 1)定义两个拦截器,(要实现HandlerInterceptor接口) HandlerInterceptor1: 1 package com.cy.interceptor; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 import org.springframework.web.servlet.HandlerIn

Struts2、SpringMVC、Servlet(Jsp)性能对比 测试

Struts2.SpringMVC.Servlet(Jsp)性能对比 测试 . Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照它. 做为一个程序员,对于各个框架的性能要有一个基本的认知,便于选型时做出正确的决策. 在测试中发现了什么也不要大喊大叫,因为这些都是Java程序员的基础知识. 人人都要了解. ----------------------------------------------------------------------------------

SpringMVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet

一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet-name>ActionServlet</servlet-name> 3 <servlet-class>me.gacl.web.controller.ActionServlet</servlet-class> 4 </servlet> 5 6 <ser

SpringMVC配置及使用

SpringMVC基本配置 SpringMVC是基本请求响应模式的框架. 在项目中集成SpringMVC框架首先需要导入相关的jar包,所需包具体如下: commons-dbcp.jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-logging-1.1.1.jar jackson-annotations-2.2.3.jar jackson-core-2.2.3.jar jackson-databind-2.2.3.jar