Servlet API 主要由 javax.servlet 和 javax.servlet.http 两个包组成。 在javax.servlet包中定义了Servlet接口及相关的通用和类 在javax.servlet.http包中主要定义了与HTTP协议相关的 HttpServlet类、HttpServletRequest接口和HttpServletResponse接口 Servlet API的核心是java.servlet.Servlet接口,所有的Servlet类都必须 实现 这一接口。 Servlet接口中定义了5个方法,其中有3个方法都由Servlet容器来调用 这3个方法是: init(ServletConfig config):容器创建Servlet对象后会调用init方法初始化Servlet对象 service(ServletRequest arg1,ServletResponse arg2):当容器收到客户端请求,访问特定的Servlet对象时,调用该Servlet对象的service()方法 destroy():当Servlet对象结束生命周期时调用destroy()释放Servlet对象占用的资源 还有两个方法: getServletConfig()返回一个ServletConfig对象,包含Servlet初始化信息 getServletInfo()返回一个字符串,包含了Servlet的创建者、版本和版权的信息 javax.servlet.GenericServlet抽象类 实现 了Servlet接口,还实现了ServletConfig接口和Serializable接口。 javax.servlet.GenericServlet抽象类没有实现Servlet接口的service()方法,service()方法是GenericServlet抽象类中唯一的抽象方法,所以GenericServlet抽象类的子类必须实现service()方法 由于GenericServlet抽象类实现了ServletConfig接口,因此,GenericServlet抽象类的子类可以直接调用在ServletConfig接口中定义的getServletContext()、getInitParameter()、getInitParameterNames()等方法 javax.servlet.http.HttpServlet抽象类是 GenericServlet抽象类的 子类 所以开发自己的Servlet类时,可以选择扩展GenericServlet类或者HttpServlet类 ServletRequest接口提供了一系列用于读取客户端请求数据的方法: getContentLength()返回请求正文的长度。如果请求正文的长度未知,则返回-1 getContentType()获得请求正文的MIME类型。如果请求正文的类型未知,返回null getInputStream()返回用于读取请求正文的输入流 getLocalAddr()返回服务器端IP getLocalName()返回服务器端主机名 getLocalPort()返回服务器端端口号 getParameter(String name)返回客户端请求中的匹配的请求参数值 getProtocol()返回客户端与服务器端通信所用的协议的名称和版本号 getReader()返回用于读取字符串形式的请求正文的BufferedReader对象 getRemoteAddr()返回客户端IP getRemoteHost()返回客户端主机名 getRemotePort()返回客户端端口号 此外,ServletRequest接口还定义了一组用于 在 请求范围内 存取 共享 数据的方法 *setAttribute(String name,Object object)在请求范围内保存一个属性 name是属性名 object是属性值 *getAttribute(String name)在请求范围内获取一个属性的匹配属性值 *removeAttribute(String name)从请求范围内删除一个属性 ServletResponse接口中定义了一系列与生成响应结果相关的方法 setCharacterEncoding(String charset)设置响应正文的字符编码,默认为ISO-8859-1 setContentLenght(int Len)设置响应正文的长度 setContentType(String type)设置响应正文的MIME类型 getCharacterEncondig()返回响应正文的字符编码 getContentType()返回响应正文的MIME类型 setBufferSize(int size)设置用于存放响应正文数据的缓冲区大小 getBufferSize()返回用于存放响应正文数据的缓冲区大小 reset()清空缓冲区内的正文数据,并且清空响应状态代码及响应头 resetBuffer()仅仅清空缓冲区内的正文数据 flushBuffer()强制性的把缓冲区内的响应正文数据发送到客户端 isComitted()缓冲区内的数据是否已经提交给客户端,如果是 返回 true getOutputStream()返回一个ServletOutputStream对象,Servlet用它来输出二进制的正文数据 getWriter()返回一个PrintWriter对象,Servlet用它来输出字符串形式的正文数据 HttpServletRequest接口是ServletRequest的子接口(子类),提供了用于读取HTTP请求中的相关信息的方法 getContextPath()返回客户端请求访问的web应用的URL入口 getCookies()返回HTTP请求中的所有Cookie getHeader(String name)返回HTTP请求的头部的特定项 getHeaderNames()返回一个Enumeration对象,它包含了HTTP请求头部的所有项目名 getMethod()返回HTTP请求方式 getRequestURI()返回HTTP请求的头部的第1行中的URI getQueryString()返回HTTP请求中的查询字符串,即URL中的“?”后面的内容 HttpServletResponse接口是ServletResponse接口的子接口(子类),提供了与HTTP协议相关的一些方法,来设置HTTP响应头或向客户端写Cookie addHeader(String name,String value)向HTTP响应头中加入一项内容 sendError(int sc)向客户端发送一个代表特定错误的HTTP响应状态代码 sendError(int sc,String msg)向客户端发送一个代表特定错误的HTTP应状态代码,并且发送具体的错误消息 setHeader(String name,String value)设置HTTP响应头中的一项内容。如果响应头中已经存在这项内容,就将其覆盖 setStatus(int sc)设置HTTP响应的状态代码 addCookie(Cookie cookie)向HTTP响应中加入一个Cookie ServletConfig接口 getInitParameter(String name)根据给定的初始化参数名,返回匹配的初始化参数值 getInitParameterNames()返回一个Enumeration对象,里面包含了所有的初始化参数名 getServletContext()返回一个ServletContext对象 getServletName()返回Servlet的名字,即web.xml中<servlet-name>子元素的值 ServletContext接口,是Servlet与Servlet容器之间直接通信的接口。Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象,每个web应用都有唯一的ServletContext对象。 ServletContext接口提供的方法分为以下几种类型 (1)在web应用范围内存取共享数据的方法 setAttribute(String name,Object object)把一个对象与一个属性名绑定,并存放到ServletContext中 getAttribute(String name)根据属性名返回匹配的属性值 getAttributeNames()返回一个Enumeration对象,该对象包含了所有存放在ServletContext对象中的属性名 removeAttribute(String name)根据属性名,从ServletContext中删除匹配的属性 (2)访问当前web应用的资源 getContextPath()返回当前应用的URL入口 getInitParameter(String name)根据给定的参数名,返回web应用范围内的匹配的初始化参数值 getInitParameterNames()返回一个Enumeration对象,它包含了web应用范围内的所有初始化参数名 getServletContextName()返回web应用的名字,即web.xml中<display-name>元素的值 getRequestDispatcher(String path)返回一个用于向其它web组件转发请求的RequestDispatcher对象 (3)访问Servlet容器中的其它web应用 getContext(String uripath)根据参数指定的RUI返回当前Servlet容器中其它web应用的ServletContext对象 (4)访问Servlet容器的相关信息 getMajorVersion()返回Servlet容器支持的JAVA Sservlet API主版本号 getMinorVersion()返回Servlet容器支持的JAVA Sservlet API主版次号 getServerInfo()返回Servlet容器的名字和版本 (5)访问服务器端的文件系统资源 getRealPath(String path)根据参数指定的虚拟路径,返回文件系统中的一个真实的路径 getResource(String path)返回一个映射到参数指定路径的RUL getResourceAsStream(String path)返回一个用于读取参数指定的文件输入流 getMimeType(String file)返回参数指定的文件的MIME类型 (6)输出日志 log(String msg)向Servlet的日志中写日志