Servlet技术(二)

来源:互联网 发布:php 获取字符串后4位 编辑:程序博客网 时间:2024/05/19 00:53

HttpServlet抽象类

 HttpServlet类是GenericServlet类的子类。HttpServlet类为Servlet接口提供了与HTTP协议相关的通用实现,也就是说,HttpServlet对象适合运行在与客户端采用HTTP协议通信的Servlet容器或者Web服务器中。在开发JavaWeb应用时,自定义的Servlet类一般都扩展HttpServlet类。

HTTP协议把客户请求分为GET、POST、PUT、和DELETE等多种方式。HttpServlet类针对每一种请求方式都提供了相应的服务方法,如doGet()、doPost()、doPut()和doDelete()等方法。

ServletRequest接口

在Servlet接口的service(ServletRequestreq,ServletResponse res)方法中有一个ServletRequest类型的参数。ServletRequest类表示来自客户端的请求。当Servlet容器接收到客户端要求访问特定Servlet的请求时,容器先解析客户端的原始请求数据,把它包装成一个ServletRequest对象。当容器调用Servlet对象的service()方法时,就可以把ServletRequest对象作为参数传给service()方法。

ServletRequest接口提供了一系列用于读取客户端请求的方法。

1、     getContentLength():返回请求正文的长度。如果请求正文的长度未知,则返回-1.

2、  getContentType():获得请求正文的MIME类型。如果请求正文的类型未知,则返回null。

3、  getInputStream():返回用于读取请求正文的输入流。

4、  getLocalAddr():返回服务器端的IP地址

5、  getLocalName():返回服务器端的主机名

6、  getLocalPort():返回服务器端的FTP端口号

7、  getParameter(String name):根据给定的请求参数名,返回来自客户端请求中的匹配的请求参数值。

8、  getProtocol():返回客户端与服务器端通信所有的协议名称及版本号

9、  getReader():返回用于读取字符串形式的请求正文的BufferedReader对象

10、     getRemoteAddr():返回客户端的IP地址

11、     getRemoteHost():返回客户端的主机名

12、     getRemotePort():返回客户端的FTP端口号

此外,在ServletRequest接口还定义了一组用于在请求范围内存取共享数据的方法

1、setAttribute(String name,java.lang.Object object):在请求范围内保存一个属性,参数name表示属性名,参数object表示属性值。

2、getAttribute(String name):根据name参数给定的属性名,返回请求范围内的匹配的属性值

3、removeAttribute(String name):从请求范围内删除一个属性

HttpServletRequest接口

 HttpServletRequest接口是ServletRequest接口的子接口。HttpServlet类的重载service()方法及doGet()和doPost()等方法都有一个HttpServletRequest类型的参数

  

HttpServletRequest接口提供了用于读取HTTP请求中的相关信息方法:

1、getContextPath():返回客户端所请求访问的Web应用的URL入口。如客户端放问的URL为http://localhost:8080/hello/info,那么该方法返回“/hello”

2、getCookies():返回HTTP请求中的所有Cookie

3、getHeader(String name):返回HTTP请求头部的特定项

4、getHeaderNames():返回一个Enumeration对象,它包含了HTTP请求头部的所有项目名

5、getMethod():返回HTTP请求方式

6、getRequestURI():返回HTTP请求的头部的第1行中的URI

7、getQueryString():返回HTTP请求中的查询字符串,即URL中的“?”后面的内容

ServletResponse接口

在Servlet接口的service(ServletRequestreq,ServletResponse res)方法中有一个ServletResponse类型的参数。Servlet通过ServletResponse对象来生成响应结果。当Servlet容器接收到客户端要求访问特定Servlet的请求时,容器会创建一个ServletResponse对象,并把它作为参数传给Servlet的service()方法。

在ServletResponse接口中定义了一系列与生成响应结果相关的方法。

1、setCharacterEncoding(String charset):设置响应正文的字符编码。响应正文的默认字符编码为ISO-8859-1.

2、setContentType(String type):设置响应正文的MIME类型

3、getCharacterEncoding():返回响应正文的字符编码

4、getContentType():返回响应正文的MIME类型

5、setBufferSize(int size):设置用于存放响应正文数据的缓冲区的大小

6、getBufferSize():获得用于存放响应正文数据的缓冲区的大小

7、reset():清空缓冲区内的正文数据,并且清空响应状态码及响应头

8、resetBuffer():仅仅清空缓冲区内的正文数据,不清空响应状态码及响应头

9、flushBuffer():强制性地把缓冲区内的响应正文数据发送到客户端

10、     isCommitted():返回一个ServletOutputStream对象,Servlet用它来输出二进制的正文数据

11、     getWriter():返回一个PrintWriter对象,Servlet用它来输出字符串形式的正文数据。

Servlet通过ServletResponse对象主要产生HTTP响应结果的正文部分。ServletResponse的getOutputStream()方法返回一个ServletOutputStream对象,Servlet可以利用ServletOutputStream来输出二进制的正文数据。ServletResponse的getWriter()方法返回一个PrintWriter对象,Servlet可以利用PrintWriter来输出字符串形式的正文数据。

 为了提高输出数据的效率,ServletOutputStream和PrintWriter先把数据写到缓冲区内。当缓冲区内的数据被提交给客户后,ServletResponse的isCommitted()方法返回true。在以下几种情况下,缓冲区的数据会被提交给客户,即数据被发送到客户端:

1、当缓冲区内的数据已满时,ServletOutputStream或PrintWriter会自动把缓冲区内的数据发送给客户端,并且清空缓冲区。

2、Servlet调用ServletResponse对象的flushBuffer()方法。

3、Servlet调用ServletOutputStream或PrintWriter对象的flush()方法或者close()方法。

为了确保ServletOutputStream或PrintWriter输出的所有数据都会被提交给客户,比较安全的做法是在所有数据都输出完毕后,调用ServletOutputStream或PrintWriter的close()方法。

HttpServletResponse接口

HttpServletResponse接口是ServletResponse的子接口,HttpServlet类的重载service()方法及doGet()和doPost()等方法都有一个HttpServletResponse类型的参数

HttpServletResponse接口提供了与HTTP协议相关的一些方法,Servlet可以通过这些方法来设置HTTP响应头或者向客户端写Cookie。

1、      addHeader(Stringname,String value):向HTTP响应头中加入一项内容

2、      sendError(intsc):向客户端发送一个代表特定错误的HTTP响应状态代码。

3、      sendError(intsc,String msg):向客户端发送一个代表特定错误的HTTP响应状态码,并且发送具体的错误信息。

4、      setHeader(Stringname,String value):设置HTTP响应头中的一项内容。如果在响应头中已经存在这项内容,那么原先所做的设置将被覆盖。

5、      setStatus(intsc):设置HTTP响应的状态码

6、      addCookie(Cookiecookie):向HTTP响应中加入一个Cookie

在HTTPServletRsponse接口中定义了一些代表HTTP响应状态代码的静态常量,如下:

1、HTTPServletResponse.SC_BAD_REQUEST:对应的响应状态代码为400

2、HTTPServletResponse.SC_FOUND:对应的响应码为302

3、HTTPServletResponse.SC_METHOD_NOT_ALLOWED:对应的响应状态代码为405

4、HTTPServletResponse.SC_NON_AUTHORITATIVE_INFORMATION:对应的响应状态代码为203

5、HTTPServletResponse.SC_FORBIDDEN:对应的响应状态码为403

6、HTTPServletResponse.SC_NOT_FOUND:对应的响应状态码为404

7、HTTPServletResponse.SC_OK:对应的响应状态代码为200

ServletConfig接口

Servlet接口的init(ServletConfigconfig)方法有一个ServletConfig类型的参数。当Servlet容器初始化一个Servlet对象时,会为这个Servlet对象创建一个ServletConfig对象。在ServletConfig对象中包含了Servlet的初始化参数信息,此外,ServletConfig对象还与当前web应用的ServletContext对象关联。Servlet容器在调用Servlet对象的init(ServletConfig config)方法时,会把ServletConfig对象作为参数传给Servlet对象,init(ServletConfig config)方法会使得当前Servlet对象与ServletConfig对象之间建立关联关系。

在ServletConfig接口中定义了以下方法:

1、getInitParameter(String name):根据给定的初始化参数名,返回匹配的初始化参数值

2、getInitParameterNames():返回一个Enumeration对象,里面包含了所有的初始化参数名

3、getServletContext():返回一个ServletContext对象

4、getServletName():返回Servlet的名字,即web.xml文件中相应<servlet>元素的<servlet-name>子元素的值。如果没有为Servlet配置<servlet-name>子元素,则返回Servlet类的名字

每个初始化参数包含一对参数名和参数值。在web.xml文件中配置一个Servlet时,可以通过<init-param>元素来设置初始化参数。<init-param>元素的<param-name>子元素设定参数名,<param-value>子元素设定参数值

HttpServlet类继承GenericServlet类,而GenericServlet类实现了ServletConfig接口,因此在HttpServlet类或者GenericServlet类及子类中都可以直接调用ServletConfig接口中的方法。

ServletContext接口

ServletContext是Servlet与Servlet容器之间直接通信的接口。Servlet容器在启动一个web应用时,会为它创建一个ServletContext对象。每个web应用都有唯一的ServletContext对象,可以把ServletContext对象形象地理解为web应用的总管家,同一个web应用中所有的Servlet对象都共享一个总管家,Servlet对象们可以通过这个总管家来访问容器中的各种资源。

ServletContext接口提供的方法可分为以下几种类型

(1)用于在web应用范围内存取共享数据的方法。

1、setAttribute(String name,java.lang.Object object):把一个Java对象与一个属性名绑定,并把它存入到ServletContext中。参数name指定属性名,参数object表示共享数据

2、getAttribute(String name):根据参数给定的属性名,返回一个Object类型的对象,它表示ServletContext中与属性名匹配的属性值

3、getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名

4、removeAttribute(String name):根据参数指定的属性名,从ServletContext中删除匹配的属性

 (2)访问当前web应用的资源。

1、getContextPath():返回当前web应用的URL入口

2、getInitParameter(Stringname):根据给定的参数名,返回web应用范围内的匹配的初始化参数值。在web.xml文件中,直接在<web-app>根元素下定义的<context-param>元素表示应用范围内的初始化参数。

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

4、getRequestDispatcher(Stringpath):返回一个用于向其他web组件转发请求的RequestDispatcher对象

(3)访问Servlet容器中的其他web应用

1、getContext(String uripath):根据参数指定的URI,返回当前Servlet容器中其他web应用的ServletContext对象

(4)访问Servlet容器的相关信息

1、getMajorVersion():返回Servlet容器支持的Java Servlet API的主版本号

2、getMainorVersion():返回Servlet容器支持的Java Servlet API的次版本号

3、getServletInfo():返回Servlet容器的名字和版本

(5)访问服务器端的文件系统资源

1、getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中一个真实的路径

2、getResource(String path):返回一个映射到参数指定的路径的URL

3、getResourceAsStream(Stringpath):返回一个用于读取参数指定的文件的输入流

4、getMimeType(String file):返回参数指定的文件的MIME类型

(6)输出日志

1、log(String msg):向Servlet的日志文件中写日志。

2、log(Stringmessage,java.lang.Throwable throwable):向Servlet的日志文件中写错误日志,以及异常的堆栈信息。

在ServletConfig接口中还定义了getServletContext()方法。HttpServlet类继承GenericServlet类,而GenericServlet类实现了ServletConfig接口,因此在HttpServlet类或者GenericServlet类及子类中都可以直接调用getServletContext()方法,从而得到当前web应用的ServletContext对象。

1 0
原创粉丝点击