Serlvet的三种创建方式

Java知识点总结:想看的可以从这里进入

3、Servlet


Servlet就是Sun公司推出的一款开发动态Web的一个开源技术。Servlet运行在服务器中,由服务器调用。他是运行在服务器中的Java程序,其作用是接收客户端的请求,并响应数据给客户端,是浏览器的请求和服务器上的数据库之间的中间层。

它是 SUN 公司作为 CGI 技术的替代品而推出的技术,对开发动态网站需要使用的原生 Java API 进行了封装,形成了Servlet API,但是在编写HTML时很麻烦,所以Servlet通常配合JSP技术一起使用,JSP 对 Servlet 再次进行了封装,JSP 在经过编译后依然是 Servlet。

Servlet 是 Java 语言中编写 Web 服务器扩展功能的重要技术,同时它也是 JSP 技术的底层运行基础。学习 Java Web 开发,首先就要掌握 Servlet 技术,它是一套WEB开发的标准,常见的实现了 Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为“Servlet 容器”。

Servlet、Filter过滤器、Listener监听器是JavaWeb的三大组件。

  • 客户端发送请求至服务器
  • 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器
  • 服务器将响应返回客户端

Servlet项目命名规范:

1、包名规范:com.***.servlet
2、类名规范:****Servlet
3、web.xml文件中的servlet-name等配置和类名保持一致
<!-- servlet依赖-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>
<!--支持jsp的依赖-->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
</dependency>
<!--EL表达式的扩展jstl-->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!--JSTL和EL表达式使用必须添加standard-->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

3.1、三种实现方式

在Servlet中一个网页对应着一个Servlet的类,通过web.xml将URL路径和类相关联,访问一个动态网页的过程,实际上是将对应的 Servlet 类加载、实例化并调用相关方法的过程。

Servlet 最顶层是一个名为 javax.servlet.Servlet 的接口,所有的 Servlet 类都要直接或者间接地实现该接口。 Servlet 内置了两个 Servlet 的实现类(抽象类),分别为 GenericServlet 和 HttpServlet,因此,创建 Servlet 类有三种方式:

  1. 实现 javax.servlet.Servlet 接口,重写其全部方法。
  2. 继承 javax.servlet.GenericServlet 抽象类,重写 service() 方法。
  3. 继承 javax.servlet.http.HttpServlet 抽象类,重写 doGet() 或 doPost() 方法。
3.1.1 Servlet接口

Javax.servlet.Servlet接口,是 Servlet API 的核心接口,所有的 Servlet 类都直接或间接地实现了这一接口。

内部共用五个方法,其中主要的是service方法,Tomcat服务器会调用此方法进行请求和响应。比较繁琐,很少使用该方法创建 Servlet。

public class DemoServlet implements Servlet {
	//servlet的初始化方法,实例被创建后,调用一次进行初始化
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }
	//返回 ServletConfig 对象,包含 Servlet 的初始化参数
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
	//Tomcat会找到service方法进行操作,主要进行请求和响应
    @Override
    public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException {
		//设置编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //获取请求的数据
        
        //响应数据
        PrintWriter out = response.getWriter();		//获取输出的流
        out.print("");
    }

    //返回关于 Servlet 的信息,例如作者、版本、版权等
    @Override
    public String getServletInfo() {
        return null;
    }
	//销毁方法
    @Override
    public void destroy() {

    }
}

3.1.2 GenericServlet

GenericServlet抽象类实现了Servlet接口的4个方法,所以继承了GenericServlet后只需要重写service方法就可以了。其他操作和直接实现serlvet接口类似。

GenericServlet 是一个通用的 Servlet 类,并没有针对某种场景进行特殊处理,尤其是 HTTP 协议,我们必须手动分析和封装 HTTP 协议的请求信息和响应信息。

package com.cy.demo.servlet

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

public class Demo2Servlet extends GenericServlet {
    //其他四个方法抽象类GenericServlet已实现,只需要重写service即可
    @Override
    public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException {

    }
}

3.1.3 HttpServlet

正常使用的时候最多的数通过继承 javax.servlet.http.HttpServlet来实现Servlet程序,它用于开发基于 HTTP 协议的 Servlet 程序。

在 HTTP/1.1 协议中共定义了 7 种请求方式,即 GET、POST、HEAD、PUT、DELETE、TRACE 和 OPTIONS。HttpServlet 针对这 7 种请求方式分别定义了 7 种方法,即 doGet()、doPost()、doHead()、doPut()、doDelete()、doTrace() 和 doOptions()。我们使用的请求方式主要是 GET 和 POST,只需要重写 doGet 或者 doPost 方法。

这种方式重写了Servlet的五个方法,并且添加了doGet和doPost方法,内部没有抽象方法。HttpServlet内部分析了Http的传输协议,提供了更多的使用方法。

创建Servlet类:

在这里插入图片描述

在这里插入图片描述

继承关系:创建的类继承→HttpServlet继承→GenericServlet实现→Servlet接口

由Servlet的接口定义好访问的规范,GenericServlet实现Servlet接口,对其中的方法空实现,并对ServletConfig类做一些使用方法,HttpServlet继承了GenericServlet了,实现了service方法,并对请求进行分发处理增加了post和get方法。我们只需要跟需求重新doGet和doPost即可。

//继承HttpServlet类
public class Demo3Servlet extends HttpServlet {
    //重写doGet,doPost方法
   @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf=8");
        //获得响应的流
         PrintWriter out = response.getWriter();
         out.print("Hello Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);  //調用doPost,可以不用區分post和get隨便使用兩個該方法
    }
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

辰 羽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值