`
l4432848
  • 浏览: 251228 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaEE——Servlet的Web访问名称

    博客分类:
  • java
 
阅读更多

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

Servlet的Web访问名称

一个Servlet的web访问名称可以不止一个,并且除了用web.xml配置之外,还可以使用注解的方式配置,现在主流的配置方式是使用注解,这是Servlet3.0的特性,注解的配置要比web.xml轻量、简单,但是不排除一些老工程仍然使用着web.xml的配置方式。
下面介绍一下,在注解上使用 * 通配符:
1./admin/* 这种配置表示访问的名称必须是以admin/开头,但是后面的字符串可以任意,*作为一个匹配任意字符串的存在,以下使用实际代码示例演示一下这个用法:

image

运行结果:

image

控制台:

image

2.*.action 表示访问的名称后缀必须是action ,前缀可以是任意的字符串:
运行结果:

image

控制台:

image

Servlet家族 Servlet家族派生体系中的最高父类是Servlet接口,此接口定义了其实现类必须要重写的基本方法。然后就是GenericServlet类,这是一个抽象类,是一个通用的Servlet,它实现于Servlet接口,这个类相当于给Servlet家族的派生体系增加了一个分支,接着就是到了具备协议的HttpServlet类,这也是一个抽象类继承于GenericServlet类,不过此类没有定义抽象方法,这是带有http协议的Servlet,是专门针对http所开发出来的。
现在的网站访问几乎都是http协议或https协议,为什么不在父类上就定义好协议?如果这么干的话,就违反了设计模式的六大原则,在最高父类上就写死了带有哪些协议,那么以后衍生出别的协议或者需要使用别的协议的话,岂不是无法扩展,只能对父类进行修改?这在程序设计上是绝对不允许的,计模式的六大原则之一就是开放-封闭原则:对修改封闭—对扩展开放。
而且单一职责原则也不允许一个类包含太多不同的功能,因为这会产生不必要的高耦合性,一个类只做一件主要的事情。所以开发Servlet家族的工程师就比较聪明,使用了一个最高接口定义了所有Servlet类都必须要具备的基本方法,然后让子类去做实现,不同的协议只需要增加不同的子类即可,无需对父类进行修改,并且子类之间互相不依赖,这是迪米特法则,将所有类的依赖都抽象到一个接口父类上,这就是面向接口编程。
面向接口的概念就像修理电脑一样,电脑某个配件坏了,直接更换就可以了,不需要更换其他的配件。例如:内存条坏了,我就换根内存条就好了,我不需要换硬盘也不需要换主板。更换一个配件完全不会影响到其他的配件正常使用,这是因为它们之间都不互相依赖,就像子类互相不依赖一样,它们都只依赖一个接口,只要接口合适安装上去就可以使用了(扩展子类)。子类互相不依赖耦合性就低就不会互相影响,就好像让你修电脑好像很简单,基本上换个配件就可以了(毕竟都有防呆接口)。但是让你去修收音机就不是那么简单了,收音机的配件基本上都集成在一块线路板上,全是二极管、电阻、单片机什么的,除了专门修理的人员一般人是不会修的,这就是因为耦合性太高。如果子类之间也像线路板一样耦合性这么高,想想也知道一旦出问题了修改起来有多麻烦。
所以为什么不像电脑中的配件一样,将子类内部的复杂性封装起来,让它们都只依赖一个父类接口,出问题了只需要修改或更换某个子类就可以了,而且当要增加功能的时候,就直接扩展子类即可,不需要再进行其他的变动,就像我电脑要音质牛逼一点就加个独立声卡,想要网速快一些我可以加个网卡,这就是为什么要去面向接口编程,为什么开发Servlet家族的工程师能够将Servlet的灵活、扩展性做的这么好,这都是因为应用了面向接口编程。

以上用了一大堆废话说明了为什么要面向接口编程,和面向接口编程的好处,接下来介绍一下Servlet接口,GenericServlet、HttpServlet类中的主要方法(不是全部):

  1. Servlet接口
    Servlet接口中有三个主要的方法,分别是:
    init(ServletConfig) 初始化方法,此方法在Servlet实例化对象后会被调用。
    service(ServletRequest, ServletResponse) 服务,用于接收客户端请求的方法
    destroy() 销毁方法

Servlet接口源码:

image

  1. GenericServlet抽象类
    有四个主要的方法,分别是:
    init(ServletConfig) 初始化方法,同样的初始化时会被调用
    init() 初始化方法
    service(ServletRequest, ServletResponse) 服务方法
    destroy() 销毁方法

GenericServlet中有一个init(),这个方法是用来给用户重写的,通过重写这个方法我们可以在初始化时进行一些操作。其实这个方法会被init(ServletConfig)方法调用,所以才能在初始化时进行一些操作,看一下源码就知道了:

image

  1. HttpServlet抽象类
    HttpServlet的方法就比较多了,其中主要的是以下这些方法:
    service(ServletRequest, ServletResponse) 这是重写的父类的服务方法,在这里会将ServletRequest和ServletResponse参数对象强制转换成http协议的HttpServletRequest和HttpServletResponse对象,转换完之后就会调用下面的service(HttpServletRequest, HttpServletResponse)方法。

service(HttpServletRequest, HttpServletResponse)
这是HttpServlet的服务方法,是具体到了http协议的服务方法,这个方法会被service(ServletRequest, ServletResponse)调用,这个方法的HttpServletRequest和HttpServletResponse参数对象就是由这个不带协议的service方法传递过来的。
do...系列方法,这个系列的方法会被带有http协议的service方法调用,它们的参数对象也是由这个service方法传递进来的: doGet(HttpServletRequest, HttpServletResponse)
当浏览器是通过地址栏的URL或者超链接等连接的方式进行访问的,就会默认调用doGet方法,在表单中的提交访问则是可以选择性的调用。
doPost(HttpServletRequest, HttpServletResponse)
当浏览器是通过表单提交来进行访问的,可以选择调用doPost方法。
以下的五个方法的调用,是需要在http请求头文本中定义的:
doHead(HttpServletRequest, HttpServletResponse)
doPut(HttpServletRequest, HttpServletResponse)
doDelete(HttpServletRequest, HttpServletResponse)
doOptions(HttpServletRequest, HttpServletResponse)
doTrace(HttpServletRequest, HttpServletResponse)

从这几个方法的特性可以知道HttpServlet会调用哪个do系列的方法,是由浏览器中定义的请求方式决定的,我们可以们查看service(HttpServletRequest, HttpServletResponse)方法的源码,看看do系列方法是怎么被调用的:

image

image

从观察Servlet这几个类的派生体系,可以知道如果想要接收任何类型的浏览器请求,只需要重写service方法即可。
下面使用一个流程图来看一下Servlet的访问流程:

image

Servlet家族思维导图:

image

1
0
分享到:
评论

相关推荐

    JAVAEE——基于ECLIPSE和WEBLOGIC

    JavaEE是Java企业版的简称,它是一种用于构建企业级应用程序的框架,涵盖了服务器端的开发技术,包括Servlet、JSP、EJB、JMS、JNDI等。本课件将重点讲解如何在Eclipse集成开发环境中配置和使用WebLogic服务器进行...

    求精要诀——JavaEE编程开发案例精讲 源代码(8-12)

    【标题】"求精要诀——JavaEE编程开发案例精讲 源代码(8-12)"涉及的是JavaEE平台上的高级编程实践,主要涵盖第8至12章的关键知识点。JavaEE,全称Java Platform, Enterprise Edition,是Java语言在企业级应用开发...

    javaEE——在线打车系统.zip

    1. **JavaEE架构**:JavaEE平台提供了丰富的API和服务,支持多层架构,包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。在线打车系统可能利用这些层进行...

    求精要诀——JavaEE编程开发案例精讲 源代码

    《求精要诀——JavaEE编程开发案例精讲》是一本深入浅出的JavaEE编程教程,由清华大学出版社出版。本书旨在通过丰富的实例讲解,帮助读者掌握JavaEE平台上的核心开发技术,提升实际项目开发能力。书中源代码的提供,...

    3.6javaEE_原生Servlet_MySql企业财务管理系统设计与实现.zip

    《企业财务管理系统设计与实现——基于JavaEE、Servlet和MySQL》 在当今信息化时代,企业对财务管理系统的依赖日益增强,高效、准确的财务管理系统成为企业管理的核心组成部分。本系统设计与实现利用了JavaEE技术栈...

    javaee实验考察项目结课项目 纯servlet 无后端框架 网盘项目

    【JavaEE实验考察项目——纯Servlet实现的网盘系统】 本项目是一个基于JavaEE技术的网盘系统,完全使用Servlet进行开发,没有依赖任何后端框架。Servlet是Java Web开发中的核心组件,它用于处理HTTP请求,提供动态...

    JavaEE开发技术与案例教程——刘彦君 课件

    《JavaEE开发技术与案例教程——刘彦君 课件》是刘彦君主编的一份详尽的教学资源,旨在深入浅出地介绍JavaEE技术及其实际应用。JavaEE(Java Platform, Enterprise Edition)是Java平台在企业级开发中的标准,主要...

    JavaEE5实用教程——基于WebLogic和Eclipse程序源代码

    综上所述,"JavaEE5实用教程——基于WebLogic和Eclipse程序源代码"涵盖了从基础组件到高级特性的广泛内容,旨在帮助开发者利用JavaEE5的简化特性,结合WebLogic Server的稳定性和Eclipse的高效开发工具,创建高质量...

    JavaEE基础实例源程序

    4. **第4章:MVC框架——Servlet+JSP+JavaBean** - MVC(Model-View-Controller)模式:JavaEE中常见的设计模式,用于分离业务逻辑、数据模型和用户界面。此章可能通过一个简单的例子展示如何在JavaEE项目中实现MVC...

    Java毕业设计——javaEE土地档案管理系统(论文+答辩PPT+源代码+数据库).zip

    《Java毕业设计——JavaEE土地档案管理系统》是一个典型的基于Java技术的Web应用项目,它集成了Java、JSP以及数据库管理等多方面的技术知识。这个系统不仅提供了完整的论文、答辩PPT、源代码,还包括了数据库设计,...

    javaee项目(手机销售公司)

    【JavaEE项目——手机销售公司】是一个基于JavaEE技术栈的Web应用程序,旨在模拟和管理一个手机销售公司的业务流程。这个项目涵盖了多个重要的IT知识点,包括但不限于以下几点: 1. **JavaEE架构**:JavaEE(Java ...

    javaEE鲜花在线销售

    【JavaEE鲜花在线销售】项目是一个基于Web的应用程序,它利用了Java技术栈中的关键组件——JSP(JavaServer Pages)和Servlet,旨在提供一个功能完善的在线花卉销售平台。在这个项目中,用户可以浏览各类鲜花,进行...

    javaee经典学习资料大全

    - 《J2EE三大框架笔记》PDF版:详细记录了J2EE中的三大框架——Servlet、JSP、EJB的技术细节和应用案例。 - Java EE全程学习计划:提供了学习Java EE的路线图和建议,帮助开发者系统性地构建知识框架。 3. 应用实例...

    Java Web快速入门——全十讲

    #### 一、Java与Web开发的融合:JavaEE标准框架 在探讨Java Web开发之前,我们首先要理解Java在Web领域的定位。Java不仅仅是一种编程语言,它还是一套完整的生态系统,适用于各种不同的平台。在Java的三大平台中...

    毕业设计 javaEE

    【标签】中的“s2sh”和“ssh”指的是两种流行的JavaEE Web开发框架——Struts2、Spring和Hibernate的组合。Struts2负责控制流程,Spring提供依赖注入和事务管理,而Hibernate则作为对象关系映射(ORM)工具,简化了...

    JavaEE课件

    7. **JSF(JavaServer Faces)**:是JavaEE提供的一种用户界面组件模型,用于构建Web应用程序。它简化了创建用户界面的过程,并提供了丰富的组件库。 8. **CDI(Contexts and Dependency Injection)**:为JavaEE...

    JavaEE7-api(chm版).zip

    这个压缩包中的两个文件——JavaEE7-api.chm和java ee 7 api.zip,都是与JavaEE 7 API相关的资源。 JavaEE 7是Java平台上用于构建企业级应用的框架,它包括一系列标准和规范,如Servlet、JSP、EJB、JMS、JPA、JSF等...

    中北大学JavaEE框架课程设计

    JavaEE框架是企业级应用开发的重要平台,它提供了丰富的组件和服务,使得开发者能够快速构建可扩展、安全且高性能的Web应用程序。在这个中北大学的JavaEE框架课程设计中,学生们将学习如何运用这些技术来实现一个...

Global site tag (gtag.js) - Google Analytics