JavaWeb--快速入门Servlet(Part1)

110 阅读4分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战

前言

路遥说,在一个平凡的世界里,人要承受一定的痛苦和不安。但只要相信个体奋斗的力量,坚定地与生存搏斗,就能过上想要的生活。

很喜欢《平凡的世界》的一句话,一直不断的鼓励我努力向前,也送个各位看到这个写的很烂的文章的人,共勉~

一、Servlet

运行在服务器端的小程序,他可以接受客户端发送来的请求,并响应数据给客户端

Servlet是JavaEE规范之一。规范自然就是接口

Servlet就是JavaWeb三大组件之一。三大组件分别是:Servlet、Filter、Listerner监听器

1.什么是JavaEE?

Java EE,Java 平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE)

是 Sun 公司为企业级应用推出的标准平台,用来开发B/S架构软件。Java EE 可以说是一个框架,也可以说是一种规范。

2.如何手动实现 Servlet程序

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

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

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

实例

package com.caq.study;

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

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init初始化方法");

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

    @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("hello servlet!");

        //ServletRequest是HttpServletRequest的父接口,我们通过强转为一个子接口类型
        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请求");
        System.out.println("get请求");
    }

//    post的请求
    public void  doPost(){
        System.out.println("post请求");
        System.out.println("post请求");
    }

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

    @Override
    public void destroy() {

    }
}

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 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--    servlet标签给Tomcat配置Servlet程序-->
    <servlet>
        <!--        给servlet起一个别名,一般是类名-->
        <servlet-name>HelloServlet</servlet-name>

        <!--        servlet-class是Servlet类的全类名-->
        <servlet-class>com.caq.study.HelloServlet</servlet-class>

    </servlet>

    <!--    servlet-mapping标签给servlet配置访问地址-->
    <servlet-mapping>
        <!--        servlet标签作用是告诉服务器,当前配置的地址给那个servlet程序使用-->
        <servlet-name>HelloServlet</servlet-name>

        <!--        url-pattern标签配置访问地址-->

        <url-pattern>/hello</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>HelloServlet2</servlet-name>
        <servlet-class>com.caq.study.HelloServlet2</servlet-class>
    </servlet>

    <!--    <url-pattern标签配置访问地址
            /   斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径
            /hello  表示地址为:http://ip:port/工程路径/hello
    -->
    <servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>HelloServlet3</servlet-name>
        <servlet-class>com.caq.study.HelloServlet3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet3</servlet-name>
        <url-pattern>/hello3</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ContextServlet1</servlet-name>
        <servlet-class>com.caq.study.ContextServlet1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ContextServlet1</servlet-name>
        <url-pattern>/context1</url-pattern>
    </servlet-mapping>
</web-app>

image-20211224183426450

image-20211224183344579

3.url 地址到 Servlet机制

里面写的很详细了,不需要怎么补充了

image-20211224183830083

4.Servlet 的生命周期

1、执行Servlet构造器方法

2、执行init初始化方法

第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。

3、执行 service 方法

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

4、执行 destroy 销毁方法

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

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

实例和标题2代码一致,我都写在一块了

下面补充一点知识

Get请求和Post请求的区别?

GET请求一般用去请求获取数据

POST一般作为发送数据到后台时使用

GET请求也可传参到后台,但是其参数在浏览器的地址栏的url中可见,所以隐私性安全性较差,且参数长度也是有限制的

POST请求传递参数放在Request body中,不会在url中显示,比GET要安全,且参数长度无限制

GET请求比较常见的方式是通过url地址栏请求

POST最常见是通过form表单发送数据请求

6.通过继承 HttpServlet 实现 Servlet

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

1、编写一个类去继承 HttpServlet 类

2、根据业务需要重写 doGet 或 doPost 方法

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

package com.caq.study;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

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

    /**
     * 在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方法");
    }
}

xml文件在第一个实例中

image-20211224185430889

7.如何使用idea创建Servlet程序

image-20211224190002979

8.Servlet类的继承体系

image-20211224190032839

二、ServletConfig类

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

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

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

ServletConfig 类的三大作用

1、可以获取 Servlet 程序的别名 servlet-name 的值

2、获取初始化参数 init-param

3、获取 ServletContext 对象