JavaWeb开发 JavaWeb三大组件之Servlet技术(一)

1.Servlet技术

1.1 Servlet是什么

对于没有接触过Servlet程序的小伙伴在首次学习中,可能会有一个大大的疑问,什么是Servlet?

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

1.2 手动实现第一个Servlet程序

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

手动创建一个Servlet程序实现Servlet接口,实现service方法

public class HelloServlet implements Servlet {
    /***
     * service方法用来处理请求和响应的
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("HelloServlet被访问了");
    }

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

    @Override
    public void destroy() {

    }
}

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">
    <!--servelt标签给Tomcat服务器配置Servlet程序-->
    <servlet>
        <!--servlet-name标签:给Servlet程序起一个别名(一般是类名)-->
        <servlet-name>HelloServlet</servlet-name>
        <!--servlet-class是Servlet程序的全类名-->
        <servlet-class>com.westos.servlet.HelloServlet</servlet-class>
    </servlet>

    <!--servlet-mapping标签:可以给servelt程序配置访问路径-->
    <servlet-mapping>
        <!--servlet-name标签的作用是告诉服务器,当前配置的地址给哪个Servlet程序使用-->
        <servlet-name>HelloServlet</servlet-name>
        <!--url-pattern标签配置访问地址
        / 斜杠表示服务器解析的时候,表示地址为:http://ip:port/工程路径
        /hello 表示地址为:http://ip:port/工程路径/helloo
        -->
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>
</web-app>

在浏览器地址栏输入:
在这里插入图片描述
运行后的结果为:
在这里插入图片描述


1.3 url地址(浏览器地址栏输入的地址)到Servlet程序访问

从浏览器地址栏中输入的地址到Servlet程序访问过程可以用下图具体进行阐述。

在这里插入图片描述


1.4 Servlet的生命周期

Servlet内方法的执行顺序:

  • 1.执行Servlet构造器方法
  • 2.执行init初始化方法

注意:第1、2步,是在第一次访问的才会调用。

  • 3.执行service方法

第3步,每次访问都会被调用。

  • 4.执行destory方法

第4步,在web工程停止的时候调用。


1.5 Get和Post请求的分发处理

public class HelloServlet2 implements Servlet {

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

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service方法被执行了==HelloServlet被访问了");
        //类型转换(因为转换后的类型具有getMethod()方法)
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
       //获取请求的方式
        String method = httpServletRequest.getMethod();

        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请求");
    }

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

    @Override
    public void destroy() {

    }
}

运行后的结果为:
在这里插入图片描述


1.6 通过继承HttpServlet实现Servlet程序

上面实现Servlet接口不是特别方便,在一般实际项目中,都是使用继承HttpServlet类的方式去实现Servlet程序。

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

Servlet类的代码:

public class HelloServlet3 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("HelloServlet3的doGet方法");

    }

    /***
     *doPost()在post请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet3的doPost方法");

    }
}

web.xml中的配置

 <servlet>
        <servlet-name>HelloServlet3</servlet-name>
        <servlet-class>com.westos.servlet.HelloServlet3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet3</servlet-name>
        <url-pattern>/helloServlet3</url-pattern>
    </servlet-mapping>

运行后的结果为:
在这里插入图片描述


1.7 使用IDEA快速创建Servlet程序

请添加图片描述


1.8 Servlet类的继承体系

在这里插入图片描述


2.ServletConfig类

Servlet类从类名上来看,是Servlet程序的配置信息类。

Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们只负责使用。

Servlet程序默认是第一次访问的时候创建,ServletConfig是每个ServletConfig是每个Servlet程序创建时,就会创建一个对应的ServletConfig对象。

ServletConfig类的三大作用:

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

Servlet中的代码:

public class HelloServlet4 extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init  初始化方法");
        //1.可以获取Servlet程序的别名servlet-name的值
        System.out.println("HelloServlet程序的别名是:"+config.getServletName());
        //2.获取初始化参数init-param
        System.out.println("初始话参数username的值为:"+config.getInitParameter("username"));
        System.out.println("初始化参数url的值是:"+config.getInitParameter("url"));
        //3.获取ServletContext对象
        System.out.println(config.getServletContext());
    }
}

web.xml中的配置:

 <!--servlet标签给Tomcat配置Servlet程序-->
    <servlet>
        <!--servlet-name标签Servlet程序起一个别名(一般是类名)-->
        <servlet-name>HelloServlet4</servlet-name>
        <servlet-class>com.westos.servlet.HelloServlet4</servlet-class>
        <!--init-param是初始化参数-->
        <init-param>
            <!--参数名-->
            <param-name>username</param-name>
            <!--参数值-->
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <!--参数名-->
            <param-name>url</param-name>
            <!--参数值-->
            <param-value>jdbc:mysql://localhost:3306/test</param-value>
        </init-param>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>HelloServlet4</servlet-name>
        <url-pattern>/helloServlet4</url-pattern>
    </servlet-mapping>

3.ServletContext类

3.1 ServletContext概述

  • 1.ServletContext是一个接口,它表示Servlet上下文对象。
  • 2.一个web工程,只有一个ServletContext对象实例。
  • 3.ServletContext对象是一个域对象。
  • 4.ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。

域对象,是可以像Map一样存取数据的对象,叫域对象。这里的域指的是存取数据的操作范围,为整个web工程。

存数据取数据删除数据
Mapput()get()remove()
域对象setAttribute()getAttribute()removeAttribute()

3.2 ServletContext类的四个作用

ServletContext类四个作用:

  • 1.获取web.xml中配置的上下文参数context-param
  • 2.获取当前的工程路径,格式:/工程路径
  • 3.获取工程部署在服务器硬盘上的绝对路径
  • 4.像Map一样存取数据

ServletContext代码配置上下文参数,当前工程路径,获取工程部署在服务器硬盘上的绝对路径:

public class HelloServlet5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取web.xml中配置的上下文参数context-param
        ServletContext context = getServletConfig().getServletContext();

        String username = context.getInitParameter("username");
        System.out.println("context-param参数username的值是:"+username);
        System.out.println("context-param参数password的值是:"+context.getInitParameter("password"));

        //2.获取当前的工程路径,格式:/工程路径
        System.out.println("当前工程路径:"+context.getContextPath());
        //3.获取工程部署在服务器硬盘上的绝对路径
        /**
         *  /  斜杠被服务器解析地址为:http://ip:port/工程名/  映射在IDEA代码的web目录
         */
        System.out.println("工程部署的路径在:"+context.getRealPath("/"));

    }
}

web.xml配置文件中的配置:

 <!--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>

运行后的结果为:
在这里插入图片描述

ServletContext像Map一样存取数据:

public class ContextServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取ServletContext对象
        ServletContext context = getServletContext();
        System.out.println(context);
        System.out.println("保存之前:Context获取key1的值为:"+context.getAttribute("key1"));
        context.setAttribute("key1","value1");
        System.out.println("Context1中获取域数据key1的值是"+context.getAttribute("key1"));
    }
}

运行后的结果为:
在这里插入图片描述


4.HTTP协议

4.1 HTTP协议的概述

协议是指双方或者多方相互约定好的,大家都需要遵守的规则称为协议。

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


4.2 请求的HTTP协议格式

客户端给服务器发送数据称为请求。服务器给客户端回传数据称为响应。

请求又分为GET请求和POST请求。

4.2.1 GET请求

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

在这里插入图片描述

在这里插入图片描述


4.2.2 POST请求

POST请求的组成部分
1.请求行:(1)请求的方式 POST (2)请求的资源路径[+?+请求参数] (3)请求的协议版本号:HTTP/1.1
2.请求头:key:value 不同的请求头,有不同的含义
空格
3.请求体======>>>>>就是发送到服务器的数据

在这里插入图片描述


4.3 常见的GET请求,POST请求

GET请求有哪些
1.form标签 method=get
2.a标签
3.link标签引入css
4.Script标签引入js文件
5.img标签引入html页面
6.iframe引入html页面
7.在浏览器地址栏中输入地址后敲回车
POST请求有哪些
1.form标签 method=post

4.4 响应的HTTP协议格式

响应的HTTP协议格式
1.响应行 (1)响应的协议和版本号(2)响应状态码 (3)响应状态描述符
2.响应头 key:value 不同的响应头,有不同的含义
空行
3.响应体=====》就是回传给客户端的数据

在这里插入图片描述


4.5 常用的响应码说明

常用响应码说明
200:表示请求成功
302:表示请求重定向
404:表示请求服务器已经收到了,但是要的数据不存在(请求地址错误)
500:表示服务器已经收到请求,但是服务器内部错误(代码错误)

4.6 谷歌浏览器查看HTTP协议

谷歌浏览器查看HTTP协议:

在这里插入图片描述


附录

学习图片资源内容来源:
B站:尚硅谷2020最新版JavaWeb全套教程,java web零基础入门完整版
https://www.bilibili.com/video/BV1Y7411K7zz?
上为个人学习笔记

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值