SSM框架中 / 和 /* 的区别

今天在编写配置文件web.xml时,发现在 前端控制器 和 字符集过滤器中,过滤的内容很相似,但是有所不同。以下是相关代码:

<servlet>
  	<!-- 配置前端过滤器 -->
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>
  		org.springframework.web.servlet.DispatcherServlet
  	</servlet-class>
  	<!-- 初始化时加载配置文件 -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:springmvc-config.xml</param-value>
  	</init-param>
  	<!-- 表示容器在启动时立即加载Servlet -->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>springmvc</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  <!-- 配置编码过滤器 -->
  <filter>
	<filter-name>CharacterEncodingFilter</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>
  </filter>
  <filter-mapping>
	<filter-name>CharacterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
  </filter-mapping>


不知道大家有没有发现,在前端控制器 中 <url-pattern> 配置的是 /,将拦截所有请求;字符集过滤器中<url-pattern> 配置的是 /*,也将过滤所有请求。看起来作用是一样的,但是为什么是不同写法呢?查阅资料之后,得到以下原因。

这个问题我们可以回到最原始的 Servlet 和 Filter,因为前端控制器就是一个 Servlet,字符集过滤器就是一个 Filter,我从这方面下手,尝试写了几个 Demo,发现其实 / 和 /* 分别在 Servlet 和 Filter 中有不同的意义。并得出下列结论:

1、Servlet
/ :它会匹配所有的路径,但是不会匹配到像 .jsp 这样的页面。如:

http://localhost:8080/chapter13/toOrders(会匹配);


http://localhost:8080/chapter13/toOrders.jsp(不会匹配)。


你会发现后面有 .jsp 不会被匹配到。

/* :它会匹配所有的路径和页面,上述的例子均会被匹配到。

2、Filter
/ :它会过滤根目录,而且只会过滤根目录,不会过滤其他路径;
/* :它会过滤全部请求,也包括根目录。
                        
 

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值