一、什么是ServLet?

serverLet是javaEE中运行于服务器端的,用于接收和响应HTTP协议的请求的程序。

二、ServLet的三种实现方式

1、实现ServLet接口

步骤:

(1)实现ServLet接口

(2)重写包括service()等五个方法

(3)在web.xml中声明和配置ServLet

(4)部署该web项目并通过浏览器访问

2、继承GenericServLet抽象类

步骤:

(1)继承GenericServLet类

(2)重写service()方法

(3)在web.xml中声明和配置ServLet

(4)部署该web项目并通过浏览器访问

注意:GenericServLe抽象类是ServLet接口的实现类,GenericServLet已经帮我们实现好了包括init()、destory()等方法,我们只需要重写service()方法即可。

3、继承HTTPServLet类(常用)

步骤:

(HTTPServLet类

(2)重写doGet()方法和doPost()方法

(3)在web.xml中声明和配置ServLet

(4)部署该web项目并通过浏览器访问

注意:HTTPServLet是GenericServLet的派生类,其将GenericServLet的service()方法重写为了doGet()方法和doPost()方法,因此,我们只需要重写doGet()和doPost()方法即可,但由于这两个方法的方法体通常都是一样的,因此我们只需要写一个方法体即可,另一个方法的方法体直接调用写好的那个函数即可。

(*)web.xml中ServLet的配置方法

主要添加和配置<servLet>标签和<servLet-mapping>标签

三、ServLet的执行过程

1、客户端浏览器发起HTTP请求

2、Tomcat服务器解析请求地址url,找到对应的web应用程序

3、找到该web应用程序的web.xml文件

4、继续解析请求资源地址的url,找到对应的应用资源

5、执行service()方法(HTTPServLet是执行doGet()和doPost()中的代码),响应个客户端浏览器。

四、ServLet的三种映射方式

1、具体名称的方式

特点:访问资源路径必须和映射配置完全相同。

<!--具体名称格式--><servlet><servlet-name>servLet01</servlet-name><servlet-class>com.wangyang.ServLet.Serv01</servlet-class></servlet><servlet-mapping><servlet-name>servLet01</servlet-name><url-pattern>/servLet01</url-pattern></servlet-mapping>

2、'/'开头+通配符方式

特点:只要考虑复合目录结构即可,不必考虑结尾形式。

<!--通配符格式+固定结尾格式--><servlet><servlet-name>servLet01</servlet-name><servlet-class>com.wangyang.ServLet.Serv01</servlet-class></servlet><servlet-mapping><servlet-name>servLet01</servlet-name><url-pattern>/serv/*</url-pattern><!--只要资源url以/serv/开头的都可访问--></servlet-mapping>

3、通配符+固定格式结尾的方式

特点:只要复合固定结尾格式即可,不必考虑前面。

<!--通配符格式+固定结尾格式--><servlet><servlet-name>servLet01</servlet-name><servlet-class>com.wangyang.ServLet.Serv01</servlet-class></servlet><servlet-mapping><servlet-name>servLet01</servlet-name><url-pattern>*.do</url-pattern><!--以.do结尾的资源url都可以访问--></servlet-mapping>

五、ServLet的线程安全问题

servLet是线程不安全的,所以,对于类成员的使用需要加同步锁,即将使用类成员的地方加上synchronized关键字抽取为同步代码块即可,或者直接将类成员定义与service方法(doGet方法和doPost方法)中即可。

六、servLet的创建时机

1、第一次访问时创建

优势:减少了对服务器内存的浪费,提高服务器启动的效率。

弊端:如果有些应用需要在应用加载时完成初始化,无法完成。

2、服务器启动时创建

优势:提前创建号对象,提高了首次执行的效率,可以完成一些应用加载时的操作。

弊端:对服务器内存占用比较多,影响服务器启动的效率。

设置方法:

在<servLet>标签中添加<load-on-startup>num</load-on-startup>即可,num为一个整数,num为正整数时表示服务器启动时创建,num为负整数或不写时表示第一次使用时创建。

    <servlet><servlet-name>servLet01</servlet-name><servlet-class>com.wangyang.ServLet.Serv01</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>servLet01</servlet-name><url-pattern>/servLet01</url-pattern></servlet-mapping>

七、Tomcat默认的ServLet

默认ServLet是由服务器提供的一个ServLet,它配置在Tomcat的conf目录中的web.xml文件中

客户端发送HTTP请求时,首先会在web项目中的web.xml文件中查找映射配置,若查找的到则执行,查找不到则去找默认的ServLet,由默认的ServLet进行处理。

八、ServletConfig

1、ServletConfig简介

介绍:ServLetConfig是ServLet的配置参数对象,在ServLet的规范中,允许每一个ServLet都提供一些初始化的配置,所以,每一个ServLet都有一个自己的ServLetConfig。

作用:在ServLet初始化时,把一些配置信息传递给Servlet。

生命周期:和Servlet的声明周期相同。

2、ServletConfig配置方式

在web.xml文件中的<servlet>标签中,通过<init-param>标签来配置,有两个子标签:

(1)<param-name>:带表初始化参数的key。

(2)<param-value>:带表初始化参数的value.

示例:

    <servlet><servlet-name>servLet01</servlet-name><servlet-class>com.wangyang.ServLet.Serv01</servlet-class><!--配置ServLetConfig--><init-param><param-name>encoding</param-name>  <!--设置编码为utf-8--><param-value>UTF-8</param-value></init-param><init-param><param-name>desc</param-name>  <!--设置描述信息--><param-value>this is ServLet01</param-value></init-param></servlet>

3、ServletConfig的常用方法

4、ServletConfig的使用(在servlet对象中使用)

(1)首先声明ServletConfig对象

(2)通过init()方法,来对ServletConfig对象进行赋值(有服务器自动进行赋值)

(3)在Service()方法(HTTPServlet中为doGet和doPost方法)中调用ServletConfig对象方法进行操作。

package com.wangyang.ServLet;import javax.servlet.*;
import java.io.IOException;public class Serv01 implements Servlet {//1、声明ServletConfig对象private ServletConfig config ;@Overridepublic void init(ServletConfig servletConfig) throws ServletException {//2、通过init方法对ServletConfig对象进行初始化this.config=servletConfig;}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {//3、通过调用ServletConfig对象的方法进行使用,如:输出其描述信息:String string = this.config.getInitParameter("desc");System.out.println(string);}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

操作结果: 

九、ServletContext

1、ServletContext简介

介绍:ServletContext是应用上下文对象(应用域对象),每一个应用中只有一个ServletContext对象。

作用:可以配置和获得应用的全局初始化参数,可以实现Servlet之间的数据共享。

生命周期:应用一加载时被创建,应用被停止时销毁。

2、ServletContext的配置方式

在<web-app>标签中,通过<context-param>标签来配置,有两个子标签:

(1)<param-name>:代表全局初始化参数的key。

(2)<param-value>:代表全局初始化参数的value。

例如:

 <!--配置全局ServletContext--><context-param><!--设置全局编码格式--><param-name>globalEncoding</param-name><param-value>UTF-8</param-value></context-param><context-param><!--设置全局描述信息--><param-name>desc</param-name><param-value>this is Context</param-value></context-param>

3、ServletContext的常用方法

步骤:

(1)通过ServletConfig对象的getServletContext()方法或者直接调用本身的getServletContext()方法获取ServletContext对象。

(2)通过调用ServletContext对象来使用其方法。

常用的方法有:

(1)与配置相关的方法

(2)与全局数据相关的方法:

Java开发之ServLet详解相关推荐

  1. Android软件开发之TextView详解(六)

    Android软件开发之TextView详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/ ...

  2. 你真的弄明白了吗?Java并发之AQS详解

    你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...

  3. Java 并发之 AQS 详解(上)

    Java 并发之 AQS 详解 前言 Java SDK 为什么要设计 Lock 死锁问题 synchronized 的局限性 显式锁 Lock Lock 使用范式 Lock 是怎样起到锁的作用呢? 队 ...

  4. Java并发之AQS详解(文章里包含了两片文章结合着看后边文章不清楚,请看原文)

          AQS全称抽象队列同步器(AbstractQuenedSynchronizer),它是一个可以用来实现线程同步的基础框架.当然,它不是我们理解的Spring这种框架,它是一个类,类名就是A ...

  5. Java并发之AQS详解

    一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQ ...

  6. JAVAWEB开发之Hibernate详解(三)——Hibernate的检索方式、抓取策略以及利用二级缓存进行优化、解决数据库事务并发问题

    Hibernate的检索方式  Hibernate提供了以下几种检索对象的方式: 导航对象图检索方式:根据已经加载的对象导航到其他对象. OID检索方式:按照对象的OID来检索对象. HQL检索方式: ...

  7. java开发之ServLet注解、自定义容器方式详解

    目录 一.为什么使用注解方式和自定义容器方式 二.注解方式步骤 1.创建javaEE8版本的web项目 2.创建一个类MyServlet继承HTTPServlet类并重写doGet()和doPost( ...

  8. JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

    Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring?  Spring是分层的Java ...

  9. oc开发之block详解

    2019独角兽企业重金招聘Python工程师标准>>> BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行.标识 ...

最新文章

  1. activemq 内存_ActiveMQ:了解内存使用情况
  2. (BFS)Meteor Shower (poj3669)
  3. 计算机网络是一个 系统,计算机网络是一个什么系统
  4. python写入文件不覆盖_Python第7课:不一样的新建文件
  5. java查看sql视图,java - Spring + JPA + SQL视图 - SO中文参考 - www.soinside.com
  6. 28.卷1(套接字联网API)---原始套接字
  7. Minkels公司在欧洲推出迷你数据中心产品
  8. C# 获取电脑CPU序列号
  9. SOLID 原则之依赖倒置原则
  10. ad转3d视图快捷键_【技术干货】PCB工程师不得不看:超级实用AD常用快捷键总结...
  11. 软件测试论文参考文献
  12. 什么是Vue,Vue的作用与原理?
  13. ORACLE EM 13C安装部署和初步使用
  14. 用计算机测出人家的信息,NCAE 信息化办公模拟题 含答案
  15. ElasticSearch第三讲 ES-docker-Compose集群部署证书认证
  16. 1. debian telnet安装
  17. python代码使用dns进行调试_dnspython模块常见用法
  18. 高通滤波器的电压传递函数_低通滤波器、高通滤波器,积分电路、微分电路分析...
  19. 全面解析|搞懂Nginx这一篇就够了
  20. android 仿ofo页面,ReactNative 仿造 ofo 共享单车快速开发的app

热门文章

  1. Python 连接 ftp 服务器操作
  2. 对Linux终端使用socks5代理的方法详解
  3. Postgresql源码(34)Btree索引读——_bt_first搜索部分分析
  4. ipad手写笔哪个牌子好用?便宜的ipad触控笔
  5. S+MySQL——3.使用ODBC方式连接MySQL数据库
  6. 阿里云code和git管理项目
  7. 缤纷多彩的404页面(404.html)
  8. DDD Domain Drive Design
  9. Fedora30 安装 WPS Office 2019 For Linux
  10. Lammps之结冰构建