一、Servlet 1. 什么是Servlet
Servlet 是 JavaEE 规范之一,规范就是接口
Servlet 就 JavaWeb 三大组件之一,三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器
Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端
2. 手动实现Servlet程序首先还是在IDEA中创建一个对应的模块,具体看上一个,结果如下
编写一个类去实现 Servlet 接口
实现 service 方法,处理请求,并响应数据
到 web.xml 中去配置 servlet 程序的访问地址
1. 首先在src下建立一个java文件,实现Servlet接口,重写方法
现在先看Servlet(),其他的省略
package com.md.servlet; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * @author MD * @create 2020-07-24 14:44 */ public class HelloServlet implements Servlet { /** * service方法专门用来处理请求和响应的 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("Service方法"); } }2. 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 " version="4.0"> <!--servlet标签给Tomcat配置Servlet程序--> <servlet> <!--给servlet程序起一个别名,通常是类名--> <servlet-name>HelloServlet</servlet-name> <!--servlet程序全类名--> <servlet-class>com.md.servlet.HelloServlet</servlet-class> </servlet> <!--servlet-mapping标签给servlet程序配置访问地址--> <servlet-mapping> <!--servlet-name 作用是告诉服务器,当前配置的地址给那个Servlet程序使用--> <servlet-name>HelloServlet</servlet-name> <!-- 配置访问的地址 :port/hello , 可以自定义--> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>当访问地址:8080/hello时,可以看到输出语句了
3. url地址到Servlet程序 4. Servlet的声明周期执行 Servlet 构造器方法
执行 init 初始化方法
第一、二步,是在第一次访问的时候创建 Servlet 程序会调用
执行 service 方法 每次访问都会调用
执行 destroy 销毁方法 在 web 工程停止的时候调用
package com.md.servlet; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * @author MD * @create 2020-07-24 14:44 */ 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方法"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("4 destroy销毁方法"); } } // 结果如下: //1 构造器方法 //2 init初始化方法 只有第一次访问执行 //3. service方法 //3. service方法 每次刷新都会执行这个方法 //4 destroy销毁方法 关闭Tomcat会执行这个方法 4. GET 和 POST 请求的分发处理此时请求的话无论执行get或者是post请求都会执行service()方法,这样不方便,所以做了如下的改进,
其他方法省略,主要看service()
public class HelloServlet implements Servlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("3. service方法"); // 1. 类型转换 HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest; // 2. 获取请求的方式 String method = httpServletRequest.getMethod(); // 3. 处理不同的请求 if ("GET".equals(method)){ doGet(); }else if ("POST".equals(method)){ doPost(); } } /** * 做get请求的操作 */ public void doGet(){ System.out.println("get请求正在操作"); } /** * 做post请求的操作 */ public void doPost(){ System.out.println("post请求正在操作"); } } 5. 通过继承 HttpServlet 实现 Servlet 程序一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序
编写一个类去继承 HttpServlet 类
根据业务需要重写 doGet 或 doPost 方法
到 web.xml 中的配置 Servlet 程序的访问地址