Servlet(一)

文章目录

    • 1.Servlet整体框架
    • 2.Servlet快速入门
        • 1.创建项目配置基本环境
        • 2.添加jar包
          • 1.在WEB-INF下创建目录lib,添加文件
          • 2.添加到项目中
          • 3.配置代码提示
        • 3.src下创建文件
        • 4.实现Servlet接口
        • 5.在web.xml配置HelloServlet
        • 6.通过浏览器访问HelloServlet
    • 3.浏览器访问Servlet的流程分析
        • 一共有三个容器
          • url-name
          • name-全类名
          • name-实例
        • Servlet的生命周期
          • 初始化阶段
          • 处理浏览器请求阶段
          • 终止阶段
    • 4.GET和POST的分发处理
          • 代码示例
    • 5.继承HttpServlet来开发Servlet
        • 1.创建文件
        • 2.配置web.xml
        • 3.实现doGet和doPost方法并编写
        • 4.浏览器访问
        • 5.过程解析
          • 1.http://localhost:8080/servlet/hiServlet发送请求到Tomcat服务
          • 2.Tomcat服务根据资源路径/hiServlet,找到HelloServlet.HiServlet
          • 3.创建HiServlet的实例,并调用它的init()方法和service()方法
          • 4.init()方法就是个空的,重点看service()方法,是它的父类HttpServlet的
        • 6.debug方法
          • 1.打断点
          • 2.debug
          • 3.输入网址
          • 4.此时由于是get方式,所以程序会停在断点处
          • 5.查看运行类型的确是HiServlet
    • 6.Servlet注意事项
          • 最简化的浏览器访问Servlet过程
    • 7.Servlet注解方式
        • 1.快速入门
          • 1.代码实例
          • 2.结果
        • 2.Servlet注解方式解密
        • 1.与xml方式的区别
          • 简要介绍
        • 2.Servlet注解的参数说明
        • 3.注解URL的4种匹配方式
          • 1.精确匹配
          • 2.目录匹配
          • 3.扩展名匹配
          • 4.任意匹配
        • 4.URL配置注意事项
    • 8.课后练习
        • 1.练习一
          • login.html
          • CatServlet.java
          • web.xml
          • 结果
        • 2.练习二
          • login.html
          • DogServlet.java
          • web.xml
          • 结果
        • 3.练习三
          • PigServlet.java
          • 结果

1.Servlet整体框架

image-20240124163002788

image-20240124162404813

2.Servlet快速入门

image-20240124163547177

1.创建项目配置基本环境

上个文件有详细介绍

2.添加jar包
1.在WEB-INF下创建目录lib,添加文件

image-20240124164207245

2.添加到项目中

image-20240124164258709

image-20240124164305496

3.配置代码提示

image-20240124164338653

3.src下创建文件

image-20240124164556738

4.实现Servlet接口
package HelloServlet;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class HelloServlet implements Servlet {
    /**
     * 当创建HelloServlet会调用,且只会调用一次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init()");
    }

    /**
     * 返回ServletConfig,也就是servlet的配置
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 1.该方法处理浏览器的请求
     * 2.当浏览器每次请求一次servlet时,就会调用一次
     * 3.当tomcat调用该方法时,会把http请求的数据封装成实现ServletRequest接口的request对象
     * 4.通过servletRequest对象,可以得到用户提交的数据
     * 5.ServletResponsed对象可以用于返回数据给tomcat服务器
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hi, helloServlet");
    }

    /**
     * 返回servlet的信息,使用较少
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 1.该方法是servlet销毁时调用的
     * 2.只会调用一次
     */
    @Override
    public void destroy() {

    }
}

5.在web.xml配置HelloServlet

image-20240124172446558

6.通过浏览器访问HelloServlet

image-20240124182128080

image-20240124182120106

3.浏览器访问Servlet的流程分析

image-20240124184518042

一共有三个容器
url-name
name-全类名
name-实例
Servlet的生命周期
初始化阶段

image-20240124190145517

处理浏览器请求阶段

image-20240124190752781

终止阶段

image-20240124191101583

4.GET和POST的分发处理

代码示例
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //GET和POST的分发处理
        //1.首先需要知道,ServletRequest的运行类型其实是它的子类HttpServletRequest的实现类,而getMethod方法是这个子接口的,所以需要将这个父接口转换为子接口的类型
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; //现在就是他的子接口,指向它的实现类,封装了请求的方法
        String method = httpServletRequest.getMethod();
        if (method.equals("GET")) {
            doGet();
        }
        else if (method.equals("POST")) {
            doPost();
        }
    }
    //编写doGet和doPost方法,用于分发处理
    public void doGet() {
        System.out.println("doGet被调用");
    }
    public void doPost() {
        System.out.println("doPost被调用");
    }

<%--
  Created by IntelliJ IDEA.
  User: 8615941515990
  Date: 2024/1/24
  Time: 16:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="http://localhost:8080/servlet/helloServlet" method="post">
    username: <input type="text" name="username">
  </form>
  </body>
</html>

5.继承HttpServlet来开发Servlet

image-20240124201254544

1.创建文件

image-20240124202328459

2.配置web.xml

image-20240124202349902

3.实现doGet和doPost方法并编写
package HelloServlet;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class HiServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hi HiServlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

4.浏览器访问

image-20240124202541258

image-20240124202548212

5.过程解析
1.http://localhost:8080/servlet/hiServlet发送请求到Tomcat服务
2.Tomcat服务根据资源路径/hiServlet,找到HelloServlet.HiServlet

image-20240124203535728

3.创建HiServlet的实例,并调用它的init()方法和service()方法
4.init()方法就是个空的,重点看service()方法,是它的父类HttpServlet的

image-20240124204341205

6.debug方法
1.打断点

2.debug

image-20240124204841728

3.输入网址

image-20240124204929537

4.此时由于是get方式,所以程序会停在断点处

image-20240124204959295

5.查看运行类型的确是HiServlet

image-20240124205040526

6.Servlet注意事项

image-20240125092421195

image-20240125092403908

最简化的浏览器访问Servlet过程
  1. 浏览器向Tomcat服务发送请求
  2. Tomcat服务根据浏览器地址最后的路由/xxx去web.xml中找到对应的类并创建一个对象
  3. 调用init()方法和service()方法
  4. 第二次则直接调用service()方法

7.Servlet注解方式

1.快速入门

image-20240125092641909

1.代码实例
package annotation;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
//使用注解配置路由,一个servlet可以有多个路由,访问网址为http://localhost:8080/servlet/ok1 或者http://localhost:8080/servlet/ok2
@WebServlet(urlPatterns = {"/ok1", "/ok2"})
public class OkServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("注解的doGet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("注解的doPost");
    }
}

2.结果

image-20240125093844838

image-20240125093924181

2.Servlet注解方式解密
1.与xml方式的区别

image-20240125094850575

简要介绍
  1. 浏览器向Tomcat服务发送请求
  2. 服务扫描所有类的全路径并且通过反射获取注解对象,从而得到urlPatterns(路由)
  3. 将其与浏览器地址最后的/xxx比对,如果比对成功则调用init()方法和service()方法
  4. 第二次就直接调用service()方法
2.Servlet注解的参数说明

image-20240125093204460

3.注解URL的4种匹配方式
1.精确匹配

image-20240125102457867

image-20240125102617687

image-20240125102629995

image-20240125102635046

2.目录匹配

image-20240125102704651

image-20240125102838187

image-20240125102846193

image-20240125102855041

3.扩展名匹配

image-20240125102949068

image-20240125103237714

image-20240125103245219

image-20240125103254255

4.任意匹配

image-20240125103315610

image-20240125103509103

image-20240125103534263

image-20240125103540140

4.URL配置注意事项

image-20240125104755761

image-20240125105134594

8.课后练习

1.练习一

image-20240125105501857

login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/servlet/cat" method="post">
  username:<input name="username" type="text">
</form>
</body>
</html>
CatServlet.java
package HomeWork;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class CatServlet implements Servlet {
    private int num = 0; //统计次数
    @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("访问次数:" + (++num));
        //向下转型获取请求方式
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();
        if (method.equals("GET")) {
            System.out.println("GET");
        }
        else if (method.equals("POST")) {
            System.out.println("POST");
        }
    }


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

    @Override
    public void destroy() {

    }
}

web.xml

image-20240125135254570

结果

image-20240125135318697

image-20240125135338394

2.练习二

image-20240125135421608

login.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/servlet/dog" method="post">
  username:<input name="username" type="text">
</form>
</body>
</html>
DogServlet.java
package HomeWork;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class DogServlet extends HttpServlet {
    //统计次数
    private int get = 0;
    private int post = 0;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("GET:" + (++get));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("POST:" + (++post));
    }
}

web.xml

image-20240125140257291

结果

image-20240125140329241

image-20240125140340201

3.练习三

image-20240125140424331

PigServlet.java
package HomeWork;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.InetAddress;

/**
 * @author 孙显圣
 * @version 1.0
 */
@WebServlet(urlPatterns = {"/pig1", "/pig2"})
public class PigServlet extends HttpServlet {
    //统计次数
    private int get = 0;
    private int post = 0;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("发出请求的浏览器的ip:" + req.getRemoteAddr());
        System.out.println("GET:" + (++get));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("发出请求的浏览器的ip:" + req.getRemoteAddr());
        System.out.println("POST:" + (++post));
    }
}

结果

image-20240125141918306

image-20240125141926631

image-20240125141949918

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/527553.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

axios是什么?axios使用axios和ajax

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于浏览器和 Node.js 环境。它是由 GitHub 用户 mzabriskie 开发的&#xff0c;并且得到了广泛的社区支持。Axios 的设计目标是提供一种简洁、易用且功能强大的 HTTP 请求方式&#xff0c;以替代传统的 Ajax&#xff08;A…

ssm031社区管理与服务的设计与实现+jsp

社区管理与服务系统的设计与实现 摘 要 Abstract 第一章 绪论 1.1研究背景 1.2 研究现状 1.3 研究内容 第二章 系统关键技术 2.1 Java简介 2.2 MySql数据库 2.3 B/S结构 2.4 Tomcat服务器 第三章 系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.…

usbserial驱动流程解析_Part3_write_read数据流分析

usb转串口设备需要进行收发&#xff0c;主机接到uart rx线上的数据&#xff0c;把主机数据发送到 uart tx线上&#xff0c;对应的就是read函数和write函数&#xff0c;以上两个Part提到了tty有关的函数&#xff0c;在以下结构体被定义&#xff0c;write被指定为serial_write&a…

在 VS Code 中使用 GitHub Copilot

Code 结合使用。 GitHub Copilot 是什么 GitHub Copilot 是一个可以帮助你更简单、更快速地编写代码的工具&#xff0c;由 GPT-3 提供支持。你只需编写所需代码的描述——例如&#xff0c;编写一个函数来生成一个随机数&#xff0c;或对一个数组进行排序——Copilot 就会为你…

ATM04-6P 安费诺汽车连接器6芯压线端子胶壳

ATM04-6P是一款压线端子胶壳&#xff0c;属于Amphenol&#xff08;安费诺&#xff09;品牌 ATM04-6P 规格信息&#xff1a; 制造商:Amphenol 产品种类:汽车连接器 RoHS:是 产品:Connectors 位置数量:6 Position 型式:Receptacle (Female) 线规量程:22 AWG to 16 AWG 系列:ATM 颜…

蓝桥杯真题Day48 倒计时7天 练了几道真题小程序+回溯剪枝应用一个小程序

[蓝桥杯 2023 省 A] 更小的数 题目描述 小蓝有一个长度均为 n 且仅由数字字符 0∼9 组成的字符串&#xff0c;下标从0到 n−1&#xff0c;你可以将其视作是一个具有n位的十进制数字num&#xff0c;小蓝可以从num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次…

RuleEngine规则引擎底层改造AviatorScript 之函数执行

https://gitee.com/aizuda/rule-engine-open 需求&#xff1a;使用上述开源框架进行改造&#xff0c;底层更换成AviatorScript &#xff0c;函数实现改造。 原本实现方式 Overridepublic Object run(ExecuteFunctionRequest executeTestRequest) {Integer functionId executeT…

5G如何助力物流智能化转型

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;你的老朋友&#xff0c;老K。行业群 新书《智能物流系统构成与技术实践》人俱乐部 整版PPT和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 智能制造-话题精读 1、西门子…

移植内核linux-2.6.32.24遇见的问题和解决方法

目录 概述 1 配置编译环境 2 编译内核 2.1 配置内核 2.2 编译存在的问题 2.3 验证zImage 3 移植 yaffs2 3.1 下载yaffs2 3.2 为内核打上 yaffs2 补丁 3.3 配置和编译带 YAFFS2 支持的内核 3.3.1 配置 YAFFS2内核 3.3.2 编译带YAFFS2 支持的内核 3.4 验证带YAFFS2 支…

Mudbus协议CRC校验码C#

Mudbus协议CRC校验码C# 什么是modbus协议特点协议格式modbus-crc16校验原理方法帧校验CRC计算方法&#xff1a;例子 C#代码Demo源码下载 什么是modbus Modbus是一种串行通信协议&#xff0c;最初由Modicon&#xff08;目前属于施耐德电气公司&#xff09;于1979年开发 Modbus协…

机器学习知识点

1鸢尾花分类 鸢尾花分类问题是一个经典的机器学习问题&#xff0c;旨在根据鸢尾花的花萼长度、花萼宽度、花瓣长度和花瓣宽度等特征&#xff0c;将鸢尾花分成三个品种&#xff1a;山鸢尾&#xff08;setosa&#xff09;、变色鸢尾&#xff08;versicolor&#xff09;和维吉尼亚…

使用 proxySQL 来代理 Mysql

我有若干台云主机&#xff0c; 但是只有1个台vm 具有外部ip 而在另1台vm上我安装了1个mysql instance, 正常来讲&#xff0c; 我在家里的电脑是无法连接上这个mysql 尝试过用nginx 代理&#xff0c; 但是nginx只能代理http协议的&#xff0c; mysql 3306 并不是http协议 解决…

Leetcode面试经典150_Q14最长公共前缀

题目&#xff1a; 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀&#xff0c;返回空字符串 ""。 思路A&#xff1a;横向/纵向扫描 Python&#xff1a; class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:s "…

Mac 每次重启终端都要重新配置mysql环境变量解决办法

1、问题 Mac 每次关闭终端后&#xff0c;mysql环境配置就失效了&#xff0c;需要重新配置mysql环境变量 2、解决方法 在 " ~/.zshrc "文件添加" source ~/.bash_profile "即可 vim ~/.zshrc source ~/.bash_profile 3、验证 退出终端后重新打开终端 mys…

PDF锐化

PDF Shaper Ultimate(pdf转图片) 编辑->添加文件->选中一个要处理的pdf 操作->转换->PDF转为图片 ComicEnhancerPro设置(把图片锐化) PDF Shaper Ultimate(图片转pdf) 编辑-添加图片->选中所有锐化处理后的图片 转换->图片转为pdf&#xff08;会把所有图…

3. Django 初探路由

3. 初探路由 一个完整的路由包含: 路由地址, 视图函数(或者视图类), 可选变量和路由命名. 本章讲述Django的路由编写规则与使用方法, 内容分为: 路由定义规则, 命名空间与路由命名, 路由的使用方式.3.1 路由定义规则 路由称为URL (Uniform Resource Locator, 统一资源定位符)…

Springboot使用教程

二、配置文件 SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1b; •application.properties •application.yml 1.配置文件的作用&#xff1a; 修改SpringBoot自动配置的默认值&#xff1b;SpringBoot在底层都给我们自动配置好&#xff1b; Y…

HiveSQL之lateral view

lateral view是hiveQL中的一个高级功能&#xff0c;用于和表生成函数一起&#xff0c;来处理嵌套数组和结构的数据&#xff0c;特别是在处理复杂的数据结构如JSON或数组内嵌套数组时特别有用。它允许用户在每一行上应用TGF&#xff08;表生成函数&#xff09;&#xff0c;将生成…

再探Java为面试赋能(二)Java基础知识(二)反射机制、Lambda表达式、多态

文章目录 前言1.4 反射机制1.4.1 Class对象的获取1.4.2 Class类的方法1.4.3 通过反射机制修改只读类的属性 1.5 Lambda表达式1.5.1 函数式接口1.5.2 Lambda表达式的使用 1.6 多态1.6.1 多态的概念1.6.2 多态的实现条件1.6.3 重载&#xff08;Overload&#xff09;和重写&#x…

odoo16 安装

1、安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 2、安装git brew install git 3、安装python3 brew install python3 brew install python3.10 -- odoo16 如果用python3.12 - 会报错 brew unlink python3.1…