被Spring配置文件搞得不胜其烦,干脆记下来,也不用到处找教程了。
配置内容
web.xml
1 |
|
2 | <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" |
3 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
4 | xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" |
5 | version="3.1"> |
6 | <servlet> |
7 | <servlet-name>SpringMVC</servlet-name> |
8 | <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> |
9 | <init-param> |
10 | <param-name>contextConfigLocation</param-name> |
11 | <param-value>WEB-INF/springmvc-servlet.xml</param-value> |
12 | </init-param> |
13 | </servlet> |
14 | <servlet-mapping> |
15 | <servlet-name>SpringMVC</servlet-name> |
16 | <url-pattern>/</url-pattern> |
17 | </servlet-mapping> |
18 | </web-app> |
spring
springmvc
然后是springmvc的配置:
1 |
|
2 | <beans xmlns="http://www.springframework.org/schema/beans" |
3 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
4 | xmlns:context="http://www.springframework.org/schema/context" |
5 | xmlns:mvc="http://www.springframework.org/schema/mvc" |
6 | xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> |
7 | <context:component-scan base-package="index"/> |
8 | <mvc:default-servlet-handler/> |
9 | <mvc:annotation-driven/> |
10 | <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> |
11 | <property name="prefix" value="/WEB-INF/pages"/> |
12 | <property name="suffix" value=".jsp"/> |
13 | </bean> |
14 | </beans> |
详细解释
web.xml
web.xml文件元素
schema
Sun公司定义的,在根元素
比如:
1 | <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" |
2 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
3 | xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" |
4 | version="3.1"> |
5 | </web-app> |
icon、display、disciption、
分别用来描述web应用的图标、名称和描述,基本没用过…
1 | <icon> |
2 | <small-icon>/images/app_small.gif</small-icon> |
3 | <large-icon>/images/app_large.gif</large-icon> |
4 | </icon> |
5 | <display-name>Tomcat Example</display-name> |
6 | <disciption>Tomcat Example servlets and JSP pages.</disciption> |
context-param 上下文参数
声明应用范围内的初始化参数。向ServletContext提供键值对,即应用程序上下文信息。listener,filter等在初始化的时候会用到这些上下文中的信息。在servlet了里面可以通过getServletContext().getInitParameter("cibtext/param")
得到
1 | <context-param> |
2 | <param-name>ContextParameter</para-name> |
3 | <param-value>test</param-value> |
4 | <description>It is a test parameter.</description> |
5 | </context-param> |
filter 过滤器
将一个名字和一个实现javaxs.servlet.Filter接口的类相关联
通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将请求交给Servlet 进行处理并生成响应,最后Filter 再对服务器响应进行后处理。
功能
- 在HttpServletRequest 到达 Servlet 之前,拦截客户的 HttpServletRequest 。 根据需要检查 HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
- 在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。 根据需要检查 HttpServletResponse ,也可以修改HttpServletResponse头和数据。
filter链
在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。
web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。
生命周期
web服务器负责创建和销毁,应用程序启动的时候创建实例,并且调用init方法
创建:public void init(FilterConfig filterConfig) throws ServletException;//初始化
执行:public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;//拦截请求
销毁:public void destroy();//销毁
FilterConfig接口
编写filter的时候可以通过filterConfig对象的方法获取filter初始化参数。
1 | String getFilterName();//得到filter的名称。 |
2 | String getInitParameter(String name);//返回在部署描述中指定名称的初始化参数的值。如果不存在返回null. |
3 | Enumeration getInitParameterNames();//返回过滤器的所有初始化参数的名字的枚举集合。 |
4 | public ServletContext getServletContext();//返回Servlet上下文对象的引用。 |
1 | <filter> |
2 | <filter-name>setCharacterEncoding</filter-name> |
3 | <filter-class>com.myTest.setCharacterEncodingFilter</filter-class> |
4 | <init-param><!--通过FilterConfig类的getInitParameter("paramName") --> |
5 | <param-name>encoding</param-name> |
6 | <param-value>UTF-8</param-value> |
7 | </init-param> |
8 | </filter> |
9 | <filter-mapping> |
10 | <filter-name>setCharacterEncoding</filter-name> |
11 | <url-pattern>/*</url-pattern> |
12 | <servlet-name>指定过滤器所拦截的Servlet名称。</servlet-name> |
13 | <dispatcher>指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个dispatcher子元素用来指定 Filter 对资源的多种调用方式进行拦截。</dispatcher> |
14 | </filter-mapping> |
listener 监听器
监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。
1 | <listener> |
2 | <listener-class>com.listener.class</listener-class> |
3 | </listener> |
ServletContext监听
ServletContextListerner接口: 用于对Servlet整个上下文进行监听(创建、销毁)
1 | public void contextInitialized(ServletContextEvent sce);//上下文初始化 |
2 | public void contextDestroyed(ServletContextEvent sce);//上下文销毁 |
3 | public ServletContext getServletContext();//ServletContextEvent事件:取得一个ServletContext(application)对象 |
ServletContextAttributeListener接口:对Servlet上下文属性的监听(增删改属性)
1 | public void attributeAdded(ServletContextAttributeEvent scab);//增加属性 |
2 | public void attributeRemoved(ServletContextAttributeEvent scab);//属性删除 |
3 | public void attributeRepalced(ServletContextAttributeEvent scab);//属性替换(第二次设置同一属性) |
4 | //ServletContextAttributeEvent事件:能取得设置属性的名称与内容 |
5 | public String getName();//得到属性名称 |
6 | public Object getValue();//取得属性的值 |
Session监听
Session属于http协议下的内容,接口位于javax.servlet.http.*包下。
HttpSessionListener接口:对Session的整体状态的监听。
1 | public void sessionCreated(HttpSessionEvent se);//session创建 |
2 | public void sessionDestroyed(HttpSessionEvent se);//session销毁 |
3 | //HttpSessionEvent事件: |
4 | public HttpSession getSession();//取得当前操作的session |
HttpSessionAttributeListener接口:对session的属性监听。
1 | public void attributeAdded(HttpSessionBindingEvent se);//增加属性 |
2 | public void attributeRemoved(HttpSessionBindingEvent se);//删除属性 |
3 | public void attributeReplaced(HttpSessionBindingEvent se);//替换属性 |
4 | //HttpSessionBindingEvent事件: |
5 | public String getName();//取得属性的名称 |
6 | public Object getValue();//取得属性的值 |
7 | public HttpSession getSession();//取得当前的session |
request监听
ServletRequestListener: 用于Request请求进行监听(创建、销毁)
1 | public void requestInitialized(ServletRequestEvent sre);//request初始化 |
2 | public void requestDestroyed(ServletRequestEvent sre);//request销毁 |
3 | //ServletRequestEvent事件: |
4 | public ServletRequest getServletRequest();//取得一个ServletRequest对象 |
5 | public ServletContext getServletContext();//取得一个ServletContext(application)对象 |
ServletRequestAttributeListener: 对Request属性的监听(增删改属性)
1 | public void attributeAdded(ServletRequestAttributeEvent srae);//增加属性 |
2 | public void attributeRemoved(ServletRequestAttributeEvent srae);//属性删除 |
3 | public void attributeReplaced(ServletRequestAttributeEvent srae);//属性替换(第二次设置同一属性) |
4 | //ServletRequestAttributeEvent事件:能取得设置属性的名称与内容 |
5 | public String getName();//得到属性名称 |
6 | public Object getValue();//取得属性的值 |
servlet
servlet标签只要有以下子元素:
- servlet-name指定servlet的名称
- servlet-class制定servlet的类名称
- jsp-file制定某个jsp网页的完整路径
- init-param用来定义参数,可以有多个init-param。在servlet类中通过getInitParamenter(String name)方法初始化参数
- load-on-startup 指定当Web应用启动的时候,装载Servlet的次序,当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet。当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它。
- servlet-mapping 用来定义servlet所对应的URL包含两个子元素
- servlet-name 指定servlet的名称
- url-parttern 指定servlet所对应的URL
1
<!-- 基本配置 -->
2
<servlet>
3
<servlet-name>snoop</servlet-name>
4
<servlet-class>SnoopServlet</servlet-class>
5
</servlet>
6
<servlet-mapping>
7
<servlet-name>snoop</servlet-name>
8
<url-pattern>/snoop</url-pattern>
9
</servlet-mapping>
10
<!-- 高级配置 -->
11
<servlet>
12
<servlet-name>snoop</servlet-name>
13
<servlet-class>SnoopServlet</servlet-class>
14
<init-param>
15
<param-name>foo</param-name>
16
<param-value>bar</param-value>
17
</init-param>
18
<run-as>
19
<description>Security role for anonymous access</description>
20
<role-name>tomcat</role-name>
21
</run-as>
22
</servlet>
23
<servlet-mapping>
24
<servlet-name>snoop</servlet-name>
25
<url-pattern>/snoop</url-pattern>
26
</servlet-mapping>
session-config 会话超时配置
单位是分钟
1 | <session-config> |
2 | <session-timeout>120</session-timeout> |
3 | </session-config> |
mime-mapping、welcome-file-list、error-page错误页面
1 | <mime-mapping> |
2 | <extension>htm</extension> |
3 | <mime-type>text/html</mime-type> |
4 | </mime-mapping> |
5 | <welcome-file-list> |
6 | <welcome-file>index.jsp</welcome-file> |
7 | <welcome-file>index.html</welcome-file> |
8 | <welcome-file>index.htm</welcome-file> |
9 | </welcome-file-list> |
10 | <error-page> |
11 | <error-code>404</error-code> |
12 | <location>/NotFound.jsp</location> |
13 | </error-page> |
14 | <error-page> |
15 | <exception-type>java.lang.NullException</exception-type> |
16 | <location>/error.jsp</location> |
17 | </error-page> |
jsp-config 设置jsp
1 | <jsp-config> |
2 | <taglib> |
3 | <taglib-uri>Taglib</taglib-uri><!--jstl标签配置--> |
4 | <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location> |
5 | </taglib> |
6 | <jsp-property-group> |
7 | <description>Special property group for JSP Configuration JSP example.</description><!--设定的说明--> |
8 | <display-name>JSPConfiguration</display-name> |
9 | <url-pattern>/jsp/* </url-pattern> |
10 | <el-ignored>true</el-ignored> |
11 | <page-encoding>GB2312</page-encoding> |
12 | <scripting-invalid>true</scripting-invalid> |
13 | <include-prelude>/include/prelude.jspf</include-prelude> |
14 | <include-coda>/include/coda.jspf</include-coda> |
15 | </jsp-property-group> |
16 | </jsp-config> |
容器加载web.xml和启动过程
当要启动某个j2ee项目的时候,服务器软件或者容器会第一步加载项目中的web.xml文件,通过其中的各种配置来启动项目,只有其中配置各项
均无误的时候,项目才正确启动。
web.xml有多响标签,在加载过程中顺序依次为:context-param > listener > filter > servlet
- web.xml先读取context-param和listen这两个节点;
- 然后容器创建一个ServletContext,应用于整个项目;
- 将读取到的context-param转化为键值对并且存入servletContext
- 根据listener创建监听
- 容器读取,根据指定的类路径来实例化过滤器
- 项目初始化完成
- 发起第一次请求的时候,servlet节点被加载实例化。
参考:web.xml文件详解、Web启动过程及web.xml配置、web.xml官方文档、Filter过滤器、Listener监听器、JSP标准标签库