1、什么是Servlet ?
- Servlet是JavaEE规范之一,规范就是接口;
- Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。
- Servlet是运行在服务器上的一个java小程序,它可以接收客户端发来的请求,并相应数据给客户端。
2、手动实现Servlet程序
- 编写一个类去实现Servlet接口;
- 实现service方法,处理请求,并相应数据;
- 到web.xml中配置Servlet程序的访问地址。
示例代码:
public class HelloServlet implements Servlet {
/**
service方法是专门用来处理请求和响应的
*/
@override
public void service(ServiceRequest serviceRequest,ServiceResponse serviceResponse) throws ServiceException,IOException {
System.out.println("Hello Servlet 被访问了!");
}
}
web.xml中的配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web- app_4_0.xsd" version="4.0">
<!-- servlet 标签给Tomcat配置Servlet程序-->
<servlet>
<!--servlet-name 标 签 Servlet 程 序 起 一 个 别 名 ( 一 般 是 类 名 ) -->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class 是 Servlet 程 序 的 全 类 名 -->
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping 标 签 给 servlet 程 序 配 置 访 问 地 址 -->
<servlet-mapping>
<!--servlet-name 标 签 的 作 用 是 告 诉 服 务 器 , 我 当 前 配 置 的 地 址 给 哪 个 Servlet程 序 使 用 --> <servlet-name>HelloServlet</servlet-name>
<!--url-pattern 标 签 配 置 访 问 地 址 <br/> / 斜 杠 在 服 务 器 解 析 的 时 候 , 表 示 地 址 为 : http://ip:port/ 工 程 路 径<br/>/hello表 示 地 址 为 : http://ip:port/ 工 程 路 径 /hello <br/>-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
3、Servlet的生命周期
- 执行Servlet构造方法;
- 执行init初始化方法;
(第一步、二步,是在第一次访问的时候创建Servlet程序会调用)
- 执行service方法;
(第三步,每次访问都会调用)
- 执行destroy销毁方法,最后一步会在web工程停止的时候调用。
4、GET和POST请求的分发处理
public class HelloServlet implements Servlet {
/**
service方法是专门用来处理请求和响应的
*/
@Override
public void service(ServletRequest servletRequest,ServletResponse servletResponse) throws ServletException,IOException {
System.out.println("Servlet 被访问了!");
//类型转换
HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
//获取请求的方式
String method = httpServletRequest.getMethod();
if("GET".equals(method)) {
doGet();
}else if("POST".equals(methos)){
doPost();
}
}
// 自己定义一下方法
public void doGet() {
System.out.println("执行了get请求");
}
public void doPost() {
System.out.println("执行了post请求");
}
}
5、通过继承HttpServlet实现Servlet程序
一般在实际的项目开发过程中,都是使用继承HttpServlet类的方式去实现Servlet程序。
编写一个类去继承HttpServlet类
根据业务需要重写doGet或doPost方法
到web.xml中配置Servlet程序的访问地址
Servlet类的代码:
public class HelloServlet2 extends HttpServlet {
//doGet() 在get请求的时候会被调用
@Override
protected void doGet(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) throws ServletException,IOException {
System.out.println("doGet方法执行了!!!");
}
//doPost() 在get请求的时候会被调用
@Override
protected void doPost(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse) throws ServletException,IOException {
System.out.println("doPost方法执行了!!!");
}
}
web.xml中的配置:
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.atguigu.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>