二、web.xml的简单配置介绍1

1、启动Web项目时,容器回去读web.xml配置文件里的两个节点<context-param>和<listener>
2、接着容器会创建一个servletContext(上下文)应用范围内都能使用这个上下文
3、接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
4、通过<listener>创建监听
5、在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这种方法中能够通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比方说数据库连接的关闭。
6、得到这个context-param的值之后,你就能够做一些操作了.注意,这个时候你的WEB项目还没有全然启动完毕.这个动作会比全部的Servlet都要早。

一、

<span style="font-size:18px;"><context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/spring/application-datasource.xml
</param-value>
</context-param></span></span>

该元素用来声明应用范围内的上下文初始化參数(整个web项目中)比如对数据库连接池的配置等

param-name 设定上下文的參数名称。名称必须唯一

param-value 设定的參数名称的值  指定响应的xml文件名称,假设有多个文件能够写在一起用“,”分隔

能够採用通配符形式applicationContext-*.xml  能够将此类开头的文件所有加载

1、能够直接将之放到/web-inf下

2、放到classpath下 classpath:/spring/application-datasource.xml

如:

<span style="font-size:18px;"><!-- Context Configuration locations for Spring XML files -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
</context-param> </span><span style="font-size: 14px;">
</span></span>

以此供web容器载入

二、

<span style="font-size:18px;"><listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener></span></span>

listener标签是用于监听的,ContextLoaderListener实现了ServletContextListener接口,能够监听全部的servlet、session、request等接口。

ContextLoaderListener的作用就是启动Web容器时。自己主动装配ApplicationContext的配置信息,它实现了ServletContextListener这个接口,在web.xml中配置这个监听器,启动容器时,就是默认运行它的实现方法。

ServletContext:每一个web应用都有一个servletContext与之相关.servletContext对象在应用启动的时候被创建,在应用关闭的时候被销毁。

ervletContextListener: 使用listener接口。开发人员可以在为client请求提供服务之前向ServletContext中加入随意的对象。

这个对象在ServletContext启动的时候被初始化,然后在ServletContext整个执行期间都是可见的。

该接口拥有两个方法例如以下所看到的:

三、
<filter>
<filter-name></filter-name>
<filter-class></filter-class>
</filter>

filter运行是依照web.xml配置的filter-mapping先后顺序进行运行
<span style="font-size:18px;">    <filter>
<filter-name>Character Encoding</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> </filter> <filter-mapping>
<filter-name>Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></span><span style="font-size: 14px;">
</span>

以上是防止乱码

<span style="font-size:18px;"><filter>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
<init-param>
<param-name>entityManagerFactoryBeanName</param-name>
<param-value>entityManagerFactory</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></span><span style="font-size: 14px;">
</span>

在Java Web项目中使用Hibernate常常会遇到LazyInitializationException。

这是由于controller和model层(java代码)将通过JPA的一些启用了延迟载入功能的领域(如用getRefrence()方法或者在关联关系中採用fetch=FetchType.LAZY)返回给view层(jsp代码)的时候,由于载入领域对象的JPA Session已经关闭,导致这些延迟载入的数据訪问异常。

这时就能够使用OpenEntityManagerInViewFilter来将一个JPAsession与一次完整的请求过程相应的线程相绑定。

假设没使用OpenEntityManagerInViewFilter,session会在service.find()方法后就被关闭。用了以后session在整个view层结束后才关闭。

四、

<span style="font-size:18px;"><servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping></span><span style="font-size: 14px;">
</span>

DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中訪问点。并且负责职责的分派。并且与Spring IoC容器无缝集成,从而能够获得Spring的全部优点。

详细请參考第二章的图2-1。

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

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

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

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

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

5、本地化解析;

6、渲染详细的视图等;

7、假设运行过程中遇到异常将交给HandlerExceptionResolver来解析。

load-on-startup:表示启动容器时初始化该Servlet;

url-pattern:表示哪些请求交给Spring WebMVC处理, “/” 是用来定义默认servlet映射的。也能够如“*.html”表示拦截全部以html为扩展名的请求。

DispatcherServlet默认使用WebApplicationContext作为上下文。Spring默认配置文件为“/WEB-INF/[servlet名字]-servlet.xml”。

以上是看了众多关于web.xml文章中整理出来的easy理解的部分。

Spring MVC 的 研发之路 (二)的更多相关文章

  1. Spring MVC 使用介绍(十二)控制器返回结果统一处理

    一.概述 在为前端提供http接口时,通常返回的数据需要统一的json格式,如包含错误码和错误信息等字段. 该功能的实现有四种可能的方式: AOP 利用环绕通知,对包含@RequestMapping注 ...

  2. Spring MVC和Struts2的比较(二)

    1.Spring MVC的controller+command object模式比Struts2的Action模式更安全一些.而在Struts2中,自动数据绑定发生在Action对象上.这样,在Act ...

  3. spring mvc DispatcherServlet详解之二---request通过Controller获取ModelAndView过程

    整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet通过request获取控制器Controller的过程,现在来讲解DispatcherServletDisp ...

  4. 使用IntelliJ IDEA和Maven管理搭建Web开发环境(以Spring MVC为例)(二)

    前言:在使用IntelliJ IDEA和Maven管理搭建Web开发环境(以Spring MVC为例)(一)中已经介绍了如何对web基础环境进行搭建,这里主要演示,如何对spring环境进行搭建,然后 ...

  5. spring MVC之注解开发控制器(二)

    开发表单控制器 在传统的Spring MVC开发方法中,是通过扩展SimpleFormController类来创建简单的表单控制器.这样就定义了基本的表单处理流程,并允许通过覆盖几个生命周期方法来定制 ...

  6. 【FreeMarker】Spring MVC与FreeMarker整合(二)

    前一篇介绍了FreeMarker的基本使用,本例介绍Spring MVC与FreeMarker整合 不熟悉项目搭建,可参考 [FreeMarker]FreeMarker快速入门(一) 整合 1.新建S ...

  7. Spring MVC源码分析(二):SpringMVC的DispatcherServlet的设计与实现

    概述   DispatcherServlet是SpringMVC的一个前端控制器,是MVC架构中的C,即controller的实现,用于拦截这个web应用的所有请求,具体为在web.xml中配置这个s ...

  8. Spring MVC 的 研发之路

    翻译器:intellij idea 一个.创建spring mvcproject   一个. 二. 三. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcX ...

  9. Spring MVC基本配置和实践(二)

    1. springmvc: 是一个表现层框架,作用是从请求中接收传入的参数,将处理后的结果数据返回给页面展示 2. ssm整合: 1)Dao层 pojo.mapper接口.mapper映射文件(使用逆 ...

随机推荐

  1. layui select change

    <select lay-filter="test"></select> layui.use([ 'form'], function() { var form ...

  2. vue如何根据返回的值对元素进行样式渲染

    1.最终显示样式: 需要:根据任务状态值,显示不同颜色的原点表示任务状态,以及对优先级的数据,进行☆标记 2.代码实现: 在<el-table-column>中需要显示的内容前面,添加图标 ...

  3. [luogu] P3294 [SCOI2016]背单词 (贪心)

    题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,"我怎么样才能快点学完,然后去玩三国杀呢?".这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他 ...

  4. C# 发布APP修改APP图标以及名称

    很多时候,我们用C#编程后,都要对我们的上位机生成的图标跟名字进行修改,下面我就 VS2015 怎么修改做个说明. 1.打开项目属性 2.打开应用程序的属性界面,对相应的地方进行修改就可以了 3.修改 ...

  5. 【codeforces 812A】Sagheer and Crossroads

    [题目链接]:http://codeforces.com/contest/812/problem/A [题意] 有一个小箭头指的那个地方; 指的就是人行道路; 然后p[i]指的就是那4个人行道是不是绿 ...

  6. 使用hbase遇到的问题

    1.在使用hbase的时候 有很多问题,其中一个 使用sqoop import 从mysql 向hbase导入数据,报错:Error: java.lang.RuntimeException: Coul ...

  7. 洛谷 P3507 [POI2010]GRA-The Minima Game

    P3507 [POI2010]GRA-The Minima Game 题目描述 Alice and Bob learned the minima game, which they like very ...

  8. 不用while if 循环求 1到n的和,还用到了!!这样的运算符

    很好的题目.开始我也没有想出来. 不用while if 循环求 1到n的和 给了很多种解法,第一种是构造函数,然后累加static变量 第二种是虚函数,有父类子类,父类的结束,然后用 !!n来让 n不 ...

  9. Sybase数据库工具DbVisualizer乱码问题

    使用DbVisualizer来操作sybase数据库的时候,会出现乱码问题,中文变成  '口口'. 解决的方法例如以下: 将这三个字体都改成 "宋体"  或者改成 "PM ...

  10. Servlet体验之旅(二)——Session、Cookie

    我们知道Session和Cookie都是用于会话跟踪的,仅仅是实现的方式不大一样,那么他们到底有什么不同呢?以下跟着我脚步来了解一下: Session.Cookie的含义: Session 一种ser ...