标签配置(servlet3.x版本可以使用注解替换)
- Servlet、Filter、Lintener成功运行,除了有自定义的实现,还需要在web.xml中进行配置。
- Lintener 中
HttpSessionBindingListener``HttpSessionActivationListener
两类监听器不需要配置。 - servlet3.x 版本可以使用注解替换配置,而且可以省去
web.xml
配置文件(见博客系列笔记)
Servlet
标签详解
- 一个
Servlet
的配置,包括servlet
、servlet-mapping
、load-on-startup
、init-param
等标签 servlet
标签: 是一个Servlet 的定义标签,包括:
servlet-name
: 配置 Servlet 的名称,如 LifeCycleServlet,可以取任一字符串,保证在web.xml中唯一servet-class
: 配置该 Servlet 的类,需要完整的包。如com.learning.servlet2x.base.LifeCycleServlet
servlet-mapping
标签: 配置该Servlet的访问方式,包括:
servlet-name
:引用servlet
标签中定义的名称url-pattern
:配置该Servlet的访问方式。url-pattern
配置的值前面加上服务器IP、端口、Web 应用程序的路径,就是这个Servlet
的具体访问路径
url-pattern
详解:
- 允许使用通配符
*
、?
。*
代表任意长度的字符串,?
表示任意字符 - JavaEE 5 以后一个
servlet-mapping
可以配置多个url-pattern
。例如:可以同时将LifeCycleServlet
配置多个映射方式。不论用jsp后缀、php后缀访问,都会正常显示
<servlet-mapping>
<servlet-name>LifeCycleServlet</servlet-name>
<url-pattern>/servlet/LifeCycleServlet</url-pattern>
<url-pattern>/servlet/LifeCycleServlet.jsp</url-pattern>
<url-pattern>/servlet/LifeCycleServlet.asp</url-pattern>
<url-pattern>/servlet/LifeCycleServlet.php</url-pattern>
</servlet-mapping>
- 缺省的Servlet配置
- 所有的 web 访问都是去找 Servlet,服务器会有默认的缺省Servlet,如访问静态资源,就会去访问缺省Servlet,然后该Servlet会帮忙访问静态资源,显示给浏览器
- Tomcat 中这个缺省的 Servlet为其 Web.xml 中定义的
org.apache.catalina.servlets.DefaultServlet
- 自己定义缺省的 Servlet 的方法为,
url-pattern
,只配置/
即可
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
load-on-startup
: 配置该 Servlet 的加载方式,可选值为 0 和 1 或正整数。 Struts、Spring等框架都会使用该参数来预先加载核心的 Servlet
- 服务器启动后加载:
load-on-startup=1
。 当是正整数时,1的优先级最高。(1>2) - 第一次请求才去加载:
load-on-startup=0
代码
<!--Servlet 生命周期-->
<servlet>
<servlet-name>LifeCycleServlet</servlet-name>
<servlet-class>com.learning.servlet2x.base.LifeCycleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LifeCycleServlet</servlet-name>
<url-pattern>/lifeCycleServlet</url-pattern>
</servlet-mapping>
参数配置
标签详解
context-param
: context上下文参数,所有servlet、filter都可以使用。
- 包括标签名
param-name
、标签值param-value
两个子标签 - 通过ServletContext对象获取标签数据
init-param
: 初始化参数,供某一个 Servlet、Filter 单独使用
- 包括标签名
param-name
、标签值param-value
两个子标签 - 通过方法
getInitParameter()
获取标签数据
代码
<context-param>
<param-name>context_user</param-name>
<param-value>Admin</param-value>
</context-param>
<init-param>
<param-name>user</param-name>
<param-value>Sam</param-value>
</init-param>
init-param
和context-param
只能配置简单的字符串类型的参数,更灵活的参数配置,推荐写到配置文件
Session 标签
session-config
标签 :session的配置标签,包括子标签如下
session-timeout
:配置session的有效期,单位是分钟。Tomcat 中默认超时时间为 20 分钟
- session 的超时时间为
MaxInactiveInterval
属性,可以利用setMaxInactiveInterval(int s)
和getMaxInactiveInterval()
分别设置于获取session的有效期,单位是秒
Filter
-
一个
Filter
需要配置filter``filter-mapping
等标签 -
filter
标签:配置 Filter 名称,实现类以及初始化参数,可以同时配置多个初始化参数。 -
filter-mapping
标签: 配置什么规则下使用这个 Filter
-
url-pattern
: 配置 url 的规则,可以配置多个,也可以使用通配符*
。 -
dispatcher
: 配置到达 servlet 的方式,可以同时配置多个。则默认为REQUEST。它们的区别是:- REQUEST :表示仅当直接请求servlet时才生效
- FORWARD :表示仅当某servlet通过forward转发到该servlet时才生效
- INCLUDE :Jsp中可以通过
<jsp:include/>
请求某 servlet, 只有这种情况才有效 - ERROR :Jsp中可以通过
<%@page errorPage="error.jsp" %>
指定错误处理页面,仅在这种情况下才生效
-
url-pattern
和dispatcher
是且的关系,只有满两个的条件,该 Filter 才能生效
- 一个Web程序可以配置多个Filter ,访问有先后顺序,
filter-mapping
配置在前面的Filter 执行要早于配置在后面的Filter
其他
listener
监听器标签:一般配置在servlet 标签前面。主要有listener
、listener-class
mime-mapping
: 如果Web应用具有用到特殊的文件,希望能保证给他们分配特定的MIME类型。一般可以配置一些允许下载的文件类型
<!-- 下载文件类型 -->
<mime-mapping>
<extension>doc</extension>
<mime-type>application/msword</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xls</extension>
<mime-type>application/msexcel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>pdf</extension>
<mime-type>application/pdf</mime-type>
</mime-mapping>
env-entry
资源注射标签。
- 初始化参数与上下文参数都需要我们主动去获取,而资源注射的内容不需要主动获取,Web启动的时候会主动把资源内容注射到servlet 中
- 这种功能是需要通过注解完成的,@javax.annotation.Resource 负责这个功能
env-entry
一般包括三组子标签<env-entry-name>、<env-entry-type>、<env-entry-value>
,局限是只能配置 java.lang 包下的标准变量- 在代码中,用
@Resource(name="")
注解标注定义好的属性变量,一定要指定名字,且需要与签定义的一致,这样,在web启动的时候,资源就会注入其中,不需要自己主动去获取
<env-entry>
<env-entry-name>uer</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type><!-- 只能配置java.lang包下的标准变量-->
<env-entry-value>Sam</env-entry-value>
</env-entry>
//指定名字,与配置的一致
@Resource(name="uer")
private String user;