Servlet是什么?
java服务器小程序。用java编写的服务器端程序,是由服务器端调用和执行的、按照Servlet自身规范编写的java类。Servlet可以看成是用java编写的CGI,但是它的功能和性能比CGI更加强大
Servlet技术特点
Servlet带给开发人员最大的好处是它可以处理客户端传来的HTTP请求,并返回一个响应。同时给页面显示与逻辑进行分离。
可移植性、功能强大、安全、简洁、集成、模块化、扩展性和灵活性、高效耐久
Servlet的生命周期
Servlet部署在容器里,它的生命周期由容器管理:
装载Servlet :这项操作一般是动态执行的。有些服务器提供了相应的管理功能,可以在启动的时候就装载Servlet,并能够初始化特定的Servlet
创建一个Servlet实例
调用Servlet的init()方法
服务:如果容器接收到对此Servlet的请求,那么它调用Servlet的service()方法
销毁:实例被销毁,通过调用Servlet的destory()方法销毁Servlet。
Servlet常用接口
Servlet接口—->GenericServlet类—->HttpServlet类—->用户自定义Servlet
1、Servlet接口
init 初始化Servlet类
destroy 销毁Servlet实例以便回收占有的资源
service 响应客户端请求
getServletConfig 获取Servlet的配置信息
getServletInfo 获取Servlet的文本
2、GenericServlet类
String getInitParameter(String name)
返回具有指定名称的初始化参数值。通过调用config.getInitParameter(name)实现
ServletConfig getServletConfig()
返回传递到init()方法的ServletConfig对象
ServletContext getServletContext()
返回在config对象中引用的ServletContext
String getServletInfo()
返回空字符创
void log(String msg)
编写注册Servlet的入口,为此调用Servlet上下文的log()方法,Servlet的名字被加到消息文本的开头。
abstract void service(Request request,Response respones)throws ServletException,IOException
由Servlet引擎调用为请求对象描述的请求提供服务。这是GeneriServlet中唯一的抽象方法。因此他也是唯一必须被子类覆盖的方法。
String getServletName()
返回在WEB应用发布描述器(web.xml)中指定的Servlet的名字。
3、HttpServlet类
doGet(HttpServletRequest request,HttpServletResponse response)
由Servlet引擎调用处理一个HTTP GET请求。
doPost(HttpServletRequest request,HttpServletResponse response)
由Servlet引擎调用处理一个Http Post请求
doPut(HttpServletRequest request,HttpServletResponse response)
由Servlet引擎调用处理一个Http PUT请求
void doDelete(HttpServletRequest request,HttpServletResponse response)
servlet配置相关
getInitParameter(String name);
返回特定名字的初始化参数。即返回web.xml中servlet中的初始化名字的参数值
getInitParameterNames();
返回所有的初始化参数的名字
getServletContext()
返回Servlet的上下文对象的引用
getServletName() 返回servlet的名字
servlet异常相关
ServletException
getRootCause()
返回造成这个ServletException的原因
UnavailableException
当Servlet或者Filter暂时或者永久不能使用时,就会抛出这个异常
请求和相应相关
ServletRequest
代表了Servlet请求。
ServletResponse
代表了Servlet的响应
ServletInputStream
Servlet的输入流
ServletOutputStream
Servlet的输出流
ServletRequestWrapper
ServletRequest的实现
ServletResponseWrapper
ServletResponse的实现
HttpServletRequest
代表了HTTP的请求
getCookies()返回和客户端发送的Cookie。如果这个请求中没有Cookie,返回一个空数组
getSession()返回和客户端关联的Session。如果没有给客户端分配Session,返回null
getSession(boolean create) 如果没有给客户端分配session,则创建一个新session。
getParameter(String name)获取请求参数中的值
getParameterValues(String name)。这个值往往是checkbox或者select控件提交的,获得的值是一个String数组
HttpServletResponse
代表了HTTP的响应。它允许Servlet设置内容长度和回应的MIME类型,并且提供输出流ServletOutputStream。
addCookie(Cookie cookie) 在响应中增加一个Cookie
encodeURL(String url)
使用URL和一个SessionId重写这个URL
setContentType(String type)
设置MIME类型
setCharacterEncoding(String charset)
设置响应的字符编码类型
HttpServletRequestWrapper
HttpServletRequest的实现
HttpServletResponseWrapper
HttpServletResponse的实现
会话跟踪
一个Session可以通过Cookie或者重写URL来维持
getCreationTime()
返回创建session的时间
getId()
返回session的标识符
getLastAccessedTime()
返回客户端最后一次发出与这个Session有关的请求的时间。如果这个Session是新建立的,返回-1
getMaxInactiveInterval()
返回session最长存活时间
开发servlet步骤:
1.继承HttpServlet
2.配置web访问映射地址:
方式一:Annotation注解方式映射地址
方式二:通过在web.xml中配置servlet映射文件
/**
* 这是一个简单的servlet程序:
* 功能是输出一个html文档,文档内容为你好,世界
* 访问该servlet程序的url地址是:应用程序路径/UserServlet
*/
package com.lizhenhua.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class UserServlet
*/
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置页面MIME和编码类型
response.setContentType("text/html;charset=gb2312");
//获得输出流对象
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>HelloWorld</title>");
out.println("</head>");
out.println("<body>");
out.println("你好!世界");
out.println("</body>");
out.println("</html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
方式二实例:
/**
* 这是一个简单的servlet程序:
* 功能是输出一个html文档,文档内容为你好,世界
* 访问该servlet程序的url地址是:应用程序路径/userServlet
*/
package com.lizhenhua.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置页面MIME和编码类型
response.setContentType("text/html;charset=gb2312");
//获得输出流对象
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>HelloWorld</title>");
out.println("</head>");
out.println("<body>");
out.println("你好!世界");
out.println("</body>");
out.println("</html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
在web.xml中配置servlet映射关系
<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置Web应用配置文件的根元素,并指定配置文件的Schema信息 -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<!-- 配置UserServlet文件访问信息 -->
<servlet>
<servlet-name>UserServlet</servlet-name>
<servlet-class>com.lizhenhua.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>userServlet</url-pattern>
</servlet-mapping>
</web-app>