1. 什么是Servlet
- Servlet是javaEE规范之一,接口
- Servlet 是JavaWeb三大组件之一。
- Servlet程序
- Filter 过滤器
- Listener 监听器
- Servlet 是运行在服务器上的一个java小程序
- 可以接收客户端发送来的请求,并响应数据给客户端
2. 手动实现Servlet程序
编写一个类去实现Servlet接口
实现service 方法,处理请求,并响应数据
到web.xml 中配置Servlet程序的访问地址
<?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.han.code.HelloServlet</servlet-class> </servlet> <!-- servlet-mapping标签给Servlet程序配置访问地址 --> <servlet-mapping> <!-- Servlet-name标签的作用是告诉服务器,当前配置的地址给哪个Servlet程序使用--> <servlet-name>HelloServlet</servlet-name> <!-- <url-pattern> 配置访问地址 / 斜杠在服务器解析时,表示地址为http://ip:port/工程路径 /hello 表示地址为http://ip:port/工程路径/hello --> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
- 常见错误
- url-pattern 中配置的路径没有以斜杠开始
- servlet-name 配置的值不存在
- 常见错误
3. Servlet的生命周期
- 执行Servlet构造器方法
- 执行init初始化方法
第一,二步,是在第一次访问的时候创建Servlet程序会调用
- 执行service方法
第三步,每次访问都会调用
- 执行destroy销毁方法
第四步,在web工程停止时会调用
4. GET和POST请求的分发处理
package com.han.code;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @version 1.0
* @ClassName HelloServlet
* @Description 手动实现Servlet程序
* @Author hlr
* @Date 2021/5/24 16:25
*/
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("1 构造器方法");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化方法");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* service方法是专门用来处理请求和响应的
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service ==Hello Servlet 被访问了");
// 类型转换(有getMethod()方法)
HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
// 获取请求方式
String method = httpServletRequest.getMethod();
if("GET".equals(method)){
toget();
}else if("POST".equals(method)){
topost();
}
}
/**
* get请求的操作
* @return
*/
public void toget(){
System.out.println("get请求");
}
/**
* post请求
* @return
*/
public void topost(){
System.out.println("post请求");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4 destroy 销毁方法");
}
}
5.通过继承HttpServlet实现Servlet程序
- 一般在实际项目开发中,都是使用继承HttpServlet实现Servlet程序
- 编写一个类去继承HttpServlet类
- 根据业务需要重写doGet或 doPost方法
- 到web.xml中配置Servlet程序的访问地址
package com.han.code;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @version 1.0
* @ClassName HttpServletex
* @Description TODO
* @Author hlr
* @Date 2021/5/24 18:20
*/
public class HttpServletex extends HttpServlet {
/**
* doGet() 在get请求的时候调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("httpServlet 的get请求");
}
/**
* doPost() 在post请求的时候调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("httpServlet 的post请求");
}
}
6.使用IDEA直接创建Servlet程序
配置Servlet信息