tomcat容器启动过程

tomcat启动过程:




1、tomcat可以部署多个web项目,可以说成tomcat容器
2、tomcat自检,会读取tomcat中web.xml,【自检完:“initialization processed in xxx ms”】
3、tomcat自检完毕后,出现:starting Engine:Apache Tomcat/8.0.23说明开始逐渐加载web项目,每个web项目的WEB-INF目录下的web.xml。tomcat会为此web项目分配一个servert context(servlert上下文),而且每一个web项目只有一个servletcontext上下文,上下文中维护的是map集合,实际上是一个容器存储对象
3、servlet开始解析和执行web.xml:
(1)监听器:servlet规范中定义的一种特殊的组件,用来监听servlet容器产生 的事件,并做响应的处理
容器产生的事件有两大类:
    生命周期相关的事件
    ServletRequestListener   request对象的监听器
HttpSessionListener      session对象的监听器
    sessionCreate方法,  当服务器创建session对象时就调用此方法
sessionDestroyed方法,当session对象销毁时调用此方法
ServletContextListener   application对象的监听器
            绑定数据相关的事件
    当调用了request对象,session对象,
  servletContext(application)对象的setAttribute方法
和removeAttribute方法时产生的事件
ServletRequestAttributeListener
   attributeAdded方法,当给调用request.setAttribute()方法时触发此方法
   attributeRemoved方法,当requset中的对象被移除的时候调用此方法
   attributeReplaced方法,当request中的对象被替换的时候调用此方法
HttpSessionAttributeListener
   attributeAdded方法
   attributeRemoved方法
   attributeReplaced方法
ServletContextAttributeListener
   attributeAdded方法
   attributeRemoved方法
   attributeReplaced方法

   实现监听器的步骤:
    1.新建一个java类要实现上面对应监听器接口
    2.编写对应方法的监听逻辑
    3.在web.xml中,注册监听器<listener></listener>

(2)过滤器(Filter(接口)):过滤器就是servlet的一个特例
      a、什么是过滤器:是servlet2.3规范中定义的一种小型的,可插入的
                web组件,用来拦截servlet容器的请求和响应过程
以便查看,提取或以某种方式操作正在客户端和服务器
之间交换的数据,
过滤器通常是封装了一些web功能的组件,这些功能很重要
但对于处理客户端后发送响应来说不是决定性的
 b、 实现过滤器的步骤:
    1.创建一个java类,实现javax.servlet.Filter;接口
    2.在实现类中doFilter方法添加过滤或拦截的算法
3.在web.xml中添加<filter></filter><filter-mapping></filter-mapping>


 c、 过滤器初始化参数:
   容器启动之后,会创建过滤器对象,然后会调用init方法,在init方法中
   读取web.xml中的初始化参数(包括局部和全局),在执行doFilter方法前
   做数据初始化工作。
  
 d、 过滤器的优点:
    实现代码的“可插拔性”,即增加或减少某个功能模块,不会影响程序的
正常运行,可以将多个相同处理逻辑的模块集中写在过滤器里,方便维护

  e、只要:在需求说明中有这样的词语,“过滤”,“拦截”,“代理”,
        “在原有功能基础上添加新功能”,“在主业务之前,之后添加功能”
那么,第一反应用代理模式实现,或(servlet filter)

   f、   过滤器的生命周期:当服务启动时,会加载web.xml中的内容 如果文件中有<filter>项,那么读取<filter-class>节点中的内容,然后反射实例化对象,过滤器的的声明周期开始。
    如果过滤器类不存在就无法反射,那么就在服务器启动时报异常生命周期开始后会自动调用init方法(只调用一次)        
    如果<url-patten>节点中放置的是/*,代表所有请求都要被此过滤器拦截,只要请求任何资源都会进入此过滤器的doFilter这个方法,在此方法中做相关检测工作,如果检测成功了,就 可以通过filterChain.doFilter(servletRequest,servletResponse);去寻找下一个过滤器,如果下一个过滤器不存在就直接访问对应的资源        
    如果存在,就进入下一个过滤器的doFilter方法,执行完后,依次退回。当服务器正常停止的时候,会调用destroy方法,过滤器声明周期结束。如果有多个过滤器就是过滤器链,执行顺序跟web.xml的加载(生命周期)顺序一样  

(3)servlet:<load-startup>,声明周期在启动时就开始,但没有工作,只有<url-pattern>*.do</url-pattern>(自定义url),只有请求带有.do的url,servlet才会工作,执行service方法。serlvet生命周期开始,会电泳init做初始化工作,会读取加载解析spring-mvc.xml,说明spring mvc的容器出现了,出现initializing Spring FrameWorkServlet'dispatcher'.
spring mvc容器是spring容器的子容器,子容器中存放的是Controller的对象<context:component-scan base-package="com.tarena.controller"/>
可以扫描到以下注解的类
@Controller("userController")
@RequestMapping("user/")
而:
<!-- 解析注解 @RequestMapping,@ResponseBody 加在方法上,能直接解析到类的方法上-->
<mvc:annotation-driven></mvc:annotation-driven>

注意:经过测试,5.0.4版本的spring mvcd jar包不需要使用<mvc:annotation-driven></mvc:annotation-driven> ,因为<context:component-scan/>已经包含了它,而4.3.7版本的却不行,必须写<mvc:annotation-driven>才能扫描到类上方法的url。


@Controller("userController_form")
@RequestMapping("user_form/")
public class UserController_Form {
	
	/**
	 * 
	 * @param userName  对应页面中的表单元素中的input name="userName"
	 * @param userPassword对应页面中的表单元素中的input name="userPassword"
	 * @return  ModelAndView对象给InternalResourceViewResolver 解析
	 */
	@RequestMapping(value="login1.do",method=RequestMethod.POST)
	public ModelAndView login1(String userName,
			                  String userPassword) {
		ModelAndView mv=new ModelAndView();
		//获取页面的数据,springmvc帮程序员已经做了
		System.out.println("userName="+userName+
				        "   userPassword="+userPassword);
		//由程序员自己实现具体的登录业务
		boolean flag=true;
		
		//根据业务的返回结果做跳转和绑定数据
		//根request.setAttribute("msg","登录成功")
		mv.addObject("msg", "登录成功");
		mv.setViewName("success");
		
		return mv;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值