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.hqwc.cn/news/620133.html

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

相关文章

若依框架针对漏洞升级的记录

背景&#xff1a;项目部署在生产环境上以后&#xff0c;漏洞扫描的时候&#xff0c;发现各种漏洞需要修复&#xff0c;很多漏洞的升级后面都记不住了&#xff0c;所以现在都简单记录一下处理的步骤 20240415 解决方案&#xff1a;直接修改配置文件中的Spring security的版本…

WordPress JS Support Ticket插件 RCE漏洞复现

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。JS Support Ticket是使用在其中的一套开源票务系统插件。 0x02 漏洞概述 WordPress中的JS Support Ticket插件存在未经上传漏洞,未经身份验证的攻击者可以上传恶意脚本的服务器,执行任意指令,从而获…

强大的系统监测工具 iStat Menus for mac最新中文激活版

iStat Menus for Mac是一款功能强大的系统监控工具&#xff0c;专为Mac用户设计&#xff0c;旨在帮助用户全面了解电脑的运行状态&#xff0c;提高电脑的性能和稳定性。 iStat Menus for mac最新中文激活版下载 该软件可以实时监测CPU使用率、内存占用、网络速度、硬盘活动等各…

LeetCode-热题100:104. 二叉树的最大深度

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a; root [3,9,20,null,null,15,7] 输出&#xff1a; 3 示例 2&#xff1a; 输入&#xff1a; root …

实时传输,弹性优先——物联网通讯打造数据上传新标杆

随着信息技术的飞速发展&#xff0c;物联网技术已经成为连接物理世界和数字世界的桥梁。在物联网领域&#xff0c;数据上传的速度、稳定性和灵活性是评价通讯技术优劣的重要指标。近年来&#xff0c;物联网通讯在实时传输、弹性优先方面取得了显著进展&#xff0c;为数据上传树…

初识three.js创建第一个threejs3D页面

说到3D&#xff0c;想必大家都能想到three.js&#xff0c;它是由WebGL封装出来的&#xff0c;接下来&#xff0c;我手把手教大家创建一个简单的3D页面 话尽在代码中&#xff0c;哈哈 大家可以复制代码玩一下 <!DOCTYPE html> <html lang"en"><head&…

柯桥地区职业学校日语口语常用成人零基础入门

在日语中,“做饭”有几种表达方式: 1. 料理する 是最常用的说法,意思就是“做料理”。 例句: 毎日妻が料理をしている。 每天妻子都在做饭。 2. 食事を作る 意思是“做饭”,“制作膳食”。 例句: 友達のために食事#15857575376を作った。 为朋友做了饭。 编辑搜图 请点…

LangChain简明讲义:从0到1构建LLM应用程序

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

哪种裤子比较百搭?显高显瘦的男生裤子分享

选到合适的裤子才能穿得好看以及舒服。可是市面上也出现了不少各种裤子质量达不到标准的负面新闻&#xff0c;为了能够选到合适的裤子&#xff0c;我自费购买了多个品牌的裤子测评。之后我知道很多网红品牌为了压低成本&#xff0c;用料和做工都很差&#xff0c;于是我总结了五…

资深亚马逊运营实战技巧:跨境电商6大选品法

1、工具选品法 比如店雷达&#xff0c; 通过大数据分析工具选出来利基产品或者通过工具选出来利基的市场&#xff0c;然后再通过分析市场来得到产品。 以女装为例&#xff0c;通过大数据分析&#xff0c;全方位对市场需求、款式、质量等进行多维度判断&#xff0c;其中SKU销量…

python怎么输出小数

先将整型转换成float型&#xff0c;再进行计算&#xff0c;结果就有小数了。 >>> a 10 >>> b 4 >>> c a/b >>> a,b,c (10, 4, 2) >>> a float(a) >>> d a/b >>> a,b,d (10.0, 4, 2.5) >>> 注意&…

PCL中常用的高级采样方法

0. 简介 我们在使用PCL时候&#xff0c;常常不满足于常用的降采样方法&#xff0c;这个时候我们就想要借鉴一些比较经典的高级采样方法。这一讲我们将对常用的高级采样方法进行汇总&#xff0c;并进行整理&#xff0c;来方便读者完成使用 1. 基础下采样 1.1 点云随机下采样 …