Servlet理论介绍

来源:互联网 发布:在线全职美工怎么样 编辑:程序博客网 时间:2024/06/10 19:23

1、Servlet介绍

Servlet运行在服务器端,是由Web服务器负责加载的,是独立于平台和协议的Java应用程序。JSP改变了Servlet提供HTTP服务时的编程方式,但内部机制上,每一个JSP都被处理成一个Servlet。
Servlet具有跨平台、可移植性强等有点,但并没有被广泛的使用,是因为Servlet的编写需要全面掌握Java程序设计技巧,而且它将页面的显示和功能处理都混杂在一起,不利于系统开发过程的分工和后期的维护。

2、Servlet生命周期

Servlet运行在Servlet容器中,由容器来管理其生命周期。

  • 加载和实例化 —- 由Servlet容器实现,加载Servlet之后,容器会通过Java的反射机制来创建Servlet实例;
  • 初始化 —- 在Servlet的实例创建之后,容器会调用Servlet的init()方法来初始化该Servlet对象。初始化的目的是让Servlet对象在处理客户端请求前先完成一些初始化工作。对于每个Servlet实例,只会调用一个init()方法;
  • 执行 —- 当客户端请求到来后,Servlet容器首先针对该请求创建ServletRequest和ServletResponse两个对象,容器会自动调用Servlet的service()方法来相应客户端请求,同时把SerletRequest和ServletResponse两个对象传递给service()方法。通过ServletRequest对象,Servlet实例可以获得客户端的请求信息,处理完请求后,则将响应信息放置在ServletResponse对象中。最后销毁ServletRequest和ServletResponse对象;
  • 清理 —- 当Serlet实例需要从服务中移除时,容器会调用destroy()方法,让该实例释放掉它所使用的资源,并将实例中的数据保存到持久的存储设备中,Servlet实例被Java GC回收。

3、Servlet的常用类和接口

Serlet API包含在两个包中,分别是javax.servlet和javax.serlet.http。在Servlet架构中,Servlet接口是所有类型的Servlet类必须实现的接口,而最典型的Servlet类则是HttpServlet类。
(1)Servlet接口

void init(ServletConfig config)    //初始化ServletServletConfig getServletConfig()    //获得Servlet的相关配置信息,该方法会返回一个指向ServletConfig的引用java.lang.String getServletInfo()    //获得Servlet开发者定义的信息void service(ServletRequest req, ServletResponse res)    //该方法用于响应客户端请求void destroy()    //清理方法,用于释放资源

(2)GenericServlet抽象类
有两个Servlet类:GenericServlet和HttpServlet类,它们提供了两种基本的Servlet,分别为Servlet方法提供了一种默认的实现模式。
GenericServlet实现了Servlet接口,它是一个抽象类,其包含的service()方法是一个抽象方法。GenericServlet的派生类必须实现service()方法。
(3)HttpServlet抽象类
HttpServlet是所有基于Web的Servlet类的根类。

void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,java.io.IOException  //该方法用于处理和响应HTTP POST请求void doGet(HttpServletRequest request, HttpServletResponse response) throw ServletException,java.io.IOException    //该方法用于处理和响应HTTP GET请求

除了doGet()方法和doPost方法外,其他类型的HTTP请求如PUT、DELETE等也有对应的处理方法。编写HttpServlet类的关键就是要多doGet()、doPost()方法进行重写,以实现对客户端请求的响应,不能重写service()方法。
(4)ServletRequest接口和ServletResponse接口
ServletRequest接口和ServletResponse接口都在javax,servlet包中定义。

Object getAttribute(String name)    //返回属性名为name的属性值,如果该属性不存在则返回NullEnumeration getAttributeNames()     //返回请求中所有属性的名字,如果请求中没有任何属性,则返回一个空枚举集合void removeAttribue(String name)    //从请求中移除name属性void setAttribute(String name, Object obj)    //在请求中保存属性名为name的属性String getCharacterEncoding()          //返回请求正文所使用的字符编码名称。如果未指定字符编码,则返回nullint getContentLength()                 //返回请求正文的长度,以字节为单位。如果长度位置,则返回-1String getContentType()                //返回请求正文的MIME类型。如果类型未知,则返回nullServletInputStream getInputStream()    //返回一个输入流,使用该输入流可以以二进制的方式来读取正文String getParameter(String name)       //返回请求中name参数的值。如果name参数包含多个值,则返回参数列表中的第一个参数。若在请求中未找到该参数,则返回nullEnumeration getParameterNames()        //返回请求中包含的所有参数的名字,如果请求中没有参数,则返回一个空枚举集合String[] getParameterValues(String name)    //返回请求中nme参数的所有值,如果请求中不存在name参数,则返回nullServletOutStream getOutStream()             //返回一个ServletOutStream对象,同来发送对客户端的响应PrintWriter getWriter()                     //返回PrintWriter类的对象,用来将字符文本发送到客户端void setContentLength(int length)           //设置响应数据的长度void setBufferSzie(int size)                //设置发送到客户端的数据缓冲区大小

(5)HttpServletRequest接口
HttpServletRequest接口代表了客户端的HTTP请求。

Cookie[] getCookies()    //返回由服务器存放在客户端的Cookie数组,常常使用Cookie来区分不同的用户HttpSession getSession()    //获取当前的HTTP会话对象HttpSession getSession(boolean create)    //获取当前的HTTP会话对象,若不存在则自动创建一个新会话

(6)HttpServletResponse接口
HttpServletResponse接口表示对客户端的HTTP响应

public void addCoookie(Cookie cookie)    //向响应的头部加入一个Cookievoid setStatus(int status)    //将响应状态码设置为指定值,只用于不产生错误的响应码

(7)HttpSession接口
Servlet会为HttpSession分配一个唯一标识符,即Session ID。Session ID作为Cookie保存在客户端的浏览器中,每当客户发出HTTP请求时,Servlet容器就可以从HttpRequest对象中读取到Session ID,再根据Session ID找到对应的HttpSession对象,进而获取客户端信息。

String getId()    //返回Session IDvoid invalidate()    //使当前的Session失效,Servlet容器会释放掉HttoSession对象所占用的资源void setAttribute(String name, Object obj)    //为name属性这是参数,并保存懂啊HttpSession对象中Object getAttribute(Stirng name)    //根据name参数返回保存在HttpSession对象中的属性值Enumeration getAttributeNames()    //返回当前HttpSession对象中所有属性名isNew()    //判断该Session是否是新创建,如果是新创建的Session则返回true,否则返回false
原创粉丝点击