关于 Servlet 和 Web
文中也只是对Servlet和Web作简单的了解,有个初步的认识,深入的内容有待于进一步去研究。 T. T _ . _
Servlet
    Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一个Servlet 就是 Java 编程语言中的一个类。 
    Servlet是一种独立于操作系统平台和网络传输协议的服务器端Java应用程序,运行于支持Java的应用服务器中,是Java Web技术的核心基础。Servlet与传统Java应用程序的最大不同在于,它不是从命令行启动的,而是由Java虚拟机的web服务器进行加载。 
功能: 扩展基于HTTP协议的Web服务器的功能,交互式地浏览和修改数据,生成动态Web页面内容。
生命周期:Servlet加载 - -> 实例化 - -> 服务 - -> 销毁
- [1] init():服务器装入Servlet时执行该方法,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
 - [2] service():Servlet的核心,负责响应客户的请求。每当一个客户机请求一个HttpServlet对象,该对象的Service()方法就要调用,并以一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法,默认的服务功能是调用与HTTP请求的方法相应的do功能。
 - [3] destroy():当Servlet对象退出生命周期,服务器端停止且卸载Servlet时执行该方法,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此在调用destroy()方法时,要确保这些线程已经终止或完成。
 注:在Servlet的生命周期中,仅执行一次init()和destroy()方法。
工作原理:
- [1] 首先简单解释一下Servlet接收和响应客户请求的过程:客户发送一个请求,Servlet调用service()方法对请求进行响应。通过源代码看出,service()方法中对请求的方式进行了匹配,选择调用doGet, doPost等方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中没有doGet(),doPost()这些方法,HttpServlet中定义了这些方法,但是都返回error信息,所以每次定义一个Servlet时,都必须实现doGet()或doPost()这些方法。
 - [2] 每一个自定义的Servlet都必须实现Servlet接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet生命周期,分别是init(), service(), destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet, 实现了Servlet接口。HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以定义Servlet时只需继承HttpServlet即可。
 - [3] Servlet接口和GenericServlet不特定于任何协议,HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、响应ServletResponse 强转为HttpRequest 和 HttpResponse。
 
Servlet容器
主要任务:管理Servlet的生命周期。
Servlet 与 Servlet 容器相互依存 ,彼此又相互独立发展,接口是连接Servlet和Servlet容器的关键,从技术角度来说是为了解耦,通过标准化接口来相互协作。
创建Servlet对象:
- [1] Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,并将ServletConfig对象作为参数来调用Servlet对象的init()方法。
 - [2] Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet对象的service()方法。
 
在 Web 应用程序中,一个 Servlet 在一个时刻可能被多个用户同时访问。这时 Web 容器将为每个用户创建一个线程来执行 Servlet。如果 Servlet 不涉及共享资源的问题,不必关心多线程问题。但如果 Servlet 需要共享资源,需要保证 Servlet 是线程安全的。
参考: 
http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.html 
http://www.ibm.com/developerworks/cn/java/j-lo-servlet/
与 Applet 比较
Web
Web容器:管理和部署Web应用,更多的是跟基于HTTP的请求打交道。 
 区别于应用服务器:可以部署EJB应用,可以实现容器管理的事务,更多的跟数据库、其它服务打交道。
关于 Servlet 和 Web的更多相关文章
- Java Servlet与Web容器之间的关系
		
自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...
 - servlet和web容器之间的关系
		
Java是一种动态加载和运行的语言.也就是说当应用程序持有一个类的地址(CLASSPATH)和名称(包名和类名)的情况下,可以在程序运行期 间任何时候加载这个类,并创建和使用该类的对象.Servlet ...
 - Servlet中Web.xml的配置详解
		
1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码. DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用 ...
 - Servlet中web.xml 以及 <url-pattern>总结
		
web.xml中添加Servlet配置信息 使用Eclipse创建Servlet,会自动的在WEB-INF下的web.xml中声明,但是有的时候需要我们手动的写入配置信息,以下就是Servlet在we ...
 - 支持JSP和Servlet的Web服务器
		
支持JSP和Servlet的Web服务器 1.Tomcat 服务器 目前非常流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型.轻量级的支持JSP和Servle ...
 - 各种容器与服务器的区别与联系 Servlet容器 WEB容器 Java EE容器 应用服务器 WEB服务器 Java EE服务器
		
转自:https://blog.csdn.net/tjiyu/article/details/53148174 各种容器与服务器的区别与联系 Servlet容器 WEB容器 Java EE容器 应用服 ...
 - Eclipse创建第一个Servlet(Dynamic Web Project方式)、第一个Web Fragment Project(web容器向jar中寻找class文件)
		
创建第一个Servlet(Dynamic Web Project方式) 注意:无论是以注解的方式还是xml的方式配置一个servlet,servlet的url-pattern一定要以一个"/ ...
 - Servlet中Web.xml的配置详解(一)
		
1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的 ...
 - Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签
		
本文转载自 陈蒙的博客 最近在学习JavaEE轻量级框架,对于servlet-mapping中的url-partten标签以及网页访问时的执行顺序不是很清楚,搜索了很多遍终于找到了这篇博文(搜索也是个 ...
 
随机推荐
- js模版引擎handlebars.js实用教程——结束语
			
返回目录 有了这些功能,[ajax+json+Handlebars]替代[vo+el表达式]不成问题,新时代的曙光已经来临,最佳解决方案在此,您还等什么? 教程到此结束...祝读者学习愉快... 小菜 ...
 - SOA服务设计与实现的几个语言无关的原则速记
			
一.SOA定义 SOA即面向服务架构(Service-Oriented Architecture).在SOA中,一切皆服务.一个服务是通过消息交换来调用的程序,一个信息系统是共同完成一个特定任务的一组 ...
 - JAVA数据类型,变量,转换,常量,运算符
			
java数据类型: Java基本类型共有八种,基本类型可以分为三类: 1.字符类型char,用单引号赋值 2.布尔类型boolean 3.数值类型byte.short.int.long.float.d ...
 - atitit  opencv apiattilax总结 约500个函数 .xlsx
			
atitit opencv apiattilax总结 约500个函数 .xlsx 1.1. CxCore中文参考手册 1 1.2. 机器学习中文参考手册 knn svm 1 1.3. CvAu ...
 - fir.im Weekly  -  进击的 Swift
			
最近 Swift 开源了,众开发者们欢呼雀跃.感谢开源,这是最好的时代.本期 fir.im Weekly 准备了一些关于 Swift 的"新鲜"干货分享,也包括一些优秀的 GitH ...
 - Backbone中 View之间传值的解决办法
			
Backbone中的View就是用来展示由Model层传出的数据,或者在View里产生的一些数据,包括输入框中输入等产生的数据,由当前View传递到另外一个View层里,应该怎么办呢,我之前读到一位博 ...
 - angular利用ui-router登录检查
			
angular利用ui-router登录检查 SAP都会有这个问题,session过期或者页面被刷新的情况下应该进入登录页. 监听ui-router的satte事件可以实现当state切换的时候检查登 ...
 - java基础,继承类题目:编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E
			
21.编写一个Java应用程序,该程序包括3个类:Monkey类.People类和主类 E.要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public vo ...
 - 使用BCP导出导入数据
			
bcp 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据. 使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导出到数 ...
 - ASP.NET MVC 4 Optimization的JS/CSS文件动态合并及压缩
			
JS/CSS文件的打包合并(Bundling)及压缩(Minification)是指将多个JS或CSS文件打包合并成一个文件,并在网站发布之后进行压缩,从而减少HTTP请求次数,提高网络加载速度和页面 ...