web开发时,一些比较重要的服务类,框架自带类,及框架的配置读取

我们都知道java是动态语言,用java开发的语言必须运行在web容器内,最常用的是tomcat,在开发web项目是还经常用到开源框架如JSF、struts、spring等,但当一个web应用部署启动时都涉及那些过程以及那些主要类确知之甚少,下文只有分析,tomcat、jsf、struts、sping等重要组件的启动过程及主类。

1 tomcat

博文TOMCAT原理以及处理HTTP请求的过程、ContextPath ServletPath中已经详细的介绍了tomcat的各个组件,及url请求的处理过程,这里不再详述

只需记住,tomcat会为每一个web应用创建一个Context容器,同时为每个servlet创建一个wrapper容器。

1.1 - Context /tomcat中实现了一个StandardContent

一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成 
Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类 
当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类 
如果找到,则执行该类,获得请求的回应,并返回 

此外StandardContent还必须关联一个session管理器。在tomcat中管理器主要是管理StandardSession,这个类继承了servlet.http.HttpSession接口

此外我们知道tomcat在接到http请求时会创建request和response,在tomcat中会转为servletrequest和servletresponse对象,并在调用servlet的service方法的时候作为参赛传入。

StandardContext的start方法进行初始如果想了解更多关于StandardContext请看博文tomcat中StandardContext

注意这里的standardContext对象是容器中的用于完成web应用的部署的。与ServletContext是不同的概念没有可比性。

1.2 web.xml中的配置项

Servlet、filter、listener,servlet-mapping等,


2 servlet

2.1httpservlet

servlet是javaEE规范,我们自己写一个servlet部署到web容器的时候必须继承httpservlet类。类中定义了如init、service、doget、dopost等方法。

2.2 ServletContent:

ServletContext接口表示一个web应用的上下文。可以想象成一个web一个能用的共享数据区域,该区域保存整个web共享数据。

1.1 Servlet容器何时创建ServeltContext接口实现类

当一个web应用启动的时候,就会创建该ServletContext接口的实现类。我们可以在根据需求,读写ServletContext这个web共享区的数据,那么如何获得ServletContext这个实例呢?下面提供了两种方法

1.2 如何获得ServletContext接口实例

方法1:

可以通过ServletConfig接口的getServletContext()方法获得

方法2:

通过GenericServlet抽象类的getServletContext()方法获得,不过这个方法其实也是调用了ServletConfig的getServletContext()方法

2.3ServletConfig

容器初始化一个servlet时,会为这个servlet建一个唯一的ServletConfig。容器从DD读出Servlet初始化参数,并把这些参数交给ServletConfig,然后把ServletConfig传递给servlet的init(ServletConfig config)方法。也就是说容器只有在创建servlet实例时才会读DD文件中的init-param,并且在servlet一生中只读一次。

在实际应用过程中,为了便于修改我们并不希望直接把某一变量硬编码到servlet类中,这个时候就会用到ServletConfig接口。我们可以把某些变量放在DD(web.xml)中,这样如果我们要修改某一值,可以直接改动DD文件即可。

在这里我们来看看ServletConfig中的方法:

getInitParameter(String   name):根据给定的初始化参数,返回匹配的初始化参数值。
getInitParameterNames():返回一个Enumeration对象,里面包含了所有的初始化参数。
getServletContext():返回一个servletContext()对象.
getServletName():返回servlet的名字,即web.xml中的<servlet-name>的子元素的值。如果没有配置这个子元素,则返回servlet类的名字。


2.4 HttpSession

httpsession代表了一个Session回话,在tomcat中Session管理器用于维护Session,可以调用request.getsession方法得当session

2.5 HttpServletrequest与HttpServletresponse

代表了与一个客户端的一次request请求和response返回,这两个对象首先由tomcat创建,然后包装成HttpServletrequest与HttpServletresponse对象传给Servlet


3 JSF框架

JSF框架的主要实现类是javax.faces.webapp.FacesServlet,这个实现类作为一个servlet在web.xml中配置,所有的请求都映射到这个servlet来进行处理。FacesServlet在MVC中作为控制器部分,主要是FacesContextFactory来产生一个FacesContext的实例,之后再获得生命周期实例,进行生命周期状态处理。具体的生命周期请看博文:JSF生命周期总结

在使用JSF框架时如何获得Servlet应用的各个类
  1获得Servletcontext=(ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
  2获得HttpServletResponse=HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();


4 struts2

struts2的主要实现类是org.apache.struts2.dispatcher.FilterDispatcher,这个类是作为一个Filter在web.xml中配置的。

5 spring

spring的主要实现类是org.springframework.web.context.ContextLoaderListener,在web.xml中作为一个listener配置的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值