当前位置: 首页 > news >正文

学习Servlet (Servlet的实现方式1)

目录

前言

实现javax.servlet.Servlet接口

步骤

0 创建web项目

1 导入 jar包​编辑

2  创建Servlet类实现这个接口

可能遇到的问题:

0 发现:大家看到这里是不是有些疑惑:没有创建AServlet对象

1  但现在问题来了,这里url 是怎么访问到对应的Servlet类呢?

2 那应该怎么指定首页呢?

3 服务器启动成功后,怎么看Servlet 是否被创建呢?

4 xml配置文件中添加初始化参数,怎么写到控制台中(了解)

小结


前言

上一篇简单的介绍了,Servlet的含义和作用。本篇博客,介绍Servlet 的第一种实现方式

核心是掌握第三种创建方式:继承javax.servlet.http.HttpServlet类;

  • 实现javax.servlet.Servlet接口;
  • 继承javax.servlet.GenericServlet类;
  • 继承javax.servlet.http.HttpServlet类;

它们三者的关系是

如图所示:

09b441d83df54cb58cb6d5e3fddea34c.png

GenericServlet类,HttpServlet类 都是Servlet接口的实现类

HttpServlet类作为子类 是继承GenericServlet类这个抽象类的

实现javax.servlet.Servlet接口

通过下面的理解,知道
Servlet对象创建,不需要手动创建,由服务器自动创建,销毁的时候,由服务器自动销毁
init(), service(), destroy()都由服务器自动调用,:称为生命周期方法 。但是,在服务器关闭的时候,不会调用destroy()方法

步骤

0 创建web项目

如有不会的可以看我的博客:

【IDEA创建Web项目(详细版) - CSDN App】https://blog.csdn.net/m0_74124657/article/details/142434089?sharetype=blog&shareId=142434089&sharerefer=APP&sharesource=m0_74124657&sharefrom=link

我写的html网页

530b0f2bb4be4795b74512afec36d94d.png

1 导入 jar包838d7b6bb5e6407996bc3c5d44d56c15.png

我放在百度网盘,大家自行获取 。通过百度网盘分享的文件:Servlet创建
链接:https://pan.baidu.com/s/1sQ8o6yB-0qVtzxZ42xaUaA 
提取码:9dcr

2  创建Servlet类实现这个接口

总的代码如下:

package fs;import javax.servlet.*;
import java.io.IOException;
/*
Servlet 第一个创建方法:实现 Servlet 接口
Servlet对象创建,不需要手动创建,由服务器自动创建,销毁的时候,由服务器自动销毁
init(), service(), destroy()都由服务器自动调用,:称为生命周期方法 。但是,在服务器关闭的时候,不会调用destroy()方法*/
public class AServlet implements Servlet {/*** 初始化方法,在服务器启动的时候,会自动调用init方法,只会调用一次* @param servletConfig* @throws ServletException*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("AServlet出生了....");}/***  获取Servlet的相关配置* @return*/@Overridepublic ServletConfig getServletConfig() {return null;}/*** 服务方法:处理客户端请求的方法* 客户端请求多少次,该方法就会执行多少次* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("很高兴为你服务");}/*** 获取Servlet的描述信息:不重要* @return*/@Overridepublic String getServletInfo() {return "我是。。。。。。。。。。。。。";}/*** 回收方法,服务器关闭的时候,会自动调用该方法,只会调用一次*/@Overridepublic void destroy() {System.out.println("AServlet被回收了");}
}

具体介绍每一个方法的作用:

  • init方法:创建Servlet对象 第一个调用的方法,完成初始化
  • service 方法:具体执行方法:当客户端请求多少次,该方法就执行了多少次
  • getServletConfig()方法:添加Servlet配置
  • destroy():回收方法,当服务器关闭时,会调用该方法,释放在内存中因Servlet创建占用的资源
可能遇到的问题:
  •  大家看到这里是不是有些疑惑:没有创建AServlet对象
  •   但现在问题来了,这里url 是怎么访问到对应的Servlet类呢?
  •  那应该怎么指定首页呢?
  •  服务器启动成功后,怎么看Servlet 是否被创建呢?
  • xml配置文件中添加初始化参数,怎么写到控制台中(了解)
0 发现:大家看到这里是不是有些疑惑:没有创建AServlet对象

之间我们学习Java时,知道new 一个 就行。这里之所以没有使用关键字 new 

原因:当我们启动tomcat 时,在浏览器中通过url通过访问Servlet 会自动创建一个Servlet 对象

1  但现在问题来了,这里url 是怎么访问到对应的Servlet类呢?

解决办法: 在xml配置文件中添加

62758b6741e04909a62d5a60e61bdd96.png

具体代码如下:

第一个标签:表示你创建的类名和类路径

第一个标签:你要关联的类和通过url路径 访问这个指定类 如下面这个 /a 

<!--    配置AServlet-->
<!--    给Servlet起一个名字,推荐类名--><servlet><servlet-name>AServlet</servlet-name>
<!--        对应在AServle中的路径:包名.类名--><servlet-class>fs.AServlet</servlet-class></servlet><servlet-mapping><servlet-name>AServlet</servlet-name><url-pattern>/a</url-pattern></servlet-mapping>

前期工作完成了,现在开始启动服务器

6ee24e3e37ca4be8988236078f50fa75.png

出现如上图所示:表示服务器启动成功!,之后你指定的的浏览器,会向你展示第一个界面

我称之为首页(欢迎界面)。默认的首页为 index.html 。

0b91f540bad34eb4af27a529dbc567f9.png

cb784adaac834496bc2000a8aa4c2d78.png

如果你没有创建 会报一个404 表示找不到首页。这并不是说你出现了问题,不用担心。

2 那应该怎么指定首页呢?

解决办法:打开编辑配置,看到url 后添加 ,完成后点击确定

f441a634fcf945cba1bd08307808e1f9.png

3 服务器启动成功后,怎么看Servlet 是否被创建呢?

向浏览器中添加url 路径去访问Servlet 类 。我们知道之前我们在xml配置文件中指定 /a 指定我们创建的AServlet类

712971e38b43491da3ae6897ef947a0a.png

IDEA控制台发现,AServlet对象创建成功

b411863568494e2da79cfc1d71fbe6cc.png

b5b9bbb6baf9457ba4359c07ca59f83e.png

4 xml配置文件中添加初始化参数,怎么写到控制台中(了解)

xml配置文件中

使用键值对的方式,表示初始化参数  key-value

  <servlet><servlet-name>AServlet</servlet-name>
<!--        对应在AServle中的路径:包名.类名--><servlet-class>fs.AServlet</servlet-class><init-param>
<!--            初始化参数--><param-name>key</param-name><param-value>value</param-value></init-param></servlet>

我们知道

代码如下

如果我在init()方法中,获得ServletConfig 对象 是比较简单的。原因是 当我们访问Servlet 时,服务器会自动创建ServletConfig 对象

但如果我想要在service 方法中 获得ServletConfig 对象,再调用方法读取初始化参数

步骤如下

  • 我们需要一个成员变量存储ServletConfig 对象
  • 使用  getServletConfig() 获得 ServletConfig 对象/ 直接使用这个成员变量也行

我是写在service方法中并且使用  getServletConfig() 获得 ServletConfig 对象

总的代码如下

package fs;import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;/*
Servlet 第一个创建方法:实现 Servlet 接口
Servlet对象创建,不需要手动创建,由服务器自动创建,销毁的时候,由服务器自动销毁
init(), service(), destroy()都由服务器自动调用,:称为生命周期方法 。但是,在服务器关闭的时候,不会调用destroy()方法*/
public class AServlet implements Servlet {private  ServletConfig config;/*** 初始化方法,在服务器启动的时候,会自动调用init方法,只会调用一次* @param servletConfig* @throws ServletException*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("AServlet出生了....");this.config = servletConfig;}/***  获取Servlet的相关配置* @return*/@Overridepublic ServletConfig getServletConfig() {return this.config;}/*** 服务方法:处理客户端请求的方法* 客户端请求多少次,该方法就会执行多少次* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("很高兴为你服务");System.out.println(this.getServletConfig().getInitParameter("key"));System.out.println("-----------------------------------------------");Enumeration<String> init = this.getServletConfig().getInitParameterNames();while (init.hasMoreElements()){String key = init.nextElement();String value = this.getServletConfig().getInitParameter(key);System.out.println(key+"--"+value);}}/*** 获取Servlet的描述信息:不重要* @return*/@Overridepublic String getServletInfo() {return "我是。。。。。。。。。。。。。";}/*** 回收方法,服务器关闭的时候,会自动调用该方法,只会调用一次*/@Overridepublic void destroy() {System.out.println("AServlet被回收了");}
}

启动服务器

并且你访问几次AServlet ,就会调用几次 service方法

我现在多次刷新浏览器,发现

df57a488ea4c4e59a9eecafd1923f308.png

37a7609d9a4049ffbea275158742efab.png

现在关闭服务器,调用destroy方法 ,Servlet对象就不存在,并且释放在内存中的空间

ba17b95872b94d63b42106c28210c309.png

870f6a1a49b34371b1b4ea4ca95cf20d.png

小结

本篇主要介绍了第一种创建Servlet 对象的方式。剩下的两种创建方式,我会在下篇博客详细介绍


http://www.mrgr.cn/news/77864.html

相关文章:

  • vulfocus在线靶场:tomcat-pass-getshell 弱口令 速通手册
  • 本地安装YAPI
  • 【自动化】如何从列表中找到图片并命名保存下来
  • “AI玩手机”原理揭秘:大模型驱动的移动端GUI智能体
  • STM32通过8位并口驱动TFT-1.8寸屏(ST7735)显示器
  • JavaScript 自定义对象
  • 英语写作中“联系、关联”associate correlate 及associated的用法
  • 28.UE5游戏框架,事件分发器,蓝图接口
  • 17. 指针类型和步长概念问题
  • Node相关教程
  • css效果
  • vue面试题——描述一下vue
  • Linux高阶——1123—
  • 【阵列信号处理】相干信号和非相干信号生成
  • docker基础命令
  • 【C++知识总结2】C++里面的小配角cout和cin
  • #Verilog HDL# Verilog中的generate用法集锦
  • 【线程】Java多线程编程
  • 瑞佑液晶控制芯片RA6807系列介绍 (三)软件代码详解 Part.10(让PNG图片动起来)完结篇
  • MySQL学习/复习10视图/用户/权限/语言连接数据库
  • Vue实训---3-element plus的使用与布局
  • 深入解读:2023华为流程体系及落地实施
  • 【Bluedroid】A2DP SINK播放流程源码分析
  • BERT解析
  • 鸿蒙进阶-状态管理之@Prop@Link
  • 【老白学 Java】Warship v2.0(三)