1: servlet生命周期:  Servlet加载    ->   实例化->   服务 ->  销毁

2:Servlet重要函数:

  init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

  service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。对请求方式进行了匹配,比如doGet, doPost,doput, dodelete,必须实现doGet, doPost

  destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、ServletResponse 强转为HttpRequest 和 HttpResponse。

3:WEB容器创建servlet对象的时机(  Tomcat是web容器 也是Servlet容器):

Servlet容器启动时:读取web.xml 配置文件中的信息,构造指定的Servlet对象,创建servletconfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。

在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户请求创建httpRequest, HttpResponse对象,从而调用Servlet对象的service方法。

<load-on-startup>1</load-on-startup>// tomcat启动的时候就实例化servlet;  否则要等到第一个请求servlet的时候才会初始化servlet.

<servlet-name>Init</servlet-name><servlet-class>org.xl.servlet.InitServlet</servlet-class><load-on-startup>1</load-on-startup></servlet>

下面是指定Servlet请求的映射:

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class> // 类名称
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern> // 指定什么样的URL可以访问前面定义的servlet
</servlet-mapping>

4: Spring  MVC 6个步骤:

1) 客户发起HTTP请求。

2)dispatcherservlet拦截请求,寻找恰当的映射处理器处理请求。

dispatcherservlet 间接的继承了HttpServlet, 是 SPring MVC的入口,实际上是一个Servlet, 在web.xml中定义,并且配置URL-mapping.

  处理器映射(将web请求映射到正确的处理器上)

可以用Spring提供的,也可以自己定义。

dispatcherServlet首先将请求交给处理器映射,由它对请求进行检查并找到一条匹配的处理器执行链,然后执行这条链上定义的处理器和拦截器。

最常用的处理器映射是:

BeanNameUrlHanderMapping(默认) :   定义URL和哪个controller能mapping上。

SimpleUrlHandlerMapping :   指定URL和controller的bean名字的mapping.

3)dispatcherservlet根据处理器映射HandlerMapping,来选择并决定把请求发给哪个Controller

4)Controller接收到DispatcherServlet请求后,以ModelAndView的形式返给DispatcherServlet,( 典型的情况是以JSP的形式返回。

5)返回的不一定是JSP,可能是一个逻辑视图名,通过它可以找到实际的视图。 dispatcherservlet通过查询viewResolver对象将

从controller逻辑视图名解析为一个具体的视图实现。

6)dispatcherservlet找到视图,将视图返回给客户端,否则抛出异常。

视图解析器:

Spring处理视图的两个重要类ViewResolver和View。

UrlBasedViewResolver: 指定前缀和后缀 + view 名称 = 就可以得到view的具体路径了。(并且和前台的具体用的技术结偶)

5: web.xml定义如下内容:

  dispatcherServlet定义: 略
servlet mapping: 略
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<!--设置监听器-->
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

作用:该元素context-param用来声明应用范围(整个WEB项目)内的上下文初始化参数:

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

    param-value 设定的参数名称的值

初始化过程:

(1)在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。

(2)接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。

(3)接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。

(4)容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。

(5)在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。


(6)得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。

   由上面的初始化过程可知容器对于web.xml的加载过程是context-param     >>     listener     >>    filter     >>    servlet

mvc-dispatcher-servlet.xml的内容如下:

<!--指定注入Bean时Spring要查找的包-->
<context:component-scan base-package="com.spring3.controller" />
<!--配置视图解析器,使用InternalResourceViewResolver 类作为视图解析器。
Controller回传ModelAndView,DispatcherServlet将其交给ViewResolver解析。-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--指定目录前缀-->
property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<!--指定文件后缀-->
<property name="suffix">
<value>.jsp</value>
</property>
</bean>

用注解 “@Controller”  和 在XML中定义bean的效果是一样的,都是交给Spring容器管理bean.

@RequestMapping 将web请求mapping到controller.

   类级别:

方法级别:

6:  如何将Spring 框架集成到Web应用中。

在web.xml中声明ContextLoaderListener和DispatcherServlet即可。

DispatcherServlet: 接管Servlet

ContextLoaderListener: 用来初始化参数这是Spring配置文件的位置和名称,默认情况使用Servlet名称-servlet.xml命名,默认在web-INF文件夹下。

7: handlerMapping

  (1)BeanNameUrlHandlerMapping:  用URL和bean的name进行匹配。

浏览器输入:http://localhost:8888/SpringWorld/user/login.do?username=liuxi&pwd=8888

  <bean name="/user/login.do" class="com.spring.web.controller.LoginController"/>
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

(2)SimpleURLHandlerMapping: 也是用URL和bean name匹配,但是比BeanNameUrlHandlerMapping功能多

<beans ...>

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/welcome.htm">welcomeController</prop>
<prop key="/*/welcome.htm">welcomeController</prop>
<prop key="/helloGuest.htm">helloGuestController</prop>
</props>
</property>
</bean> <bean id="welcomeController"
class="com.mkyong.common.controller.WelcomeController" /> <bean id="helloGuestController"
class="com.mkyong.common.controller.HelloGuestController" /> </beans>

(3)RequestMappingHandlerMapping:  针对注解  @RequestMapping

(4)<context:component-scan base-package="com.myPackage"/>     告诉SPring扫描这个包,因为这个包是用注解定义的controller , 而不是 XML中的bean.

mvc:annotation-driven 即告诉 spring mvc 使用注解的方式进行URL路由配置。controller 类上加上 @Controller 告诉 spring mvc 此类是 controller,同时方法上的 @RequestMapping 注解告诉 spring mvc 这里有一个请求映射到这个方法。

8: Spring 核心配置文件:

1.     <!-- 配置spring核心servlet -->
2. <servlet>
3. <servlet-name>spring</servlet-name>
4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
5. <load-on-startup>1</load-on-startup>
6. </servlet>
7. <!-- url-pattern配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问 -->
8. <servlet-mapping>
9. <servlet-name>spring</servlet-name>
10. <url-pattern>/</url-pattern>
11. </servlet-mapping>
1. <context-param> <!-- context-param元素声明应用范围内的初始化参数 -->
2. <param-name>contextConfigLocation</param-name>
3. <!-- 应用上下文配置文件 -->
4. <param-value>/WEB-INF/spring-servlet.xml</param-value>
5. </context-param>
6. <listener>
7. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
8. </listener>
9. spring-servlet.xml 用于开启基于注解的spring MVC 功能,照web.xml中设定,路径为WEB-INF下。
<beans>
1. <!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射-->
2. <mvc:annotation-driven />
3. <!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean -->
4. <context:component-scan base-package="com.mvc.rest" />
5. <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 -->
6. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/view/" p:suffix=".jsp" />
</beans>

9:  ContextLoaderListener 作用:

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

ApplicationContext.xml这个配置文件:如果在web.xml中不写任何配置信息,默认的路径是/WEB-INF/applicationContext.xml。  如果要自定义问价名称和路径,可以在web.xml中这样配置:

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/applicationContext-*.xml <!-- 如果有多个文件,可以用逗号分隔; 这里用的通配符>
</param-value>
</context-param>

Spring学习五的更多相关文章

  1. spring学习(五) ———— 整合web项目(SSM)

    一.SSM框架整合 1.1.整合思路 从底层整合起,也就是先整合mybatis与spring,然后在编写springmvc. 1.2.开发需求 查询商品列表(从数据库中查询) 1.3.创建web工程 ...

  2. Spring学习五(JDBC支持)

    Spring的jdbc支持 1配置db.properties,将有关JDBC的信息载入 2bean文件配置数据源,这里用e3p0作为数据源载入db.properties 3配置template的bea ...

  3. Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)

    在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...

  4. Spring学习五----------Bean的配置之Bean的生命周期

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...

  5. Spring学习(五)--构建Spring Web应用程序

    一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚 ...

  6. Spring学习(五)

    自动装备 1.定义 自动装配(autowiring): 将某个Bean实例中所引用的其它的Bean自动注入到当前Bean实例中 自动装配就是指由Spring来自动地注入依赖对象,无需人工参与. 自动装 ...

  7. spring学习五:Spring Bean 定义继承

    Bean 定义继承 bean 定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等. 子 bean 的定义继承父定义的配置数据.子定义可以根据需要 ...

  8. spring学习 五 依赖注入的方式

    依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<b ...

  9. spring 学习(五):spring 事务

    spring 学习(五):spring 事务 事务概要 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同 ...

随机推荐

  1. 【P2514】工厂选址(贪心)

    看到题了不首先应该看看数据范围确定一下算法么,这个题的数据范围大约可以支持到O(nmlogm),所以肯定不是搜索什么的,DP貌似至少也要n^2m,所以可以想一些其他的.对于题目的输入,我们发现这些输入 ...

  2. 【bzoj1899】[Zjoi2004]Lunch 午餐(贪心+dp)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1899 显然为了节省时间,吃饭慢的人要先打饭.于是我们可以先把所有人按吃饭时间排序,于是 ...

  3. iOS Font

    1. 非常棒的查看字体样貌网站: http://iosfonts.com 1. 查看设备支持字体: NSArray *familyNames = [NSMutableArray arrayWithAr ...

  4. HBase-集群状态信息

    代码如下 package com.hbase.HBaseAdmin; import java.io.IOException; import java.util.Collection; import j ...

  5. 初探MyBatis之HelloWorld(二)

    二.不使用 XML 构建 SqlSessionFactory 不使用xml构建SqlSessionFactory的话,就要用java代码来连接数据库.我这里直接new DataSorce()接口实现g ...

  6. hdu 5895 Mathematician QSC 指数循环节+矩阵快速幂

    Mathematician QSC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  7. Myeclipse快捷键(二)

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ ...

  8. Node.js模块、包的学习笔记

    什么是模块 模块是node应用程序的基本组成部分,文件和模块是一一对应的,就是说,一个node文件就是一个模块,这个文件可能是javascript代码.json或者是编译过的c++扩展等,如: var ...

  9. 使用eclipse逆向工程开发hibernate项目

    在项目设计时,要么根据需求分析建立实体类,然后正向生成数据库表:要么先进行数据库表设计,然后逆向生成实体类.也就是说,不会完成一方的设计后再花时间去匹配建立另一方,这么做的原因是: 1.如果不使用正向 ...

  10. 11-THREE.JS 相机始终朝向某个物体

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...