《SpringMVC从入门到放肆》三、DispatcherServlet的url-pattern配置详解

上一篇我们详细解释了一下SrpingMVC的执行流程以及一些默认的配置,在Spring的思想中,就是默认大于配置。今天我们来详细的研究一下DispatcherServlet的url-pattern配置。

一、DispatcherServlet的url-pattern配置
在没有特别要求的情况下,SpringMVC的中央调度器DispatcherServlet的url-pattern常使用后缀匹配方式进行配置,如*.do、*.action
注意:这里的url-pattern不能写/*,因为DispatcherServlet会将向JSP的动态页面跳转请求也当作为普通的Controller来处理。中央调度器在调用处理器映射器来为其查找相应的处理器时,肯定找不到。所以在这种情况下,所有的JSP页面跳转都会变为404。
最好也不要写成/,因为DispatcherServlet会将向静态资源的请求当作为普通的Controller来处理。如.css、.jpg、.js等。所以静态资源也会变成404。
所以建议写成*.do、*.action之类的配置。当然也有一些时候不得不配置成/,当开发一些移动端接口采用restful请求时,需要配置成/。

二、url-pattern配置为/时静态资源的访问
1:使用tomcat的默认Servlet解决
在web.xml中添加如下代码

<servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.js</url-pattern>
</servlet-mapping>

注意:上方只处理*.js,如果需要大家可以再加几个拦截其它资源。使用该配置只需要配置servlet-mapping即可,default的Servlet配置在tomcat的conf/web.xml文件中。如下图:

具体的解释在该段代码的上方注释里。

<!-- The default servlet for all web applications, that serves static -->
<!-- resources. It processes all requests that are not mapped to other -->
<!-- servlets with servlet mappings (defined either here or in your own -->
<!-- web.xml file). This servlet supports the following initialization -->
<!-- parameters (default values are in square brackets): -->

该default的servlet对所有的web应用程序生效,专门处理静态资源。(处理所有没有匹配到servlet mappings的请求)

2:使用SpringMVC的default-servlet-handler解决
在springmvc.xml中添加<mvc:default-servlet-handler/>。当然添加这个default-servlet-handler时,需要对当前xml添加mvc的约束xsd。如下图:

最终springmvc.xml如下:

<?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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><mvc:default-servlet-handler/><!-- 注册视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 注册SpringMVC处理器 --><bean id="/my.do" class="cn.wechatbao.controller.MyController"></bean>
</beans>

注意:default-servlet-handler会对静态资源的访问请求通过handlerMapping映射到默认的Servlet请求处理器DefaultServletHttpRequestHandler类上。而该类最终调用的是Tomcat的defaultServlet来处理的请求。如图:

3:使用SpringMVC的resources解决
在springmvc.xml中添加如下代码:
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
其中的location和mapping为具体的静态资源文件夹,大家可以根据具体的项目来定义。
注意:该方法是在spring3.0.4版本后,专门定义的一个静态资源的处理器ResourceHttpRequestHandler类,该种配置文件会将所有的静态资源映射到ResourceHttpRequestHandler该类

转载于:https://www.cnblogs.com/xinhudong/p/8323857.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux c 指针数组定义数组长度,C/C++指针数组和 迪士尼源码搭建下载 数组指针...

迪士尼源码搭建下载【指针数组 : 存放指针的数组其定义抽象为&#xff1a;指向变量的类型 * 数组名称 [数组长度]。int *p[2];p[0] NULL;p[1] NULL;2. 数组指针 : 指向数组的指针2.0 定义抽象&#xff1a;数组元素类型 (* 指针名称)[数组长度].2.1 假设数组int a[2][2] { {1…

vc中怎么使用SendMessage自定义消息函数

vc中怎么使用SendMessage自定义消息函数&#xff1a; SendMessage的基本结构如下&#xff1a; SendMessage( HWND hWnd, //消息传递的目标窗口或线程的句柄。 UINT Msg, //消息类别&#xff08;这里可以是一些系统消息&#xff0c;也可以是自己定义&#xff0c;下文具…

tp5 修改默认的分页url

默认分页url&#xff1a;xx.com/xxx?page1 个人主要感觉不美观&#xff0c;想变成xx.com/xxx/list_1.html这样的 框架本身默认使用的boostrap分页类&#xff0c;目录位置 simplewind\thinkphp\library\think\paginator\driver\Bootstrap.php 调用url的主要是父类Paginator的ur…

多路复用IO和异步IO

多路复用I/O 它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket&#xff0c;当某个socket有数据到达了&#xff0c;就通知用户进程。 流程图如下&#xff1a; 当用户进程调用了select&#xff0c;那么整个进程会被block&#xff0c;而同时&#xff0c…

Java开发人员应该知道的7种新工具

通过快速浏览一些最新的创新工具&#xff0c;随时准备锁定和加载。 万一您错过了它&#xff0c;RebelLabs最近发布了Java工具和技术前景的全球调查结果 。 除了著名的工具和成熟的工具外&#xff0c;市场还涌现出鲜有人知的新鲜工具和框架。 在这篇文章中&#xff0c;我决定收集…

leetcode-92-反转链表②

题目描述&#xff1a; 方法一: class Solution:def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:dummy ListNode(0)dummy.next headpre dummyfor i in range(m-1):pre pre.nextstart pre.nexttrail start.nextfor i in range(n-m):start.next …

linux 7 services设定,CENTOS/RHEL7系统中设置SYSTEMD SERVICE的ULIMIT资源限制

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;在bash中&#xff0c;有个ulimit命令&#xff0c;提供了对shell及该shell启动的进程的可用资源控制。主要包括打开文档描述符数量、用户的最大进程数量、coredump文…

ON_COMMAND_RANGE用法

afx_msg voidOnOutPutStatusButtonUp (WPARAM wParam, LPARAM lParam);BEGIN_MESSAGE_MAP(CIOStatue, CDialog)//{{AFX_MSG_MAP(CIOStatue)//}}AFX_MSG_MAPON_COMMAND_RANGE(IDC_STATIC_OUT1,IDC_STATIC_OUT16,OnOutPutStatusButtonUp)END_MESSAGE_MAP()//注意IDC_STATIC_OUT1…

re正则表达式公式讲解5

1.refullmatch() 完全匹配字符串则返回object&#xff0c;否则返回None import res "max123uyt146"print(re.fullmatch("\w \w ",s))# <_sre.SRE_Match object; span(0, 13), matchmax123uyt146>2.re.compile() 两种方法返回的同一个对象&#x…

P1880 [NOI1995]石子合并

\(\color{#0066ff}{ 题目描述 }\) 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆&#xff0c;并将新的一堆的石子数&#xff0c;记为该次合并的得分。 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.…

在c语言中a 这条语句的作用,C语言复习第二章

C语言第二章C语言复习(第二章)一、填空1、若采用十进制数的表示形式&#xff0c;则077为( )&#xff0c;0111为( )&#xff0c;0xab为( )。 2、C语言中的标识符只能由3种字符组成&#xff0c;它们是( )、( )和( )。 3、在C语言中&#xff0c;用“\\”开头的字符序列称为转义字符…

python执行linux和window的命令

linux&#xff1a; python执行shell脚本常用的方法 import os valos.system("shell语句") >>> valos.system("more /tmp/web.access.log |grep 222.132.79.77 -wc")826>>> print val0 valos.popen("shell语句").read() val可…

外部服务的集成测试

我们的系统通常依赖于第三方服务&#xff08;它们甚至可能是我们无法控制的公司内部服务&#xff09;。 此类服务包括公开API的社交网络&#xff0c;带有诸如Salesforce&#xff0c;身份验证提供程序之类的API的SaaS或我们系统与之通信但不在产品生命周期内的任何系统。 在常规…

自定义控件中使用Render的writer

给自定义控件一个模板并输出&#xff0c;可以在重写控件的Render&#xff0c;并使用它的HtmlTextWriter writer例如&#xff1a;publicclassMyTextBox : TextBox { private string _template"<tr><td> {0} </td><td> {1} </td>&l…

使用JBoss AS 7进行SSL加密的EJB调用

加密客户端和服务器之间的通信可为您的系统提供改进的安全性和隐私保护。 这可能是客户的一项重要要求&#xff0c;尤其是在客户端或服务器需要在不受保护的网络中工作时。 本文向您展示了如何在JBoss AS 7中设置SSL加密的EJB调用。 服务器 在服务器端只需完成两件事&#xf…

random模块详解

1.import random randomrandint&#xff08;a&#xff0c;b&#xff09; 括号里是一个范围&#xff0c;randomrandint&#xff08;&#xff09;是取括号里范围的随机数。 >>> import random>>> random.randint(1,10)8>>>>>> random.randi…

【ABAP系列】SAP 面试 ABAPer的一些感想

公众号&#xff1a;SAP Technical本文作者&#xff1a;matinal原文出处&#xff1a;http://www.cnblogs.com/SAPmatinal/ 原文链接&#xff1a;【ABAP系列】SAP 面试 ABAPer的一些感想前言部分 大家可以关注我的公众号&#xff0c;公众号里的排版更好&#xff0c;阅读更舒适。 …

mean技术栈 linux,“MEAN”技术栈开发web应用

var express require(express);var app express();app.listen(3000);var _rootDir __dirname;var protectDir _rootDir /protect/;app.use(express.static(_rootDir));//注册路由app.get(/, function(req, res){res.sendFile(_rootDir/src/index.html);});app.use(functio…

VS2005 VS2008新建网站和新建项目里选Web应用程序区别

WebApplication编程模型的优点&#xff1a;●网站编译速度快&#xff0c;使用了增量编译模式&#xff0c;仅仅只有文件被修改后&#xff0c;这部分才会被增量编译进去。●生成的程序集WebSite&#xff1a;生成随机的程序集名&#xff0c;需要通过插件WebDeployment才可以生成单…

Perl线程池

Thread::Pool模块提供了Perl解释器线程的线程池&#xff0c;手册&#xff1a;https://metacpan.org/pod/Thread::Pool。 转载于:https://www.cnblogs.com/f-ck-need-u/p/10422449.html