1. servlet技术基本概念

1. 什么是servlet?

  • servlet是接口:Interface servlet
  • Servlet 就 JavaWeb 三大组件之一。 三大组件分别是: Servlet 程序、 Filter 过滤器、 Listener 监听器。
  • Servlet 是运行在服务器上的一个 java 小程序, 它可以接收客户端发送过来的请求, 并响应数据给客户端

2. 手动实现 Servlet 程序

  • 1、 编写一个类去实现 Servlet 接口
  • 2、 实现 service 方法, 处理请求, 并响应数据
  • 3、 到 web.xml 中去配置 servlet 程序的访问地址

image.png

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--可以理解为程序存储位置--><!--servlet标签给tomcat配置servlet程序-->
  7. <servlet>
  8. <servlet-name>HelloServlet</servlet-name> <!--给servlet程序起别名,一般是类名-->
  9. <servlet-class>com.atguigu.servlet.HelloServlet</servlet-class><!--servlet程序的全类名-->
  10. </servlet>
  11. <!--可以理解为服务器内部处理过程--><!--<servlet-mapping>给servlet程序配置访问地址-->
  12. <servlet-mapping>
  13. <servlet-name>HelloServlet</servlet-name> <!--告诉服务器,当前配置的地址是给哪个servlet程序使用的-->
  14. <url-pattern>/hello</url-pattern><!--配置访问地址:http:ip:port/工程路径/hello-->
  15. </servlet-mapping>
  16. </web-app>

逻辑流程图:
image.png

3. servlet生命周期

  • step1、 执行 Servlet 构造器方法
  • step2、 执行 init 初始化方法
    • step1、step2是在第一次访问的时候执行,只执行这一次
  • step3、 执行 service 方法
    • step3 每次调用的时候都会执行
  • step4、 执行 destroy 销毁方法

4. 实际开发中都是继承HttpServlet实现Servlet程序

  • 1、 编写一个类去继承 HttpServlet 类
  • 2、 根据业务需要重写 doGet 或 doPost 方法
  • 3、 到 web.xml 中的配置 Servlet 程序的访问地址 ```java public class HelloServlet2 extends HttpServlet {

    @Override public void init(ServletConfig config) throws ServletException {

      super.init(config);
      System.out.println("重写了init初始化方法,做了一些工作");
    

    }

    /**

    • doGet()在get请求的时候调用
    • @param req
    • @param resp
    • @throws ServletException
    • @throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { int i = 12 / 0; System.out.println(“HelloServlet2 的doGet方法”); // 也可以使用. ServletConfig servletConfig = getServletConfig(); System.out.println(servletConfig);

      // 2、获取初始化参数init-param System.out.println(“初始化参数username的值是;” + servletConfig.getInitParameter(“username”)); System.out.println(“初始化参数url的值是;” + servletConfig.getInitParameter(“url”)); } /**

    • doPost()在post请求的时候调用
    • @param req
    • @param resp
    • @throws ServletException
    • @throws IOException */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(“HelloServlet2 的doPost方法”); } }
web.xml配置:
```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>

5. Servlet 类的继承体系

image.png

6. ServletConfig类

    1. 从名字上就可以知道是servlet程序的配置信息类
    1. 作用:
      • 1、 可以获取 Servlet 程序的别名 servlet-name 的值 :
        • 在httpServlet类中的init()方法中: String servletName = servletConfig.getServletName();
      • 2、 获取初始化参数 init-param :
        • String user = servletConfig.getInitParameter(“user”);
      • 3、 获取 ServletContext 对象 :

7. ServletContext接口

    1. 概念
      • ServletContext 是一个接口, 它表示 Servlet 上下文对象
    1. 特点
      • 一个 web 工程, 只有一个 ServletContext 对象实例
      • ServletContext 对象是一个域对象
        • 域对象, 是可以像 Map 一样存取数据的对象, 叫域对象
        • 这里的域指的是存取数据的操作范围, 整个 web 工程
          • image.png
      • ServletContext 是在 web 工程部署启动的时候创建。 在 web 工程停止的时候销毁
    1. 作用
    • 获取 web.xml 中配置的上下文参数 context-param

      <!--context-param是上下文参数(它属于整个web工程)-->
      <context-param>
         <param-name>username</param-name>
         <param-value>context</param-value>
      </context-param>
      <context-param>
         <param-name>password</param-name>
         <param-value>root</param-value>
      </context-param>
      
    • 获取当前的工程路径, 格式: /工程路径

    • 获取工程部署后在服务器硬盘上的绝对路径
    • 像 Map 一样存取数据

      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //        1、获取web.xml中配置的上下文参数context-param
         ServletContext context = getServletConfig().getServletContext();
      
         String username = context.getInitParameter("username");
         System.out.println("context-param参数username的值是:" + username);   //context
         System.out.println("context-param参数password的值是:" + context.getInitParameter("password"));  // root
      //        2、获取当前的工程路径,格式: /工程路径
         System.out.println( "当前工程路径:" + context.getContextPath() );
      //        3、获取工程部署后在服务器硬盘上的绝对路径
         /**
          *  / 斜杠被服务器解析地址为:http://ip:port/工程名/  映射到IDEA代码的web目录<br/>
          */
         System.out.println("工程部署的路径是:" + context.getRealPath("/"));
         System.out.println("工程下css目录的绝对路径是:" + context.getRealPath("/css"));
         System.out.println("工程下imgs目录1.jpg的绝对路径是:" + context.getRealPath("/imgs/1.jpg"));
      }
      

二、Http协议

1. http协议基本概念

1. 什么是 HTTP 协议 ?

  • HTTP 协议, 就是指, 客户端和服务器之间通信时, 发送的数据, 需要遵守的规则, 叫 HTTP 协议
  • HTTP 协议中的数据又叫报文

2. get请求:

image.png

3. post请求

image.png

4. 哪些是Get请求?哪些是Post请求?

image.png
image.png

5. HTTP响应

image.png
image.png