0%

Spring配置文件

被Spring配置文件搞得不胜其烦,干脆记下来,也不用到处找教程了。

配置内容

web.xml

1
<?xml version="1.0" encoding="UTF-8"?>
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
<?xml version="1.0" encoding="UTF-8"?>
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公司定义的,在根元素中,都必须标明web.xml是用的拿个文件模式。其他元素放在内部
比如:

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

  1. web.xml先读取context-param和listen这两个节点;
  2. 然后容器创建一个ServletContext,应用于整个项目;
  3. 将读取到的context-param转化为键值对并且存入servletContext
  4. 根据listener创建监听
  5. 容器读取,根据指定的类路径来实例化过滤器
  6. 项目初始化完成
  7. 发起第一次请求的时候,servlet节点被加载实例化。

参考:web.xml文件详解Web启动过程及web.xml配置web.xml官方文档Filter过滤器Listener监听器JSP标准标签库