Spring Mvc Web 配置拦截规则与访问静态资源 (三)
拦截规则配置
1. *.do
<!-- Processes application requests --> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
默认的 url-pattern 为 "/",改成 *.do 后,就没有默认首页面了,所以还得添加默认访问页:
<welcome-file-list> <welcome-file>home.do</welcome-file> </welcome-file-list>
打开 home.jsp 所对应的 RequestMapping 注入方法处,一般homeController.java,修改拦截 value 值为 home 或 home.do,本来为 "/";
@RequestMapping(value = "home.do", method = RequestMethod.GET) public String home(Locale locale, Model model) { logger.info("Welcome home! The client locale is {}.", locale); Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); String formattedDate = dateFormat.format(date); model.addAttribute("serverTime", formattedDate ); return "home"; }
2. /*, 把 *.do 改为 "/*"
这种方式,与 "/" 应该差不多,访问 /home 时, 可以访问到页面,但无法解析页面内部的 动态代码;
3. *.html, *.htm,这个的规则跟 *.do 差不多;
如何访问静态资源
*.do, *.htm, *.html 这样的规则,都能正常的访问静态资源,但不管在什么情况下,放静态资源放入到 WEB-INF 下, 好像都没法访问到的。百度一下, 也根本没有把静态资源放入到 WEB-INF 的查询结果。
现在只一种情况会拦截静态资源: jpg, gif, css, js 等,就是 "/";
1. 激活Tomcat的defaultServlet来处理静态文件:
在web.xml的 DispatcherServlet 前输入下面的内容;
<!-- 静态资源 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
每个后缀独立配置;这样就能正常的访问静态资源了;
不同的servlet 容器或服务器,处理这些静态资源的名称不一样:
Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字 -- "default"
Google App Engine 默认 Servlet的名字 -- "_ah_default"
Resin 默认 Servlet的名字 -- "resin-file"
WebLogic 默认 Servlet的名字 -- "FileServlet"
WebSphere 默认 Servlet的名字 -- "SimpleFileServlet"
2. 从 spring 3.0.4 提供 <resources /> 或 <mvc:resource />
<mvc:resources mapping="/img/**" location="/imaegs/" />
那页面上的静态资源就可以这样访问,比如图片:
<img src="http://127.0.0.1:8080/proj/img/abc.jpg" alt="" />
mapping是写在页面上的静态资源前缀,location 是指向的文件夹位置;
3. 第三种就是使用 <default-servlet-handler /> 或 <mvc:default-servlet-handler />
Spring 会把一些找不到 controller 的请求,放给默认的 servlet 容器来处理;从而能正常访问静态资源;
4. 如果 *.do 这样的拦截规则,配置上面的 servlet 处理资源 default 方式跟 resources配置 , 都是没有效果的,但都能以原文件夹路径正常访问!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!