一:介绍
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器
用图可以示例为:
二:Servlet生命周期
加载和初始化
服务器第一次访问 Servlet 时会创建 Servlet 的实例(一个 Servlet 类只有一个实例)。之后服务器调用 init 方法初始化 Servlet 对象,创建或加载初始化数据。
处理服务
每接收到一个 Http 请求时,服务器会产生一个新的线程并调用 service 方法处理请求。销毁和垃圾回收
当 Servlet 被销毁时,服务器调用 destroy 方法释放 Servlet 对象所占的资源。最后由 JVM 对 Servlet 实例进行垃圾回收。
在官方文档中也说明了Servlet的生命周期
用代码演示如下:
public class ServletDemo1 implements Servlet {
// 初始化
public void init(ServletConfig arg0) throws ServletException {
System.out.println("Init");
}
// 处理服务
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("Service");
}
// 销毁
public void destroy() {
System.out.println("Destroy");
}
// 获取 Servlet 配置
public ServletConfig getServletConfig() {
return null;
}
// 获取 Servlet 信息
public String getServletInfo() {
return null;
}
}
三:Servlet接口
HttpServlet类已经实现了Servlet接口,HttpServlet类会根据http的请求类型选择调用
doGet、doPost、doPut,doDelete方法
HttpServletRequest 类:用户请求
HttpServletResponse 类:服务器响应
public class ServletDemo2 extends HttpServlet {
// 接收 GET 请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Get");
}
// 接收 POST 请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Post");
doGet(req,resp);
}
}
查阅官方文档如下:
四:实现Servlet的三方式
1.通过实现Servlet接口实现Servlet
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("你好呀,web!");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
2.继承GenericServlet抽象类实现
/**
* TODO:第二种实现Servlet的方法,继承抽象类GenericServlet,只需要重写service方法
*/
public class HelloServlet2 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("你好呀!啊哈哈哈哈哈哈");
}
}
3.继承HttpServlet类实现
/**
* TODO:自定义类实现Servlet的第三种方法:;继承HttpServlet
*/
public class HelloServlet3 extends HttpServlet {
//GET执行请求的方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
System.out.println("Servlet实现的第三种方法:doget...........");
}
//POST的执行请求的方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
System.out.println("Servlet实现的第三种方法:dopost...........");
}
}
五:Servlet注解开发使用
注解开发是为了简化配置的web.xml的使用
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* TODO:Servlet注解开发使用(简化配置web.xml文件)
*/
@WebServlet("/Servlet")//注解开发
public class Servlet_01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("打印get方法");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("打印post方法");
}
}
注意:在WebServlet()中的地址为在webapp下的html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>get请求</h2>
<form action="/getServlet" method="get">
用户名<input type="text" name="username" value="张三" /><br/>
密码<input type="text" name="pwd" value="123" /><br/>
<input type="submit" value="提交"/>
</form>
<h2>post请求</h2>
<form action="/postServlet " method="post">
用户名<input type="text" name="username" value="李四" /><br/>
密码<input type="text" name="pwd" value="123456" /><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
六:Servlet作用
1.接受客户端请求
2.处理业务逻辑
3.将响应数据返回给浏览器端