《JSP 2.0技术手册》读书笔记一Servlet详解

      Servlet是97年由sun公司发布的,虽然现在J2EE技术已经发生了很大的变化,但是Servlet等这些核心技术依然在各新技术中展现着他们旺盛的生命力,我们很有必要来详细学习下Servlet,以便于我们更好的理解在其之上发展起来的新技术。

      作用:运行在服务端,负责处理、响应客户端的请求。

      使用Java Servlet需要导入两个包-

            javax.servlet.*:存放于HTTP协议无关的一般性Servlet类;

            javax.servlet.http.*:继承javax.servlet.*,增加了与HTTP协议有关的功能。

      所有Servlet都必须实现javax.servlet.Servlet接口,通常选择继承javax.servlet.GenericServlet或javax.servlet.http.HttpServlet。具体选择继承哪个类根据自己写的Servlet类是否与HTTP协议相关。得到servlet-api.jar,可以在tomcat安装目录中的lib文件夹下找到,导入项目中即可使用。

      优点:可移植-因为是纯java开发的;功能强大-可以调用Java API中大量的功能模块;性能好-利用线程处理请求;安全性好。

      生命周期:

      1. 加载和实例化:当服务器启动或者客户端发出请求服务时,服务器提供的容器Container会加载和实例化一个Servlet.

      2. 初始化:在载入Servlet后需要进行初始化,主要是读取配置信息(如初始化JDBC的连接)、读取一些固定存储的数据。这一过程中主要使用了javax.servlet.Servlet接口中的init(ServletConfig config)方法,init方法获得一个Servlet配置对象ServletConfig,此对象由Servlet容器生成,servlet可以通过此对象获得相关参数。例子如下:

          在web.xml中配置如下-

    

user为参数名,Jack为参数user的值。在HelloServletinit(ServletConfig config)中可以用config.getInitParameter("user")取得user的值Jack。既然都讲到ServletConfig,我们扩展下,来认识下ServletConfig的其他方法。 

public Enumeration getInitParameterNames():返回包含有String的列表对象,包括Servlet的所有初始化参数名。

根据参数名我们可以利用方法getInitParameter(string)获得各参数的初始化值。

public ServletContext getServletContext(),得到ServletContext(Servlet环境对象)。ServletContext作用就很大了,详解见后。

3. 处理请求:我们通常使用的是继承自HttpServlet类的方法doPost(HttpServletRequest,HttpServletResponse)和方法doGet

(HttpServletRequest,HttpServletResponse),以及继承自Servlet接口的方法service(ServletRequest,ServletResponse)来进行

请求的处理和响应。至于HttpServletRequest,HttpServletResponse的方法可参见API,或者参见后续文章。

4. 服务结束:即Servlet被销毁。当容器没有限定一个加载的Servlet能存活多久时,一个Servlet实例可能只在容器中存活几毫秒

或者其他更长的任意时间。一旦servlet的destroy()方法被调用时,servlet将释放所有占有资源并被移除容器。

ServletContext详解:
ServletContext是servlet与servlet容器(Web应用服务器如tomcat提供的servlet运行空间)之间直接通信的接口。servlet容器在启动一个web应用时,会为它创建一个ServletContext对象,即每个应用有且仅有一个自己的ServletContext对象。所有的该Web应用的Servlet都共享一个ServletContext对象,通过它来访问容器中的各种资源。如何使用呢?见下!
a.在Web应用范围内存取共享数据
a.1 public void setAttribute(String name, Object o):在servletContext对象中存放一个java数据对象o,其对应的关键字为name。稍后可以在其他地方利用servletContext的方法getAttribute(String name)获得先前存放的数据对象o。
a.2 getAttributeNames():返回Enumeration对象,包含了存放在ServletContext对象中的属性名。根据属性名可以获得数据对象。removeAttribute(String name):根据属性名,删除servletcontext对象中存放的数据对象。

b.访问当前web应用的资源

b.1 getContextpath():返回当前应用的URL
b.2 getInitParameter(string name):获得web.xml中<context-param>元素设置的初始化参数。getInitParameterNames():返回一
个包含初始化参数的Enumeration对象。

b.3 getServletContextName():返回web应用的名字,即web.xml中<display-name>元素的值。

b.4 public RequestDispatcher getRequestDispatcher(String uripath):获得指定路径下的资源(如servlet,jsp等)对应的

RequestDispatcher对象,它封装由一个特定URL定义的服务器资源,常用的方法是requestDispatcher.forward(ServletRequest,

ServletResponse)来向客户做出响应。

c. 访问servlet容器的相关信息-ServletContext getContext(String url):根据url,返回当前servlet容器中其他web应用的servletContext对象。

d.访问服务器端的文件系统资源

d.1 String getRealPath(String path):根据虚拟路径(相对路径),返回服务器端文件系统中的真实路径。

d.2 InputStream getResourceAsStream(String url):返回Url指定的文件的输入流(把文件转变成输入流)。

e.除了在ServletConfig中用getServletContext()获得ServletContext对象外,还可以利用HttpSession,PageContext,GenericServlet(HttpServlet继承GenericServlet)的getServletContext()方法获得web应用的ServletContext对象。

Servlet接口方法介绍:

1。 public void init(ServletConfig config):在Servlet实例化之后,在进行其他方法之前调用init方法。

2。 public void service(ServletRequest request,ServletResponse response):用此方法来响应请求。

3。 public destroy():销毁servlet,进行垃圾收集,如果servlice()方法没有结束,destroy()方法不能被调用。

Servlet-api下载地址:http://download.csdn.net/source/2727272

原文地址:https://www.cnblogs.com/whuqin/p/4982132.html