JavaWeb学习(三) --------- Servlet规范


前言

我们上一篇的文章主要介绍了一种常用的Http服务器 ------ Tomcat 服务器的配置与简单使用,Tomcat 服务器我们知道可以接收浏览器发来的请求并进行响应,但如何进行相应的呢?

对于静态网页,服务器上存在的是一个纯 HTML 文件。当浏览器发出 HTTP 请求时,服务器根据请求的URL找到 HTML 文件,并将 HTML 代码返还给客户端浏览器。

而对于动态网页,服务器出了找到需要显示的 HTML 标记之外,还必须执行所需要的业务逻辑。然后将业务逻辑运算后的结果和需要显示的 HTML 标记一起生成新的HTML代码。最后将新的带有业务逻辑运算结果的 HTML 代码返回给客户端。

此时我们就要用到 Servlet 技术了,它可以提供一种可移植方法来提供动态的、面向用户的内容。换句话说, servlet就相当于在服务器上运行的小程序。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容,是为web开发服务的。

接下来我们来详细地了解如何进行Servlet编程。


一、Servlet 简介

Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
  1. 编写一个Java类,实现servlet接口。
  2. 把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet。

这就跟JDBC一样,JDBC是用Java 语言连接数据库,获取数据库中的数据。而Servlet 就是使用 Java 语言来处理浏览器请求。这两者都是一种Java接口,而Java接口就是开发规范。

二、Servlet 规范

在介绍Servlet规范之前,我们来看一下 Java 中的规范:

Java SE规范:指定Java基本开发的规则。

Java EE规范:指定Java与不同服务器之间进行联合开发时遵守规则,共有13种。

那么什么是Servlet规范:

1.Servlet规范是JAVA EE 规范中的一种,指定了Java与Http服务器联合开发时遵守的规则
2.具体细节:
1) 在Servlet规范中,指定动态资源文件开发步骤
2) 在Servlet规范中,指定Http服务器调用动态资源文件规则
3) 在Servlet规范中,指定Http服务器管理动态资源文件实例对象规则

三、Servlet 运行过程

① 客户端发送请求至服务器
② 服务器根据 web.xml文件中的Servlet相关配置信息,将请求转发至相应的Servlet
③ Servlet 引擎调用 Service() 方法,根据request对象中封装的用户请求与数据库进行交互,返回数据后,Servlet 会将数据封装到response对象中
④ Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求
⑤ 服务器将响应对象返回给客户端

四、Servlet 接口实现类

我们知道使用Servlet 的过程,就是对Servlet接口中的类进行实现的过程,Servlet接口存在于Http服务器下,由Http服务器提供jar包。

Tomcat服务器下的lib文件中有一个servlet-api.jar, 这是用来存放Servlet接口的(javax.servlet.Servlet接口) 。

在Servlet规范中,Http服务器能调用动态资源文件必须是一个Servlet接口实现类。

例如:

class Student {
   // 不是Servlet接口实现类, 不是动态资源文件
}

class Student implements Servlet {
   // 合法动态资源文件,Tomcat有权调用
}
Servlet接口中一共有5个方法
servlet接口:
     init()
     getServletConfig()
     getServletInfo()
     destory() ---- 以上四个方法对于Servlet接口实现类没用
     service()
其中service()方法对于我们的用处最大:
在service()方法中,Servlet对象通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息

五、Servlet接口实现类的开发步骤

① 通过继承HttpServlet父类来创建一个Servlet接口实现类

public class MyServlet extends HttpServlet (implements Servlet) {
}

② 根据浏览器发送的请求方式,重写父类中 doGet 或 doPost方法 来处理请求

浏览器 ---(get)--> MyServlet.doGet();
浏览器 ---(post)---> MyServlet.doPost();

③ 到网站的核心配置文件(web.xml) 向 Tomcat 注册动态资源文件

网站 ----> web -----> WEB-INF -----> web.xml
<!--将Servlet接口实现类类路径地址交给Tomcat-->
<servlet>
   <servlet-name>path</servlet-name> <!--声明一个变量存储servlet接口实现类类路径-->
   <servlet-class>WebProgramming.MyServlet</servlet-class><!--声明servlet接口实现类类路径-->
</servlet>
<!--为了降低用户访问Servlet接口实现类难度,需要设置简短请求别名-->
<servlet-mapping>
   <servlet-name>path</servlet-name>
   <url-pattern>/my</url-pattern><!--设置简短请求别名, 书写时以/开头-->
</servlet-mapping>
//如果现在浏览器向Tomcat索要MyServlet时地址
http://localhost:8080/myWeb/my

Tomcat 根据Servlet规范调用Servlet接口实现类规则:

1.Tomcat 有权创建Servlet接口实现类实例对象
Servlet MyServlet = new MyServlet();
2.Tomcat 根据实例对象调用service方法处理当前请求
MyServlet.service();

通过父类决定在何种情况下调用子类中方法 ----- 模板设计模式

HttpServlet:service() {
     if (请求方式 == GET) {
         this.doGet();
     }
     if (请求方式 == POST) {
         this.doPost();
     }
}

实例:
编写第一个 Servlet 程序 ---- 完整流程

1.首先创建一个Java Project,这里我给他取名叫JavaWeb编程
在这里插入图片描述
2.创建完项目之后,我们在给其Module添加Web Application框架,即网络编程框架
在这里插入图片描述
3.然后我们在Web-INF下,创建lib目录,用于存放与项目相关的jar包
在这里插入图片描述
4.点击File —> Project Structure —> Modules —> Dependencies —> + —>1 JARS or Directories
在这里插入图片描述
5.找到刚刚创建的Web-INF中lib包,与项目主程序相关联
在这里插入图片描述
6.选择其类型为Jar Directory,点击OK即可
在这里插入图片描述
7.还是在这个地方,点击2 Library…
在这里插入图片描述
8.把之前配置好的 Tomcat 包进行引入,之后点击OK即可
在这里插入图片描述
9. 然后回到src目录下,创建controller包,在此包下创建 MyServlet 类并继承 HttpServlet
在这里插入图片描述
10.在 MyServlet 类中,按住 ctrl + o,选择重写父类的 doGet 与 doPost 方法
在这里插入图片描述
11.把方法中代码改写如下
在这里插入图片描述
12.之后我们把写好的MyServlet类引入到web.xml配置文件中,并起别名my,这里要注意注释要写成 的形式,否则会报错
在这里插入图片描述
13.点击 run —> Edit Configurations —> + —> Tomcat Server —> local,添加Tomcat服务器启动按钮
在这里插入图片描述
14.配置好之后,在同一个位置,点击Deployment —> + —> Arifact
在这里插入图片描述
15.选择当前项目JavaWeb编程,点击OK即可
在这里插入图片描述
16.之后我们启动Tomcat服务器,会自动打开如下界面
在这里插入图片描述
17.通过地址栏我们输入动态资源文件MyServlet的别名my,按下回车
在这里插入图片描述
18.程序下方终端出现如下字样,这是因为我们通过地址栏发送请求,使用的是 Get 请求方式
在这里插入图片描述
源码:

package controller;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("对浏览器发起的Get请求方式进行处理");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("对浏览器发起的Post请求方式进行处理");
    }
}

Web.xml中添加的代码为:

<servlet>
      <servlet-name>MyServlet</servlet-name> //这个名字可以随便取
      <servlet-class>controller.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
      <servlet-name>MyServlet</servlet-name>
       <url-pattern>/my</url-pattern>
</servlet-mapping>

以上就是Servlet接口实现类简单但又完整的开发步骤

六、Servlet生命周期

所有的Servlet接口实现类的对象,只能由Http服务器(Tomcat)负责创建,开发人员不能手动创建Servlet接口实现类对象。

在默认情况下,Http服务器接收到对于当前Servlet接口实现类第一次请求时,自动创建这个Servlet接口实现类的实例对象。

手动配置情况下,要求Http服务器在启动时自动创建某个Servlet接口的实例对象
如何配置?

在Web.xml文件中插入以下代码

<servlet> 
   <servlet-name>path</servlet-name>
   <servlet-class>controller.MyServlet</servlet-class>
   <load-on-startup>1</load-on-startup> <!--填写一个大于0的整数即可-->
 </servlet>

上述代码是配置Tomcat服务器启动时,自动创建Servlet实例对象,原本是只在第一次请求时创建。创建Servlet对象,就是调用Init()方法。

在Http服务器运行期间,一个Servlet接口实现类只能被创建出一个实例对象,该Servlet对象去处理客户端的所有请求,在service()方法中执行。

在Http服务器关闭时刻,自动将网站中所有的Servlet对象进行销毁,执行destroy()方法。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Servlet3.1规范(最终版) JavaTM Servlet 规范 版本 3.1(最终版) Shing Wai Chan Rajiv Mordani [作者] 穆茂强 张开涛 [译者] 2012年6月翻译 2013年7月修订 目录 前言 ............................... 3 其他资料 ............................................................................................................................................................ 3 谁应该读此规范 ................................................................................................................................................ 3 API规范 ............................................................................................................................................................3 其他的 Java 平台规范 ....................................................................................................................................... 3 其他重要参考资料 ............................................................................................................................................ 4 提供反馈 ............................................................................................................................................................ 4 专家组成员 ........................................................................................................................................................ 5 答谢 .................................................................................................................................................................... 5 目录 ............................... 6 概览 .............................. 13 1.1 1.2 1.3 1.4 1.5 1.6 什么是 Servlet? .................................................................................................................................. 13 什么是Servlet容器?...............................................................................................................................13 例子...........................................................................................................................................................13 Serv

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值