Servlet & Jsp 动态网站开发_4. Servlet 生命周期&手写一个 Servlet

一、什么是 Servlet

废话不多说,直接上百科

通过百科我们来看一下,Servlet 从狭义上来说,仅仅就是一个接口。主要是用来交互式的浏览和生成数据,这个呢,其实也只是一个扩展。

二、手写一个 Servlet

然后我们来手写一个 Servlet,感受一下

我们直接在之前的 HelloWorld 项目中新创建一个类,我们就叫 HelloWorldServlet

我们上面也说了,这个 Servlet 其实是一个接口,它主要是用来交互式的浏览和生成数据的,那我们前端 Jsp 是如何将数据发送给我们的 Servlet 的呢?

这里就需要提到两个我们以后常见的东西了,一个是 post,一个是 get,这两个方式就是前端 Jsp 给我们后端传递数据所使用的两种常用方式,而我们实现这个接口之后,需要重写这两个方法。

get 请求,一般我们用来获取 http 连接上面的数据,举例!

https://baike.baidu.com/item/%E4%BD%A0%E5%A5%BD/32416?fr=aladdin

当然,这一串连接我们不会都去获取,我们只获取 ? 后面的东西,也就是 fr = aladdin 这个东西,我们通过他的 key ,也就是 fr,可以获取到值,也就是 aladdin

post 请求和 get 请求不同,post 是获取请求体中的数据,而这个数据一般我们是看不到的,当然,你要是想看到也可以,通过 F12,在进行请求的时候,去看它 Network,我们找一个看一下

可以看到,这个就是我们 post 提交数据时候的样子,它不会在我们的 http 连接上体现

这俩请求方式的区别有很多,这个我们一边学习,一边再去看,如果想知道的可以直接百度搜索,get post,自己先看看也行

继续来说这个 Servlet,想要重写这两个接口,我们需要继承一个类,叫 HttpServlet,继承之后,我们重写 doGet、doPost。

像这样,就可以了。

弄好之后,我们再来想一个问题,我们在处理用户请求的时候,总不能写两份代码放在 doGet 和 doPost 里面,我们可以这样去写

全部都交给 doPost 去处理即可。

创建好 Servlet 之后,我们先不要着急,我们再来配置一下 web.xml,这里我们需要配置请求映射,不然用户都请求不到我们的服务(注意,这里工具不会自动给我们生成,需要我们自己弄)

我来解释一下这个是怎么去理解

首先看 servlet 标签,里面有一个 servlet-name,这个就是 servlet 的名字,但是我们要保证这个 servlet-name 是唯一的,不要有重复的,不然到时候程序不知道找谁,

这个 servlet-name 还需要对应一个类去做处理,对应的类写在了 servlet-class 中,这个不能写错,写错了就找不到了,我们可以按住 ctrl 移动上去,进行点击,可以进行跳转,那就说明我们写的没错

写好这个标签,说明我们已经定义好了 servlet 服务,还有它所对应的类的地址

然后我们再来看 servlet-mapping,这个是 servlet 映射,到时候,用户请求 /helloworld 的时候,我们自动就会去找 servlet-name 为 helloworld 的这个 servlet,找到之后,进去开始执行它里面的方法即可,下面我给一个流程图,大家凑乎的看一下

嗯,差不多就这样,到时候我们就来请求 /helloworld 这个请求

然后返回头,我们再来看我们的 HelloworldServlet 这个类,我们到时候返回给页面一个 hello,servlet

我们来看看怎么写,直接上代码。

我们直接通过 response 这个对象,也就是 resp,直接返回一个页面。

当然啊,记得关闭这个 pw !!!!!

到这里我们就写好了,然后启动,进行测试~~~~

说明是可以的

三、Servlet 生命周期

先来说说生命周期,这个其实在我们学习 Java 的时候就有知道,Java 的程序生命周期,从编写好 .java 文件,再到 javac 编译,最后 java 执行,这就是一个生命周期

当然啊,这个是对所有的 Java 文件,我们程序内部其实也有生命周期,这个 Servlet 就是我们接触的第一个,后期我们还会学到很多很多的生命周期,大家一个一个理解

Servlet 的生命周期图:

直接从菜鸟上扣的一个图

首先,在我们 JVM 虚拟机中,初始化好一个 Servlet 类之后,第一步就会执行 init() 这个方法,注意,init() 这个方法只会被执行一次,不会有第二次,除非你从新启动项目,才会有第二次。

执行完成 init() 之后,就开始调用这个 service,这个是重复执行,不然用户调用了一次之后没有了,以后再去调用调不到了

最后就是 destroy() 方法,这个方法同样,只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

知道了这个之后,我们来感受一下这个生命周期,我们自己写一个例子来看一下

自己去创建一个 LifeServlet,然后继承一下 HttpServlet

然后我们重写几个方法

然后配置一下 web.xml

我们重写启动服务器,然后看一下 console 窗口

我们可以看到,我们请求之后执行了 init ,然后执行 service,我们继续请求

只有 service,init 并没有再去执行,我们现在关闭服务器,再来看一下 console 窗口

可以看到啊,和上面是一样的,并没有出现销毁,这个是为啥呢?

这个其实并不是关闭服务器去调用的,而是长时间未去使用这个 Servlet ,然后 Servlet 容器自动帮你进行销毁,等你再去使用的时候,再去调用 init 进行初始化

这里因为时间,没有办法给大家进行演示,所以就不贴图片了,你要是不相信可以自己进行测试~~~

大家可以自己好好查查看,有不懂的可以联系我QQ:2100363119

欢迎大家访问我的网站:https://www.lemon1234.com

可以的话关注一下我的公众号,就在我网站,每天都有更新~~~,无限资源畅游 Java,感谢~

猜你喜欢

转载自blog.csdn.net/weixin_45908370/article/details/110739086
今日推荐