课堂随笔1

Servlet 是 JavaWeb 的三大组件Servlet(处理请求)、Filter(过滤器)、Listener(监听器)之一,它属于动态资源。实现 Servlet 有三种方式:

1实现 javax.servlet.Servlet 接口;
完成 Servlet 需要分为两步:
 ① 编写 Servlet 类;

开始我们的第一个 Servlet 应用,项目名称为 HelloServlet,选择 Eclipse 工具栏的 File → Ne w → Other 选项,进入新建工程向导界面,选择 Web 分类下的 Dynamic Web Project(动态网页 项目)。

 

输入名字

 

 

在创建项目时,我们要勾选“Generate web.xml deployment descriptor”才会创建 web.xml 文 件。如下图所示

 

在src文件夹下新建一个包包里面用来存放我们的java类

 

 

 

右击新建一个Java类

 

 

可以看到里面有五个方法

 

 

 

 这里我们对里面的方法添加一些输出语句

 

 (1)init() 方法 用于初始化,在 Servlet 启动时调用。1

(2)service() 方法 Servlet 通过这个方法,从 req 获得客户端请求,处理并生成结果,再通过 res 发送给客户端。2

(3)destroy()方法 Servlet 销毁时执行的方法,释放 Servlet 对象占用的资源。3 为生命周期方法这一个只有在关闭服务器的时候才会被执行到

(4)getServletConfig() 方法 获取包含 Servlet 各种信息的 ServletConfig 对象,返回值是 Servlet 容器调用 init(ServletConfig config)方法时传递的 ServletConfig 对象。

(5)getServletInfo()方法 将 Servlet 的信息作为字符串返回。

对生成的web.html进行配置然后运行我们的服务器

执行效果他如下图所示

 

 

 

2继承 javax.servlet.GenericServlet 抽象类;

由于 javax.servlet.Servlet 接口中的 5 个方法都是抽象方法,我们在使用时非常麻烦,需要把这 5 个方法都实现。我们在创建自己的 Servlet 时,只需要继承 GenericServlet 并重写 service()方法即可。

我们创建 Servlet 继承 GenericServlet 时,如果子类覆盖了 GenericServlet 的有参的 in it(StringConfig)方法,那么 this.config=config 这一条语句就会被覆盖了,也就是说 GenericServle t 的成员变量 config 的值为 null,那么所有依赖 config 的方法都不能使用了。如果真的希望完成一 些初始化操作,我们要去覆盖 GenericServlet 提供的无参的 init()方法,它会在 init(ServletConfig) 方法中被调用,也能够得到执行。

同种方法我们创建一个b的测试类用来继承GenericServlet 抽象类

继续为里面添加东西

 

 同种方法在web.xml中为b添加访问路径

 

 

 

 

 访问一下

 

 可以看到我们重写init()方法时调用的是无参方法

3 继承 javax.servlet.http.HttpServlet 抽象类;

 HttpServlet 抽象类是 GenericServlet 抽象类的子类,HttpServlet 类为 Servlet 接口提供了与 HT TP 协议相关的通用实现,对 GenericServlet 类进行了泛化,实现了 service()方法。其实 HttpServlet 中没有什么抽象方法,但是它还是一个抽象类,因为要求我们不能直接使用 HttpServlet,而是要自 己创建 Servlet 使用,另外 HttpServlet 还提供了对 HTTP 请求的特殊支持,所以通常我们都会通过 继承 HttpServlet 来完成自定义的 Servlet。

同种方法我们定义一个名称为c的类去继承HttpServlet 抽象类

 

 依旧是对里面的语句做一些输出

 

 

 配置web.xml文件

 

 

 

打开网页进行查看

 

 

 

 

 

 可以看到方法已经被执行了

 ② 在 web.xml 文件中配置 Servlet 或者使用注解的形式@WebServlet()

 

 

 

 

 

 

 这样可以省去我们配置 web.xml 的麻烦就不用在web里面创建东西了直接调用里面的别名就行即图中定义的/dservlet","/DDD"

 

 我们还可以将路径改为这种形式异界可以访问

 

当我们添加这个的init()方法会自动执行而不是去调用执行

 

 

posted @ 2022-04-13 12:56  麦当劳在逃鸡块  阅读(17)  评论(0编辑  收藏  举报