JavaWeb 学习笔记 day05 Servlet

本文详细介绍了JavaWeb中的Servlet,包括手动实现Servlet、GET和POST请求的处理、ServletConfig和ServletContext的作用。同时,文章深入讲解了HTTP协议,涵盖请求和响应的格式,以及常见的请求方法和响应状态码。
摘要由CSDN通过智能技术生成

Servlet

简介:

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

手动实现 Servlet 程序

  1. 创建 Servlet 类,并实现 service 抽象方法,处理请求并响应
public class HelloServlet implements Servlet {
    @Override
        //其他抽象方法也需事项,这里只演示 service
        // service 方法是专门用来处理请求和响应的
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("HelloServlet被访问了");
    }
}
  1. 到 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 类起一个别名-->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.test.day06_servlet.HelloServlet</servlet-class>
    </servlet>
    <!--给指定别名的 servlet 程序绑定访问的地址-->
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <!--/ 斜杠表示为 http://ip:port/工程路径-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>
  1. Servlet 的生命周期
    ① 执行 Servlet 构造器方法
    ② 执行 init 初始化方法( 第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。)
    ③ 执行 service 方法( 第三步,每次访问都会调用。 )
    ④执行 destroy 销毁方法 (第四步,在 web 工程停止的时候调用)

GET请求和POST请求的分发处理

  1. 实现 Servlet
public class HelloServlet implements Servlet {
    @Override
        //其他抽象方法也需事项,这里只演示 service
        // service 方法是专门用来处理请求和响应的
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("HelloServlet被访问了");
        HttpServletRequest h = (HttpServletRequest) servletRequest;
        String method = h.getMethod();
        if("GET".equals(method)){
            System.out.println("GET请求");
        }
        else if("POST".equals(method)){
            System.out.println("POST请求");
        }
    }
  1. 通过继承 HttpServlet 实现 Servlet 程序
    简介:HttpServlet 是 Servlet 实现类 GenericServlet 的子类,已经实现了请求分发,无需再手动实现,实际开发中只需重写 doGet() 或 doPost() 等方法。
public class HelloServlet 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请求");
    }
}

ServletConfig 类

简介:Servlet 程序的配置信息类

作用

  1. 可以获取 Servlet 程序的别名 servlet-name 的值
  2. 获取初始化参数 init-param
  3. 获取 ServletContext 对象

注意:在重写 init() 方法时,一定要显式的调用父类的方法。因为 ServletConfig 对象就是在父类的 init() 方法中被初始化的。

	@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("POST请求");
        ServletConfig servletConfig = getServletConfig();
        System.out.println(servletConfig.getInitParameter("username"));
        System.out.println(servletConfig.getInitParameter("password"));

        ServletContext servletContext = servletConfig.getServletContext();
    }
<servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.test.day06_servlet.HelloServlet</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>abc123</param-value>
        </init-param>
    </servlet>

ServletContext 类

简介

  1. ServletContext 是一个接口,它表示 Servlet 上下文对象
  2. 一个 web 工程,只有一个 ServletContext 对象实例。
  3. ServletContext 对象是一个域对象,可以像 map 一样添加查找键值对。
  4. ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。

作用

  1. 获取 web.xml 中配置的上下文参数 context-param
  2. 获取当前的工程路径,格式: /工程路径
  3. 获取工程部署后在服务器硬盘上的绝对路径
  4. 像 Map 一样存取数据
@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("POST请求");
        ServletContext servletContext = getServletContext();
        servletContext.setAttribute("sex","male");
        System.out.println(servletContext.getInitParameter("name"));
        System.out.println(servletContext.getInitParameter("age"));
        System.out.println(servletContext.getAttribute("sex"));
        
        System.out.println(servletContext.getRealPath("/"));
    }
<context-param>
        <param-name>name</param-name>
        <param-value>Tom</param-value>
    </context-param>
    <context-param>
        <param-name>age</param-name>
        <param-value>18</param-value>
    </context-param>

HTTP 协议

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

请求的 HTTP 协议格式

  1. GET 请求
    请求行
    (1) 请求的方式 GET
    (2) 请求的资源路径[+?+请求参数]
    (3) 请求的协议的版本号 HTTP/1.1
    请求头
    key : value 组成 不同的键值对,表示不同的含义。

  2. POST 请求
    1、请求行
    2、请求头
    空行
    3、请求体:就是发送给服务器的数据

常见的 GET 请求和 POST 请求

  1. GET 请求
    ① form 标签 method=get
    ② a 标签
    ③ link 标签引入 css
    ④ Script 标签引入 js 文件
    ⑤ img 标签引入图片
    ⑥ iframe 引入 html 页面
    ⑦ 在浏览器地址栏中输入地址后敲回车
  2. POST 请求
    ① form 标签 method=post

响应的 HTTP 协议格式

  1. 响应行
  2. 响应头
  3. 响应体: 就是回传给客户端的数据

常用的响应码说明

  1. 200 表示请求成功
  2. 302 表示请求重定向
  3. 404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
  4. 500 表示服务器已经收到请求,但是服务器内部错误(代码错误)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值