您的位置:首页 > 其它

Servlet(一)——刨根问底

2014-02-28 21:20 232 查看
Servelt在JavaEE开发中,占据着举足轻重的作用,起到了连接程序和服务器的重要功能。为何称其为规范呢?它规范了那些东西呢?对于Servlet对象又该如何认识它,了解它呢?


我们先来看一张图片:



这是一张对于我们JavaWeb项目运行流程的简化图,这里边出现了浏览器,服务器,项目程序,数据库四个实体,在这四个实体中间出现了http协议,Servlet规范,JDBC规范三个规则。JDBC前边介绍过,是由sun制定,各种数据库厂商实现,J***A开发程序员调用的,在数据库厂商和Java程序员中间起到了规范的作用,需要两方都去遵守。而http协议则是由W3C制定的协议,需要浏览器厂商和服务器厂商来实现。而13规范之一Servlet则是由Sun制定,我们Java程序员来实现的,所以说是非常重要的。有了Servlet这套规范,我们的将我们编写的程序部署到Tomcat,weblogic,JBoss等服务器中,因为我们有这套规范约束着呢!下边我们来看一下Servlet的相关知识。

一,Servlet是什么?

简单来说Servlet就是满足我们Servlet规范的“服务器端的小Java程序”。
/**
	 * 需要我们实现J2ee中的Servlet接口(规范)
	 * @author Administrator
	 */
	public class ServletExample implements Servlet {
	
		//在构造方法执行结束之后,对象创建完毕,init方法马上执行
		//只执行一次。这个方法我们称作初始化方法。
		//该方法调用的时候Servlet对象刚刚创建完毕,相当于人一生开始的受教育
		@Override
		public void init(ServletConfig arg0) throws ServletException {
		}
		
	
		//这是一个Servlet对象的核心业务方法。我们主要把业务编写到这个方法中,用户请求一次,执行一次。
		//相当于人受完教育后进行工作为人民服务
		@Override
		public void service(ServletRequest arg0, ServletResponse arg1)
				throws ServletException, IOException {
		}
		
		//当服务器容器关闭的时候,或者长时间没有用户再去访问这个Servlet
		//Servlet对象所占用的内存即将被释放,释放之前会由Tomcat容器自动调用该方法。
		//该方法在Servlet对象的内存被回收之前执行。
		//该方法执行的时候Servlet对象还没有被销毁。
		//该方法也是只执行一次。相当于人一辈子的结束。
		@Override
		public void destroy() {
		}
	
		//下边两个是关于Servlet信息的方法
		@Override
		public ServletConfig getServletConfig() {
			return null;
		}
	
		@Override
		public String getServletInfo() {
			return null;
		}
	}


当然在Servlet+Jsp开发时,都是做的B/S开发,在JavaEE.Servlet.Http包下的HttpServlet已经实现了Servlet接口,我们只需要继承HttpServlet,根据我们页面传输的方式重写里边的doPost或者doGet方法,就可以直接写我们的业务程序了。是非常方便的。


二,Servlet的生命周期:



这里需要我们注意的是:Servlet对象,在服务器中是在“单实例多线程环境下”运行的,所以会存在线程安全的问题。

三,讲了Servlet是什么,生命周期,最后我们看一下Servlet的创建本质过程:

首先说一下,每使用一个Servlet时,我们需要在web.xml中进行相关的配置:
<!-- 配置servlet -->
		<servlet>
			<servlet-name></servlet-name><!-- 上下关联的名字 -->
			<servlet-class></servlet-class><!-- servlet类的真实路径 -->
		</servlet>
		<servlet-mapping>
			<servlet-name></servlet-name><!-- 上下关联的名字 -->
			<url-pattern></url-pattern><!-- servelt的访问路径 -->

</servlet-mapping>


创建过程需要按照它的生命周期来看:

1,创建:通过用户的请求路径,解析web.xml文件,获取Servlet的完整类名,通过反射进行实例化对应的Servlet对象:
Class c = Class.forName(“Servlet类全名”);

Servlet servlet = (Servlet)c.newInstance();


2,创建后进行初始化,调用init方法
servlet.init(config); //初始化方法,对象第一次被创建之后调用。只执行一次。(初始化时刻)

3,用户调用时,执行service方法:
servlet.service(request,response); //核心业务方法,用户访问一次必然执行一次。(执行多次)
……..
4,销毁:

servlet.destroy();





正好对应着上边的生命周期,这里想说的就是Servlet也是通过反射机制进行的创建,明白我们底层的创建过程。

Servlet在开发中起着举足轻重的作用,明白它的原理对我们以后的开发学习非常有用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: