脚手架工程三:web.xml的配置

一、web.xml中的配置

web.xml总结:
1、web.xml学名叫部署描述符文件,是在Servlet规范中定义的,是web应用的配置文件;
1、java web的三大组件(Servlet、Filter、Listener),也就是我们在web.xml配置文件中看到的配置标签;
2、web.xml的加载顺序是:<context-param>-><listener>-><filter>-><servlet>。
1、定义contextConfigLocation初始化参数
<context-param>
	<param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:conf/spring/spring-ds.xml,
            classpath*:conf/spring/spring-mybatis.xml,
            classpath*:conf/spring/spring-base.xml,
            classpath*:conf/spring/spring-kafka.xml,
            classpath*:conf/spring/spring-mq.xml,
            classpath*:conf/spring/spring-impl.xml
		</param-value>
</context-param>

说明:

​ ① <param-value>标签中定义的是服务器启动时初始化装载的spring配置文件,一般用于加载除Web层的Bean(如DAO、Service等)

​ ② ServletContextListener进行加载时,会查找<param-name>为contextConfigLocation的参数文件进行加载,若未配置contextConfigLocation,默认WEB-INF/下的applicationContext.xml 文件。

​ ③ 可通过通配符来简化,classpath*:conf/spring/spring-*.xml


2、定义Listener监听器
<listener>
	<listenerclass>
        org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>

说明:

​ ① 使用ContextLoaderListener类定义监听器,与<param-name>contextConfigLocation</param-name>配合使用,获取其设置的参数值并进行加载


3、定义Filter过滤器

编码过滤器配置:

<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>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>characterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

补充扩展:

① 作用域:在请求和响应对象在Servlet处理之前和之后,上面配置了编码格式,保证出入参数的编码格式

​② 由于现在前后端分离,包括静态资源部署到CDN服务器,都带来跨域访问的问题,使用jsonp及cors过滤器可解决跨域问题

防止常见XSS 过滤 SQL注入 JAVA过滤器filter


4、配置<servlet-name>default</servlet-name>

原因:

  1. 如何你的DispatcherServlet拦截".do"这样的有后缀的URL,就不存在访问不到静态资源的问题。
  2. 如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对.js,.jpg等静态文件的访问也就被拦截了

**作用:**对客户端请求的静态资源如图片、JS文件等的请求交由默认的servlet进行处理,不会因为找不到静态文件报404。

**注意:**要写在DispatcherServlet的前面, 让 defaultServlet先拦截请求,这样请求就不会进入Spring了,性能是最好。

不同容器的默认servlet-name是不同的,以下为列表

Tomcat, Jetty, JBoss, and GlassFish 自带的默认Servlet的名字 -- "default"
Google App Engine 自带的 默认Servlet的名字 -- "_ah_default"
Resin 自带的 默认Servlet的名字 -- "resin-file"
WebLogic 自带的 默认Servlet的名字  -- "FileServlet"
WebSphere  自带的 默认Servlet的名字 -- "SimpleFileServlet"

配置如下:

<servlet-mapping>
	<servlet-name>default</servlet-name>
    <url-pattern>*.jpg</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>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>default</servlet-name>
	<url-pattern>*.ico</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>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
	<servlet-name>default</servlet-name>
	<url-pattern>*.css</url-pattern>
</servlet-mapping>

补充扩展:

servlet的url-pattern匹配规则

spring提供了其他方式防止拦截静态资源文件


5、配置DispatcherServlet
<servlet>
	<servlet-name>cosm-admin</servlet-name>
	<servlet-class>
		org.springframework.web.servlet.DispatcherServlet
	</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:conf/spring/spring-servlet.xml,
            classpath:conf/spring/spring-resolver.xml
        </param-value>
    </init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>cosm-admin</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

作用:

1、DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

说明:

① **contextConfigLocation:**指明了初始化配置文件的文件名,不使用默认配置文件名;若未指定,则默认在WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml。特别强调的是:如果未指定配置文件,则配置文件应放在WEB-INF文件夹下。

两处加载spring配置文件的区别:

a.ContextLoaderListener初始化的上下文加载的Bean是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层、Service层Bean; 
b.DispatcherServlet初始化的上下文加载的Bean是只对Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,该初始化上下文应该只加载Web相关组件。

② <load-on-startup>1</load-on-startup>是启动顺序,让这个Servlet随Servletp容器一起启动

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值