SERVLET JSP总结 一、 SERVLET的生命周期(以Tomcat6.0举例) a) servlet是生存在容器中的 b) Tomcat在启动时候,加载其安装目录下的con/server.xml文件 c) 解析server.xml,根据解析内容(监听服务的端口,销毁的端口,重定向的端口等)进行监听。 d) 同时如果server.xml 中存在Context标签,会解析Context标签中的内容(path和docBase,reloadable等属性),并创建一个ServerContext对象 e) 根据docBase指定的内容找到关联的WebApplication的目录,并找到WebApplication下WEB-INF/web.xml文件对其进行解析 f) 如果解析到成对的servlet标签和<servlet-mapping>标签,会创建一个ServletConfig对象,在创建此对象的时候会将以创建的ServletContext对象的引用传给ServletConfig对象,并将解析的内容servlet-name,servlet-class,url-pattern存储到ServletConfig对象中,而且对此ServletConfig对象只属于某个Servlet(还未被创建),也就是说只能在此Servlet拿到;如果存在context-param标签,会将其标签中的参数名和参数值保存到已创建的ServletContext中,由于ServletContext是一个全局对象,所以在任何的Servlet中都可以拿到保存到其中的参数以及值 g) 通过Server.xml文件解析完所有Context标签映射的WebApplication,如果正常,Tomcat就在指定的端口进行监听,提供对外的HTTP协议服务。 h) 客户端开始请求,当客户端通过HTTP协议进行请求,Tomcat根据请求的URL,会在Tomcat的内部将客户端的请求以及要响应信息分别封装成Request和Response对象,如果客户端请求的资源存在,根据ServletConfig对象中保存的信息,通过URI找到对应的class字符串会创建一个对应的Servlet对象,紧接着调用init(ServletConfig config)方法,内部调用init()方法,随之调用Servlet的Service(ServletRequest,ServletResponse)对象,在内部会将传进来的两个对象强制转为HttpServletRequest和HttpServletResponse对象,并调用其自定义的protected Service(HttpServletRequest HttpServletResponse),根据传进来的HttpServletRequest对象,解析客户端请求的方式(GET,POST,PUT);响应客户端的请求,一次请求响应完成之后客户端和服务器端的连接就断开了,下一次如果有客户端请求同样的URL,又是一次新的请求,又是不同的Request和Response;Tomcat会直接调用已经实例化的Servlet对象,而且不会调用init方法,并调用其Service()方法,来处理客户端的请求。、 i) 如果此Servlet被删除或者Servlet生存的WebApplication停止,则容器会调用其destroy方法,至此Servlet的生命结束。 二、 JSP产生 a) Tomcat以多线程的方式处理客户端的请求 b) 客户端以HTTP协议访问jsp页面的时候,JSP容器会以流的方式将JSP转译成对应的Java文件,此Java文件同样继承至HttpServlet,也是一个Servlet。 c) 在此生成的Java类中,容器会创建对应的对象,提供使用;然后将此Java文件编译成class文件,由于此Java类同样是一个Servlet,而且是由容器创建,所以同样由容器调用响应客户端的请求。 d) 当有客户端请求同样jsp页面时,JSP容器会将编译好的class文件创建对象响应客户端的请求,而不再重新转译jsp页面,效率上相对第一次访问要高。 三、 总结过程中遇到的问题 a) JSP页面编译好的class,然后创建对象响应客户端请求,该对象是否是在响应一次客户端的请求完成之后就被销毁了?它是否有自己的ServletContext? b) Servlet和JSP编译后的Servlet在生命周期上有什么区别? c) 如果在server.xml里没有Context标签,也就是说:我们的WebApplication放在Tomcat安装目录的webapps目录下,此时应用在加载时候和在Context表签指定docBase的加载方式相同? d) Tomcat在内部是怎样将JSP文件转译后的Java文件编译成class文件的? 回答: a) jsp页面在客户端第一次访问的时候会转译成与之对应的Java文件,然后编译成class文件,响应客户端的请求,如果有客户端有相同的请求时,Tomcat容器,会通过编译好的class去响应客户端的请求,JSP本质上就是Servlet,当然会有自己的ServletContext。 b) 同是Servlet,本质上没什么区别,JSP编译好的class文件创建完成对象响应客户端的请求完成之后,在内存中就不存在了,而Servlet不是。 c) Tomcat默认应用发布的目录,自己肯定可以找到,会加载里面的应用 d) Java的相关命令 ServletContext是和WebApplication相对应的,只要WebApplication被加载,这就会创建此对象
posted on 2010-12-23 21:11 freehell 阅读(157) 评论(0) 编辑 收藏 举报
Powered by: 博客园 Copyright © 2024 freehell Powered by .NET 9.0 on Kubernetes