• ssm web.xml配置解析


    以下为web.xml的配置
    <?xml version="1.0" encoding="UTF-8"?>

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <welcome-file-list>
    <welcome-file>login.html</welcome-file>
    </welcome-file-list>
    <display-name>Archetype Created Web Application</display-name>
    <!-- Spring和mybatis的配置文件 -->
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>
    <!-- 编码过滤器 -->
    <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- Spring监听器 -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 防止Spring内存溢出监听器 -->
    <listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>

    <!-- Spring MVC servlet -->
    <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>

    先摘抄一下一些概念:

    <context-param>的作用: 
    web.xml的配置中<context-param>配置作用 

    1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 
    2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 
    3.容器将<context-param></context-param>转化为键值对,并交给ServletContext. 
    4.容器创建<listener></listener>中的类实例,即创建监听. 

    换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.

    context-param和init-param区别 
    web.xml里面可以定义两种参数: 
    (1)application范围内的参数,存放在servletcontext中(context-param)
    (2)servlet范围内的参数,只能在servlet的init()方法中取得(init-param)

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    ContextLoaderListener的作用就是启动Web容器时,自动装配spring-mybatis.xml的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。

    (实现上下文,引入配置)

    以下详解

    org.springframework.web.context.ContextLoaderListener类实现了javax.servlet.ServletContextListener接口。ServletContextListener接口能够监听ServletContext对象的生命周期,因为每个web应用仅有一个ServletContext对象,故实际上该接口监听的是整个web应用。

    实现该接口的类在web.xml中作为监听器配置后,当web应用启动后,会触发ServletContextEvent事件,调用ContextLoaderListener的contextInitialized(ServletContextEvent sce)方法。

    ContextLoaderListener通过一个ContextLoader对象来初始化Spring容器。在contextInitialized方法中调用contextLoader.initWebApplicationContext(event.getServletContext())。


    web.xml的配置在我理解里面相当告诉容器有哪些需要加载的文件
    <context-param>引入需要加载的配置文件classpath在idea里面就是资源目录的意思,一般默认在WEB-INF目录下
    不清楚的话一般会忘记配置监听器ContextLoaderListener,它的作用就是装配你引入的配置文件的信息,如果不配置在后面的操作中就会发现你始终找不到dao接口的实例(mapper)
    如果配置还是找不到一般就是路径问题,或是在pom.xml引入资源
    <build>
    <finalName>text</finalName>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <source>1.6</source>
    <target>1.6</target>
    </configuration>
    </plugin>
    </plugins>
    <resources>
    <resource>
    <directory>src/main/resources</directory>
    <includes>
    <include>*.xml</include>
    <include>*.properties</include>
    </includes>
    </resource>
    <resource>
    <directory>src/main/java</directory>
    <includes>
    <include>**/*.xml</include>
    </includes>
    </resource>
    </resources>
    </build>
     

    <!-- 防止Spring内存溢出监听器 -->
    <listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
    这个可配可不配
    引入一下api的翻译
    1. /** 
    2.  * org.springframework.web.util.IntrospectorCleanupListener的用途 
    3.  * @see ------------------------------------------------------------------------------------------------------------------- 
    4.  * @see 此监听器出用于主要为了解决java.beans.Introspector导致内存泄漏的问题 
    5.  * @see 此监听器应该配置在web.xml中与Spring相关监听器中的第一个位置(也要在ContextLoaderListener的前面) 
    6.  * @see ------------------------------------------------------------------------------------------------------------------- 
    7.  * @see JDK中的java.beans.Introspector类的用途是发现Java类是否符合JavaBean规范 
    8.  * @see 如果有的框架或程序用到了Introspector类,那么就会启用一个系统级别的缓存,此缓存会存放一些曾加载并分析过的JavaBean的引用 
    9.  * @see 当Web服务器关闭时,由于此缓存中存放着这些JavaBean的引用,所以垃圾回收器无法回收Web容器中的JavaBean对象,最后导致内存变大 
    10.  * @see 而org.springframework.web.util.IntrospectorCleanupListener就是专门用来处理Introspector内存泄漏问题的辅助类 
    11.  * @see IntrospectorCleanupListener会在Web服务器停止时清理Introspector缓存,使那些Javabean能被垃圾回收器正确回收 
    12.  * @see ------------------------------------------------------------------------------------------------------------------- 
    13.  * @see Spring自身不会出现这种问题 
    14.  * @see 因为Spring在加载并分析完一个类之后会马上刷新JavaBeans Introspector缓存,这就保证Spring中不会出现这种内存泄漏的问题 
    15.  * @see 但有些程序和框架在使用了JavaBeans Introspector之后,没有进行清理工作(如Quartz,Struts),最后导致内存泄漏 
    16.  * @see ------------------------------------------------------------------------------------------------------------------- 
    17.  * @create Sep 24, 2013 9:10:09 PM 
    18.  * @author 玄玉<http://blog.csdn.net/jadyer> 
    19.  */  
     

    DispatcherServlet

    DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

    DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

    1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;

    2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);

    3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);

    4、通过ViewResolver解析逻辑视图名到具体视图实现;

    5、本地化解析;

    6、渲染具体的视图等;

    7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

    从以上我们可以看出DispatcherServlet主要负责流程的控制(而且在流程中的每个关键点都是很容易扩展的)。

    工作流程:

    1. Web中,无非是请求和响应;
    2. 在SpringMVC中,请求的第一站是DispatcherServlet,充当前端控制器角色;
    3. DispatcherServlet会查询一个或多个处理器映射(handler mapping)并根据请求所携带的URL信息进行决策,将请求发送给哪个SpringMVC控制器(controller);
    4. 控制器做两件事:一是将数据打包,二是定义逻辑视图名,然后返回给DispatcherServlet;
    5. DispatcherServlet通过视图解析器(view resolver)来将逻辑视图名匹配为一个特定的视图实现,它可能是也可能不是JSP;
    6. 交付数据模型,以视图形式响应给客户,整个请求流程完成。
  • 相关阅读:
    JZOJ1495 宝石
    JZOJ1496 页
    jzoj1497. 景点中心
    2019.8.2总结
    学习进度报告2021/3/19
    学习进度报告2021/3/18
    《学会提问》读书笔记2
    学习进度报告2021/3/17
    学习进度报告2021/3/16
    学习进度报告2021/3/15
  • 原文地址:https://www.cnblogs.com/tanwt/p/8186405.html
Copyright © 2020-2023  润新知