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*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("init()");}/*** 返回ServletConfig,也就是servlet的配置* @return*/@Overridepublic 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*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("hi, helloServlet");}/*** 返回servlet的信息,使用较少* @return*/@Overridepublic String getServletInfo() {return null;}/*** 1.该方法是servlet销毁时调用的* 2.只会调用一次*/@Overridepublic 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的分发处理

代码示例
    @Overridepublic 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: 8615941515990Date: 2024/1/24Time: 16:38To 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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("hi HiServlet");}@Overrideprotected 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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("注解的doGet");}@Overrideprotected 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; //统计次数@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic 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");}}@Overridepublic String getServletInfo() {return null;}@Overridepublic 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;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("GET:" + (++get));}@Overrideprotected 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;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("发出请求的浏览器的ip:" + req.getRemoteAddr());System.out.println("GET:" + (++get));}@Overrideprotected 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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统架构最佳实践 -- 供应链系统架构

供应链系统是现代企业管理中不可或缺的一部分&#xff0c;它涉及到从原材料采购到产品销售的整个生产流程。一个高效的供应链系统可以帮助企业实现成本控制、库存优化和客户满意度提升等目标。在本文中&#xff0c;我们将讨论供应链系统的设计与实践。 一、供应链系统设计 业务…

前端开发攻略---Vue通过自定义指令实现元素平滑上升的动画效果(可以自定义动画时间、动画效果、动画速度等等)。

1、演示 2、介绍 这个指令不是原生自带的&#xff0c;需要手动去书写&#xff0c;但是这辈子只需要编写这一次就好了&#xff0c;后边可以反复利用。 3、关键API IntersectionObserver IntersectionObserver 是一个用于监测元素是否进入或离开视口&#xff08;viewport&#x…

系统架构最佳实践 -- 卡券系统架构设计

目录 1.卡券类型的设计&#xff1a; 2.用户领取和使用流程&#xff1a; 3.卡券发放与管理&#xff1a; 4.卡券核销与统计&#xff1a; 5.安全性和防欺诈&#xff1a; 随着电子商务的迅速发展&#xff0c;卡券系统成为了各种商家吸引用户和促销的重要手段。在设计和实现卡券…

R语言复现:轨迹增长模型发表二区文章 | 潜变量模型系列(2)

培训通知 Nhanes数据库数据挖掘&#xff0c;快速发表发文的利器&#xff0c;你来试试吧&#xff01;欢迎报名郑老师团队统计课程&#xff0c;4.20直播。 案例分享 2022年9月&#xff0c;中国四川大学学者在《Journal of Psychosomatic Research》&#xff08;二区&#xff0c;I…

2. Spring的创建和Bean的存取

经过前面的学习我们已经大体明白了 IOC 思想以及它的实现方式 DI &#xff0c;本节要讲的是如何Spring框架实现实现DI。 本节目标&#xff1a; Spring(Core) 项目创建将对象存储到 Spring 中将对象(bean)从 Spring 中取出 1. 创建 Spring 项目 与开篇演示的 Spring Boot 项目不…

斯坦福DeepMindGoogle提出SAFE:大模型长篇事实检验新标杆

关注公众号【AI论文解读】回复或者发送&#xff1a;论文解读 获取本文论文PDF 引言&#xff1a;大型语言模型的长篇事实性挑战 在当今信息爆炸的时代&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在处理开放式话题的事实性问题时&#xff0c;常常会产生包含事实错…

《QT实用小工具·二十三》 Ntp校时类

1、概述 源码放在文章末尾 该项目实现了 Ntp校时类 &#xff0c;包含如下功能&#xff1a; 可设置Ntp服务器IP地址。 推荐用默认的阿里云时间服务器 ntp1.aliyun.com 收到时间信号发出。 时间精确到秒。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #if…

嵌入式第三天:(C语言入门)

目录 一、跳转关键字 break&#xff1a; continue&#xff1a; goto&#xff1a; 二、函数 概述&#xff1a; 函数的使用&#xff1a; 无参无返回值&#xff1a; 有参无返回值&#xff1a; 有参有返回值&#xff1a; 返回值注意点&#xff1a; 函数的声明&#xff…

攻防世界-fileinclude

题目信息 分析过程 题目说flag在flag.php中&#xff0c;通过ctrluc查看源码&#xff0c;考虑文件上传漏洞。源码如下图所示&#xff1a; 源码如下&#xff1a; <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8&…

字节对编码 (BPE):提升语言处理的效率和有效性

原文地址&#xff1a;byte-pair-encoding-bpe-bridging-efficiency-and-effectiveness-in-language-processing 2024 年 4 月 12 日 介绍 在快速发展的自然语言处理 (NLP) 领域&#xff0c;对人类语言高效解析和理解的追求带来了重大创新。字节对编码&#xff08;BPE&#x…

Redis中的集群(九)

集群 消息 集群中的各个节点通过发送和接收消息(message)来进行通信&#xff0c;我们称发送消息的节点为发送者(sender),接收消息 的节点成为接收者&#xff0c;如图所示。节点发送的消息主要有以下五种: 1.MEET消息:当发送者接到客户端发送的CLUSTER MEET命令时&#xff0c…

STM32-模数转化器

ADC(Analog-to-Digital Converter) 指模数转换器。是指将连续变化的模拟信号转换 为离散的数字信号的器件。 ADC相关参数说明&#xff1a; 分辨率&#xff1a; 分辨率以二进制&#xff08;或十进制&#xff09;数的位数来表示&#xff0c;一般有 8 位、10 位、12 位、16 位…

C++11 设计模式0. 设计模式的基本概念,设计模式的准则,如何学习设计模式,24种设计模式的分为3大类

一 设计模式的基本概念&#xff1a; 模式&#xff1a;指事物的标准样式 或者 理解成 针对特定问题的可重用解决方案。 设计模式&#xff0c;是在特定问题发生时的可重用解决方案。 设计模式一般用于大型项目中。 大型项目中&#xff0c;设计模式保证所设计的模块之间代码的灵…

【蓝桥杯】2024年第15届真题题目

试题 A: 握手问题 本题总分&#xff1a; 5 分 【问题描述】 小蓝组织了一场算法交流会议&#xff0c;总共有 50 人参加了本次会议。在会议上&#xff0c; 大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进 行一次握手&#xff08;且仅有一次&a…

多线程代码案例之阻塞队列

目录 1.生产者消费者模型 2.使用标准库中的阻塞队列 3.模拟实现阻塞队列 在介绍阻塞队列之前&#xff0c;会先介绍一些前置知识&#xff0c;像队列&#xff1a;有普通队列、优先级队列、阻塞队列、和消息队列。前面两个是线程不安全的&#xff0c;而后面两个是线程安全的。本…

学生管理系统控制台版(java)

首先得先写个Student类&#xff0c;用来存放学生信息 public class Student {private String id;private String name;private int age;private String address;public Student() {}public Student(String id, String name, int age, String address) {this.id id;this.name…

2024年4月8日腾讯云故障复盘及情况说明

2024年4月8日15点23分&#xff0c;腾讯云团队收到告警信息&#xff0c;云API服务处于异常状态&#xff1b;随即在腾讯云工单、售后服务群以及微博等渠道开始大量出现腾讯云控制台登录不上的客户反馈。 经过故障定位发现&#xff0c;客户登录不上控制台正是由云API异常所导致。云…

极狐GitLab 如何在 helm 中恢复数据

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在极狐GitLab …

关于部署ELK和EFLK的相关知识

文章目录 一、ELK日志分析系统1、ELK简介1.2 ElasticSearch1.3 Logstash1.4 Kibana&#xff08;展示数据可视化界面&#xff09;1.5 Filebeat 2、使用ELK的原因3、完整日志系统的基本特征4、ELK的工作原理 二、部署ELK日志分析系统1、服务器配置2、关闭防火墙3、ELK ElasticSea…

李廉洋;4.12现货黄金,美原油最新走势分析及策略。

现货黄金在美盘末将历史新高刷至2377美元/盎司。美国3月份PPI指数较上年同期上升2.1%&#xff0c;为11个月来的最高增幅&#xff0c;这份数据加之此前火爆的CPI指数&#xff0c;为美联储实现2%目标所面临的坎坷之路奠定了基础。不过&#xff0c;PPI报告中的细节让担心通胀再度加…