配置虚拟主机 Servlet技术
Servlet是与平台无关的服务器端组件,它可以运行在Servlet容器中。
Servlet框架是由两个Java包组成:javax.servlet和javax.servlet.http。
Servlet的框架的核心里javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。
有3个方法代表了Servlet的生命周期:
l init方法,负责初始化Servlet对象。
l service方法,负责响应客户的请求。
l destroy方法,当Servlet对象退出生命周期时,负责释放占用的资源。
Servlet类必须扩展以下两个类中的一个。
l 扩展GenericServlet类
必须实现service方法,因为GenericServlet类中的service方法被声明为抽象方法。
Public abstract void service(ServletRequest request,ServletResponse response) thows ServletException,IOException
l 扩展HttpServlet类
HTTP的请求方式包括DELETE、GET、OPTION、POST、PUT、TRACT,在HttpServlet类中分别提供了相应的doXXX()方法,我们只需要重写相应方法即可。
下面,介绍一下ServletRequest和ServletResponse接口。
l ServletRequest接口
它封装了客户请求信息,如客户请求方式、参数名和参数值、客户端正在使用的协议,以及发出客户请求的远程主机信息等。还为Servlet提供了直接以二进制方式读取客户请求数据流的ServletInputStream。 ServletRequest接口的部分方法
方法名
描述
getAttribute
根据参数给定的属性名返回属性值。
getContentType
返回客户请求数据的MIME类型
getInputStream
返回以二进制数方式直接读取客户请求数据的输入流
getParameter
根据给定的参数名返回参数值
getRemoteAddr
返回远程客户主机的IP地址
getRemoteHost
返回远程客户主机名
getRemotePort
返回远程客房主机端口
setAttribute
在ServletRequest中设置属性(包括属性名和属性值)
l ServletResponse接口
为Servlet提供了返回结果的方法。它允许Servlet设置返回数据的长度和MIME类型,并且提供输出流ServletOutputStream。 ServletResponse接口的部分方法
方法名
描述
getOutputStream
返回可以向客户端发送二进制数据的输出流对象ServletOutputStream
getWriter
返回可以向客户端发送字符数据的PrintWriter对象
getCharacterEncoding
返回Servlet发送的响应数据的字符编码
getContentType
返回Servlet发送的响应数据的MIME类型
setCharacterEncoding
设置Servlet发送的响应数据的字符编码
setContentType
设置Servlet发送的响应数据的MIME类型
Servlet的生命周期
1. 初始化阶段
下列情形下Servlet容器装载Servlet
l Servlet容器启动时自动装载某些Servlet
l 在Servlet容器启动后,客户首次向Servlet发出请求
l Servlet的类文件被更新后,重新装载Servlet
Servlet是否在启动时自动装载Servlet,是由在web.xml中为Servlet设置的属性决定的。
Init方法有两种形式:
public void init(ServletConfig config) throws ServletException
public void init() throws ServletException
初始化阶段,Servlet容器会为Servlet创建一个ServletConfig对象,用来存放Servlet的初始化配置信息,如Servlet的初始参数。如果Servlet类覆盖了第一种带参数的init方法,应该先调用super.init(config)方法确保参数config引用 ServletConfig对象;如果覆盖的是第二种不带参数的init方法,可以不调用super.init()方法,如果要在init方法中访问 ServletConfig对象,可以调用Servlet类的getServletConfig()方法。 HTTP请求
由3部分组成,分别是:
l 请求方法URI协议/版本
l 请求头(Request Header)
l 请求正文
示例:
GET /sample.jsp HTTP/1.1
Accept:image/gif,image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:locakhost
User-Agent:Mozilla/4.0(compatible;MSIE5.01;Windows NT 5.0)
Accept-Encoding:gzip,deflate
userName=werqin&password=1234 HTTP响应
由3部分组成,分别是:
l 协议 状态代码 描述
l 响应头(Response Header)
l 响应正文
示例:
HTTP/1.1 200 OK
Server:ApacheTomcat/5.0.12
Date:Mon,6 Oct 2003 13:23:42 GMT
Content-Length:112
除了这两张表列出的方法外,在HttpServletRequest的ServletRequest中提供了读取客户请求的通用方法,在HttpServletResponse的父类ServletResponse中提供了生成服务器响应的通用方法。 创建HttpServlet的步骤
(1)扩展HttpServlet抽象类.
(2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法。
(3)获取HTTP请求信息,例如通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串。无论是HTML表单数据还是URL上的查询字符串,在HttpServletRequest对象中都以参数名/参数值的形式存放,可以通过以下方法检索参数信息:
l getParameterNames():返回一个Enumeration对象,它包含了所有的参数名信息。
l getParameter(String name):返回参数名name对象的参数值。
l getParameterValue():返回一个Enumeration对象,它包含了所有参数值信息。
(4)生成HTTP响应结果。
通过利用HttpServletResponse对象的getWriter()方法,可以获得一个PrintWriter对象。使用PrintWriter的print()或println()方法可以向客户端发送字符串数据流。