html访问控制器路径写法,web前端控制器拦截路径的url-pattern写 / 与 /* 的区别

/与/*的区别

/:

servlet的url-pattern设置为/时, 它仅替换servlet容器的默认内置servlet,用于处理所有与其他注册的servlet不匹配的请求。直白点说就是,所有静态资源(js,css,image,html等)的访问都将交给该servlet处理,而jsp页面则交给servlet容器内置的JSP servlet处理。

/*:

servlet的url-pattern设置为/时,它会覆盖其他所有的servlet,包括servlet容器提供的所有servlet,如缺省servlet和JSP servlet。 无论你发出什么请求,都会在该servlet拦截处理。通常我们不会这么做。如果你只是想使用/,那么你可以在Filter中使用,它处理完后会将url交给servlet处理。

实例说明

直接解释/与/*的区别,可能不是那么直观,我们用实验来说话吧。

有一个SpringMVC项目中,已开启静态资源访问,所有编码均为UTF-8:

有一个Controller,处理/hello请求,返回/index.jsp页面

有一个hello.html文件

有一个hello.jsp文件

有一个index.html文件

有一个index.jsp文件

DispatcherServlet的url-pattern设置为/时:

e67b4a0a94c50a7e2d9d01853225aaf7.png

我们可以看到结果

/hello.html没有访问到自己本该访问到的页面说明静态资源被DispatcherServlet拦截处理了。

/index.html访问到自己本该访问到的页面这是因为SpringMVC开启了静态资源访问,结合1来看,如果静态资源的前缀名与Controller中处理的请求同名时,会被Controller中的请求覆盖,否则就会返回静态资源本来的页面。

/hello.jsp和/index.jsp请求都访问到了本该属于自己的页面说明jsp页面没有被DispatcherServlet拦截处理。

DispatcherServlet的url-pattern设置为/*时:

1f6f324c2c5bb0fadbf3f4525dcf18a7.png

11.jpg

120811df12450c075f0b84ebe848a3ac.png

12.jpg

9ca224b1ad060568355933871fcb621f.png

13.jpg

9702cebd8c01b6ad77df75effe7c4c75.png

14.jpg

86b7df43f5c7c6f668bba07a4d938370.png

15.jpg

/hello.jsp和/index.jsp都访问到了自己页面的源码,说明jsp页面都被DispatcherServlet拦截处理了,并且DispatcherServlet自己还处理不好这些jsp页面(不能对jsp页面进行解析),所以直接返回它们的源码信息,并且编码都变得不可控,编码还由原来的UTF-8变成了GBK。

注意:顺便说一下,

仅仅只能拦截处理主页请求:

什么请求都不能拦截处理,相当于没有设置:

/**

1人点赞

Java Web答疑学堂

作者:lavor

链接:https://www.jianshu.com/p/186ba66362a9

来源:简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我用Spring5的aop应用时报这个错误Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [D:\ecliple\web5\WEB-INF\applicationContext.xml]; nested exception is java.nio.file.NoSuchFileException: WEB-INF\applicationContext.xml,他说我的applicationContext.xml文件不存在,可是我明明有这个文件,另外我的web.xml需要更改吗<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <context-param> <param-name>contextConfigLocation </param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <display-name>Struts2</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> <!--2.5版本的写法 --> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/* </url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
最新发布
05-30

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值