【学习记录】JavaWeb Part2:Servlet

Servlet

a)什么是 Servlet

1、Servlet 是 JavaEE 规范之一。规范就是接口

2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。

3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

b)手动实现 Servlet 程序

1、编写一个类去实现 Servlet 接口

2、实现 service 方法,处理请求,并响应数据

3、到 web.xml 中去配置 servlet 程序的访问地址

c)url 地址到 Servlet 程序的访问

 

d)Servlet 的生命周期

1、执行 Servlet 构造器方法

2、执行 init 初始化方法 第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。

3、执行 service 方法 第三步,每次访问都会调用。

4、执行 destroy 销毁方法 第四步,在 web 工程停止的时候调用。

get和post

1.get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);post请求一般是去提交数据。

2.get参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,
    post请求数据是放在body中,没有的长度限制,;

3.get请求刷新服务器或者回退没有影响,

    post请求回退时会重新提交数据请求。

4.get请求可以被缓存,post请求不会被缓存。

5.get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。

6.get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。

Servlet的方法

那么问题来了,Servlet那些重写的方法是做什么的呢?

上代码,见注释

 

!!(hello.html&service图片)

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

f) 通过继承 HttpServlet 实现Servlet 程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。

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

package com.atguigu.servlet;
/*@date 2022-07-13 19:49
 */

import com.sun.xml.ws.transport.http.servlet.ServletAdapter;

import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class Hello implements Servlet {

    public Hello(){
        System.out.println("1 构造器方法");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 init初始化方法");
        /*.init()方法:
        在servlet的生命周期中,仅执行一次init()方法。
        它是在服务器装入servlet的时候执行的。
        可以配置服务器,以在启动服务器或客户机首次访问servlet时装入servlet。
        无论有多少客户机访问servlet,都不会重复执行init()。*/

        System.out.println("2 init 初始化方法");
        // 1、可以获取 Servlet 程序的别名 servlet-name 的值
        System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());
        // 2、获取初始化参数 init-param
        System.out.println("初始化参数 username 的值是;" + servletConfig.getInitParameter("username"));
        System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));
        // 3、获取 ServletContext 对象
        System.out.println(servletConfig.getServletContext());
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    //在service方法中获取请求的方式,做出判断,调用不同的方法
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        /*Service()方法是servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的service()方法就要被调用,
       传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。
        如果HTTP请求方法为GET,则缺省情况下就调用doGet()。
        所以敲代码时不必覆盖service()方法,只需覆盖想用的的do方法即可。(下方代码已经体现!嘿嘿)
        当post请求时,同上!
        当不会修改服务器端的数据时,应该使用doGet()方法。*/

        System.out.println("3 service方法被访问");
        //类型转换,因为他有getMethod方法
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        /*在 Servlet API 中,定义了一个 HttpServletRequest 接口,它继承自 ServletRequest 接口。
        HttpServletRequest 对象专门用于封装 HTTP 请求消息,简称 request 对象。
        HTTP 请求消息分为请求行、请求消息头和请求消息体三部分,所以 HttpServletRequest 接口中定义了获取请求行、请求头和请求消息体的相关方法。*/
        //👆代码就很好理解了,将 service()的servletRequest属性转化成HttpServletRequest,再用HttpServletRequest的getMethod获取方法
        //获取请求的方式
        String method = httpServletRequest.getMethod();
        //执行获取方法后的对应操作
        System.out.println(method);
        if("GET".equals(method)){
            doGet();
        //很多很多内容就写在doGet和doPost方法里面了
            //看上去整洁,后期好维护
        }else {
            doPost();
        }
    }
    public void doGet(){
        System.out.println("get请求");
        System.out.println("get请求");
        System.out.println("get请求");
        System.out.println("很多很多get请求");
    }
    public void doPost(){
        System.out.println("POST请求");
        System.out.println("POST请求");
        System.out.println("POST请求");
        System.out.println("很多很多POST请求");

    }

    @Override
    public String getServletInfo() {
        return null;
    }


    @Override
    public void destroy() {
            /*destroy()方法仅执行一次,即在服务器停止且卸装servlet时执行该方法。
    一个servlet在运行service()方法时可能产生其他的线程,因此请确认使用destroy()方法时,这些线程已终止或完成。*/
        System.out.println("4 销毁方法");
    }
}

g)使用 IDEA 创建Servlet 程序

h)Servlet 类的继承体系

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值