Servlet1-Servlet程序、请求处理、继承体系

目录

什么是Servlet

手动实现Servlet程序

​编辑url地址如何定位到Servlet程序去访问

Servlet的生命周期

​编辑GET和POST请求的分发处理

通过继承HttpServlet类实现Servlet程序

 IDEA菜单生成Servlet程序

Servlet类的继承体系

ServletConfig类

ServletContext类

什么是ServletContext类

ServletContext类的四个作用


什么是Servlet

  • Servlet是JavaEE规范之一,规范就是接口

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

手动实现Servlet程序

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

创建项目:

创建类HelloServlet:

package com.qcby.servlet0724;import javax.servlet.*;
import java.io.IOException;public class HelloServlet implements Servlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}/*** service方法是专门用来处理请求和响应的* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("HelloServlet被访问了");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

 web.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-name标签:给servlet程序起一个别名(一般是类名)--><servlet-name>HelloServlet</servlet-name><!--servlet-class标签:servlet程序的全类名--><servlet-class>com.qcby.servlet0724.HelloServlet</servlet-class></servlet><!--servlet-mapping标签:给servlet程序配置访问地址--><servlet-mapping><!--servlet-name标签:告诉服务器,我当前配置的地址给哪个servlet程序使用--><servlet-name>HelloServlet</servlet-name><!--url-pattern标签:配置访问地址/ 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径/hello 表示地址为:http://ip:port/工程路径/hello--><url-pattern>/hello</url-pattern></servlet-mapping>
</web-app>

项目结构: 

启动:

访问/hello时:

注意:

  1. 两个servlet-name标签内容要相同
  2. url-pattern中要加/

url地址如何定位到Servlet程序去访问

Servlet的生命周期

  1. 执行Servlet
  2. 执行init初始化方法
  3. 执行service方法
  4. 执行destroy销毁方法

第一、二步是在第一次访问时创建servlet程序会调用

第三步每次访问都会调用

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

package com.qcby.servlet0724;import javax.servlet.*;
import java.io.IOException;public class HelloServlet implements Servlet {public HelloServlet() {System.out.println("1 构造器方法");}@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("2 init初始化");}@Overridepublic ServletConfig getServletConfig() {return null;}/*** service方法是专门用来处理请求和响应的* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("3 service---HelloServlet被访问了");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {System.out.println("4 destroy销毁方法");}
}

GET和POST请求的分发处理

在webapp下创建a.html:

get请求

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="http://localhost:8080/servlet0724/hello" method="get"><input type="submit"></form>
</body>
</html>

启动:

点击提交:

 

post请求 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><form action="http://localhost:8080/servlet0724/hello" method="post"><input type="submit"></form>
</body>
</html>

启动:

添加获取请求:

 完善:

完善:

通过继承HttpServlet类实现Servlet程序

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

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

创建HelloServlet2类:

package com.qcby.servlet0724;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 {/*** 在get请求时调用* @param req* @param resp* @throws ServletException* @throws IOException*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("HelloServlet2的doGet方法");}/*** 在post请求时调用* @param req* @param resp* @throws ServletException* @throws IOException*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("HelloServlet2的doPost方法");}
}

web.xml:

a.html:

 启动:

 IDEA菜单生成Servlet程序

 (取消勾选注解)

启动:

Servlet类的继承体系

ServletConfig类

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

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

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

每个ServletConfig对象对应自己的Servlet程序,互不影响

作用:

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

1.

访问输出为:

2.

 

启动输出为:

3.

 

注意:

重写init方法一定要调用父类的super.init(config)

ServletContext类

什么是ServletContext类

  • ServletContext是一个接口,它表示Servlet上下文对象
  • 一个web工程只有一个ServletContext对象实例
  • ServletContext对象是一个域对象(域对象是可以像Map一样存取数据的对象,这里的域指的是存取数据的操作范围,也就是整个web工程)
  • ServletContext是在web工程部署启动时创建,在web工程停止时销毁
存数据取数据删除数据
Mapput()get()remove()
域对象setAttribute()getAttribute()removeAttribute()

ServletContext类的四个作用

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

1.

创建ContextServlet类

配置:

启动输出为:

2.

启动输出为:

3.

启动输出为:

 1-3完整代码:

package com.qcby.servlet0724;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class ContextServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取web.xml中配置的上下文参数context-paramServletContext context = getServletConfig().getServletContext();String username = context.getInitParameter("username");System.out.println("context-param参数username的值是:"+username);String password = context.getInitParameter("password");System.out.println("context-param参数password的值是:"+password);//获取当前的工程路径,格式:/工程路径System.out.println("当前工程路径为:"+context.getContextPath());//获取工程部署后在服务器硬盘上的绝对路径/***  / 斜杠被服务器解析地址为:http://ip:port/工程名/  映射到IDEA代码的webapp目录*/System.out.println("工程部署的路径是:"+context.getRealPath("/"));}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

4.

创建ContextServlet1

配置:

启动输出为:

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

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

相关文章

【彩虹商城】虚拟发卡系统

运行环境&#xff1a; Nginx 1.22.1 Mysql5.7 PHP7.4 直接访问域名即可安装 [呵呵] 彩虹二次开发 拥有供货商系统 多余模板删除 保留一套商城,两套发卡 源码无后门隐患 已知存在的BUG修复 目前适用于卡密类型业务销售。 后续将会慢慢编写数卡权益类的对接&#xf…

神经网络的参数初始化【PyTorch】

文章目录 1、常见初始化方法2、代码2.1、导包&#xff1a;2.2、均匀分布随机初始化2.3、固定初始化2.4、全0初始化2.5、全1初始化2.6、正态分布随机初始化2.7、kaiming 初始化2.8、xavier 初始化2.9、完整代码 3、小节 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专…

科技云报道:算网筑基AI注智,中国联通如何讲出AI时代的“新故事”?

科技云报道原创。 AI从未停止进化&#xff0c;也从未停止给人类带来惊喜。 从ChatGPT代表的文生文、Dall-E代表的文生图&#xff0c;到Sora代表的文生视频&#xff0c;Suno为代表的文生音乐&#xff0c;生成式AI的“暴力美学”持续突破内容生产的天花板&#xff0c;大模型技术…

Pytorch基础:Tensor的view方法(非连续张量也可以使用view)

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中&#xff0c;view是Tensor的一个重要方法&#xff0c;用于返回一个改变了形状&#xff0c;但数据和数据的顺序与原来一致的新张量&#xff0c;但是新张…

VSCode 解决 pylint 报错 No name QWidget in module PyQt5.QtWidgets

问题 启用了 VSCode 的 Pylint 插件, 即便 Python 环境中安装了 PyQt5, 也无法正确解析 PyQt5 的导入 PyQt5 底层代码是用 C/C 写的, pylint 默认不会深入解析 pylint doesn’t load any C extensions by default, because those can run arbitrary code. 解决 修改 Settings…

Spark实时(六):Output Sinks案例演示

文章目录 Output Sinks案例演示 一、​​​​​​​File sink 二、​​​​​​​​​​​​​​Memory Sink 三、​​​​​​​​​​​​​​Foreach Sink 1、​​​​​​​foreachBatch 2、​​​​​​​​​​​​​​foreach Output Sinks案例演示 当我们对流式…

kotlin协程-- 基础概念 ①|创建和使用

引言 首先先说一些相关概念 1.并发与并行 在操作系统中我们曾经学到过并发与并行 并发: 是同一个时刻只有一条指令在执行,其他指令没有再执行,但是由于CPU的时间片特别短,导致多个指令来回切换的时间间隔特别短,就好像是同一时间多条指令在执行。单核CPU与多核CPU都可以进…

【python】Python常见的面试题解析:深入探索与实践,助你少走弯路

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

若依ruoyi+AI项目二次开发(智能售货机运营管理系统)

(一) 帝可得 - 产品原型 - 腾讯 CoDesign (qq.com)

一些电脑的操作技巧,你知道吗?

我整理了几个电脑使用的实用技巧&#xff0c;能够帮你提升办公效率&#xff0c;一起来看看吧&#xff01; 技巧一&#xff1a;反方向移动单元格 一般来讲&#xff0c;我们按下【Tab】键、【Enter】键的时候&#xff0c;会切换到右边或者下边的单元格&#xff0c;想要反向移动…

第2章 编译SDK

安装编译依赖 sudo apt-get update sudo apt-get install clang-format astyle libncurses5-dev build-essential python-configparser sconssudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \ expect g patchelf chrpath gawk texinfo chrpath diffstat …

董宇辉离职,我一点都不意外!只不过感觉来的太快

下面这张图&#xff0c;是我在半年多前写的一段随笔&#xff0c;没想到来的这么快&#xff01; 碰巧的是今天中午&#xff0c;在开发者群里有两位老铁自曝&#xff0c;本以为能公司干到老&#xff0c;但公司却不给机会&#xff0c;已经不在是公司员工了。 最近&#xff0c;晓衡…

粗解React 和 Vue 的异同

相同点&#xff1a; 1、都使用虚拟 DOM【Virtural DOM】 Vue与React都使用了 Virtual DOM Diff算法&#xff0c; 不管是Vue的Template模板options api 写法&#xff0c; 还是React的Class或者Function写法,最后都是生成render函数&#xff0c;而render函数执行返回VNode(虚拟…

iOS collectionView 滑动出现空白

iOS collectionView 滑动出现空白 一个很常见的 banner 轮播&#xff0c;滑动的时候&#xff0c;有时候会出现空白&#xff0c;检查了下&#xff0c;发现代码没什么问题&#xff0c;上网查了也没啥结果&#xff0c;最后的解决方法是自定义layout解决 interface TMLoopViewLayo…

创新概念:柯尔莫哥洛夫-阿诺德网络

文章目录 一、说明二、基础概念三、kolmogorov-Arnold 网络性质3.1 KAN 的潜在优势3.2 挑战和注意事项 四、基本 KAN 超参数五、COLAB 代码六、注意点 一、说明 kolmogorov-Arnold 网络 (KAN) 是深度学习领域的一项“创新”&#xff0c;它提供了一种受现有 Kolmogorov-Arnold …

python基础---1.变量、运算符和表达式、基本数据结构

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;python &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&…

使用Docker搭建MySql的主从同步+ShardingSphere搭建Mysql的读写分离

参考课程 尚硅谷ShardingSphere5实战教程&#xff08;快速入门掌握核心&#xff09;_哔哩哔哩_bilibili 主服务器 创建容器 docker run -d \ -p 3306:3306 \ -v /kira/mysql/master/conf:/etc/mysql/conf.d \ -v /kira/mysql/master/data:/var/lib/mysql \ -e MYSQL_ROOT…

(day26)leecode热题——找到字符串中所有字母异位词

描述 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 示例 1: 输入: s "cbaebabacd", p …

【Git-驯化】一文搞懂git中代码冲突的解决方案大全

【Git-驯化】一文搞懂git中代码冲突的解决方案大全 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xff1a…

[C++实战]日期类的实现

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…