Servlet讲解
第1章 Servlet的生命周期
1.1.1 Servlet的生命周期概述
1.1.1.1 什么是生命周期
生命周期:一个对象从创建到销毁过程。
1.1.1.2 Servlet的生命周期(*****)
Servlet生命周期:Servlet对象从创建到销毁的过程。
- Servlet何时被创建又是何时被销毁的?
Servlet中有init,service,destroy方法,这几个方法称为是Servlet生命周期相关的方法。
- Servlet是在第一次被访问的时候会被实例化,只要Servlet一被实例化那么Servlet中的init方法就会执行(init只会执行一次)。任何一次从客户端发送来的请求,那么Servlet中的service方法就会执行(在service方法的内部根据请求的方式不同调用不同doXXX方法)。当Servlet从服务器中移除或者服务器关闭的时候Servlet对象被销毁,里面的destroy方法就会执行,然后垃圾回收就会将其回收掉。
1.1.1.3 代码演示Servlet的生命周期

1.1 Servlet的启动时加载
1.1.1 为什么使用启动时加载
Servlet对象是第一次被访问的时候会被创建的,init方法就会执行。假设在init方法中做了一些比较耗时的操作(比如:加载了一些配置文件并且解析可能需要花费3秒钟)。第一个用户第一次访问这个Servlet的时候,需要等待3秒钟。如何使第一个用户在第一次访问的时候不需要花费这么长时间?
1.1.2 什么是启动时加载
Servlet默认是在第一次访问的时候创建的对象,现在通过一个配置将Servlet的实例化的过程放在服务器启动的时候(让服务器启动的时候创建Servlet的对象)。如果现在这样做那么之前花费的时间就会在服务器启动的时候一起花费掉了。对于用户来讲就不需要额外花费这个时间。
1.1.3 配置完成启动时加载

1.1 Servlet的访问路径的配置
1.1.1 Servlet中的urlPattern的配置
1.1.1.1 <url-pattern>的配置方式
- 完全路径匹配
- 以 / 开始 比如:/ServletDemo1 /aaa/ServletDemo2

- 目录匹配
- 以 / 开始,以 /*结束 比如:/* /aaa/* /aaa/bbb/*

- 扩展名匹配
- n 不能以 / 开始,以*开始 比如:*.action *.do *.jsp

1.1.1.2 访问的优先级:
完全路径匹配 > 目录匹配 > 扩展名匹配
1.2 ServletConfig对象
1.2.1 ServletConfig对象的概述
ServletConfig用来获得Servlet的相关的配置的对象。
1.2.1.1 获得ServletConfig对象

1.2.1.2 ServletConfig对象的API

- 获得Servlet的初始化参数
- 获得ServletContext对象
- 获得Servlet的名称
1.2.1.3 演示ServletConfig的API
- 配置初始化参数
- 配置

- 实现

1.3 ServletContext对象之获取web项目信息
1.3.1 ServletContext对象概述
1.3.1.1 什么是ServletContext
ServletContext:Servlet的上下文对象。ServletContext对象对Servlet之前和之后的内容都知道。这个对象一个web项目只有一个。在服务器启动的时候为每个web项目创建一个单独的ServletContext对象。
1.3.2 ServletContext对象的作用
1.3.2.1 作用一:用来获取web项目信息
因为一个web项目只有一个ServletContext对象,所以这个对象对整个项目的相关内容都是了解的。
- 方法:
- 获取文件的MIME类型:


- 获取web项目请求工程名:


- 获取web项目的初始化参数:



1.1 ServletContext对象之读取web项目下文件
1.1.1 ServletContext对象的作用
1.1.1.1 作用二:读取web项目下的文件
之前使用IO流就可以读取文件(java项目中)。现在是一个web项目,web项目需要发布到tomcat下才能访问的。获取web项目下的文件如果使用传统的IO就会出现问题(原因:路径中使用的是相对路径,相对的是JRE环境)。
1.1.1.2 读取文件的代码实现

1.4 ServletContext对象之作为域对象存取数据
1.4.1 域对象概述
1.4.1.1 什么是域对象
域对象:指的是将数据存入到域对象中,这个数据就会有一定的作用范围。域指的是一定的作用范围。
1.4.2 ServletContext作为域对象
1.4.2.1 ServletContext作为域对象的API
l 存入数据的方法:

l 获取数据的方法:

l 移除数据的方法:

1.4.2.2 ServletContext作为域对象的作用范围
ServletContext是在服务器启动的时候为每个web项目单独创建一个ServletContext对象。当web项目从服务器中移除,或者是关闭服务器的时候ServletContext对象会被销毁。向ServletContext中保存的数据一直存在(当服务器关闭的时候ServletContext对象被销毁,然后里面数据才会失效)。范围:整个web应用。
1.4.3 ServletContext域对象代码演示
1.4.3.1 代码演示


1.1 Response对象的概述
1.1.1 Response对象的概述
1.1.1.1 什么是Response
开发的软件是B/S结构的软件,可以通过浏览器访问服务器的软件。从浏览器输入一个地址访问服务器(将这个过程称为是请求)。服务器接收到请求,需要进行处理,处理以后需要将处理结果显示回浏览器端(将这个过程称为是响应)。
1.1.1.2 画图说明Response对象

1.5 Response对象的API
1.5.1 Response对象的API
1.5.1.1 Response关于响应行的方法

- 设置响应的状态码
- 200 正确
- 302 重定向
- 304 查找本地缓存
- 404 请求资源不存在
- 500 服务器内部错误
1.5.1.2 Response关于响应头的方法

- set开头的方法:针对一个key对应一个value的情况。
- 举例:比如有一个头 content-Type:text/html setHeader(“content-Type”,”text/plain”);
- 最终得到头的结果:content-Type:text/plain

- add开头的方法:针对一个key对应多个value的情况。
- 举例:比如有一个content-Type:text/html addHeader(“content-Type”,”text/plain”);
- 最终得到头的结果:content-Type:text/html,text/plain
1.5.1.3 Response关于响应体的方法

1.5.1.4 Response其他的API

- 重定向的方法

- 设置浏览器打开页面时候采用的字符集

- 设置响应字符流的缓冲区字符集

- 服务器向浏览器回写Cookie的方法
1.6 Response对象的API的代码演示
1.6.1 Response对象API的代码演示
1.6.1.1 设置状态码

1.6.1.2 完成重定向
重定向:302状态码和Location响应头结合使用的效果。

- 实际开发中可以使用
response.sendRedirect(“/web01/ResponseDemo2”);替换重定向两句写法
1.6.1.3 定时刷新效果

1.7 页面定时跳转的扩展
1.7.1 使用JS完成读秒的效果
1.7.1.1 在HTML中完成页面跳转
- 多学一招:

1.7.1.2 使用JS完成读秒效果

第2章 Response对象响应的中文乱码处理
2.0.1 Response向页面响应中文
2.0.1.1 使用字节流响应中文
- 编写代码

****使用上述代码向页面输出中文是否会有乱码?
- 不一定
- 其实这个乱码的产生与中文转成字节数组及浏览器打开方式(打开的时候采用的默认字符集)有关
- l 解决:
- 将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致即可。

2.0.1.2 使用字符流响应中文
- 编写代码

****使用上述代码向页面输出中文是否会产生乱码?
- 一定乱码
- 原因:
- 字符流是有缓冲区的,response获得字符流,response设计默认的缓冲区编码是ISO-8859-1。这个字符集不支持中文的。
- 解决:
- 设置response获得字符流缓冲区的编码和设置浏览器默认打开时候采用的字符集一致即可。

字符流向页面响应中文,有一种简化的方式:

2.1 Request对象的概述及API的介绍
2.1.1 Request对象的概述
2.1.1.1 什么是Request对象
开发的软件都是B/S结构软件,从浏览器向服务器提交一些数据,将这些内容进行封装就封装成了一个请求对象(Request对象)。
2.1.2 Request对象的API
2.1.2.1 获得客户机信息

- 获得请求的方式

- 获得请求路径后的提交参数的字符串

- 获得请求路径的URL和URI

- 获得客户机的IP地址
2.1.2.2 获得请求头的方法

- 获得一个key对应一个value的请求头

- 获得一个key对应多个value的请求头
2.1.2.3 获得请求参数的方法

- 获得提交的参数(一个name对应一个value)

- 获得提交的参数(一个name对应多个value)

- 获得提交的参数,将提交的参数的名称和对应的值存入到一个Map集合中
2.1.2.4 Request作为域对象存取数据的方法

- 向request域中存数据

- 从request域中获取数据

- 从request域中移除数据
2.2 Request对象的API的代码演示
2.2.1 Request对象的API的代码演示
2.2.1.1 Request对象获取客户机信息

2.2.1.2 Request获得请求头的信息

1.1 Request对象接收表单请求参数
1.1.1 Request对象接收表单请求参数
1.1.1.1 编写一个静态页面

1.1.1.2 接收请求参数

1.1 Request对象接收表单请求参数的中文乱码处理
1.1.1 Request对象接收中文数据
1.1.1.1 POST方式接收中文

1.1.1.2 GET方式接收中文

Servlet讲解的更多相关文章
- java web 中的servlet讲解
首先,解释一下解释一下什么是servlet?说一说Servlet的生命周期? servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet ...
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- Ant 之bulid.xml详解
ANT build.xml文件详解(一) Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令.当编译Linux内核及一些软件的 ...
- JSP第二篇【内置对象的介绍、4种属性范围、应用场景】
什么是JSP内置对象 JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用.JSP技术的设计者为便于开发人员在编写JSP页面时获得这些w ...
- JSP(二):JSP九大内置对象、四个作用域对象
jsp的九大内置对象: 内置对象: jsp文件在转译成其对应的Servlet文件的时候自动生成的并声明的对象.我们在jsp页面中直接使用即可. 注意: ...
- Ant之build.xml详解---可用
Ant的概念 :在Eclipse中使用Ant Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率. Ant和make命令很像. ...
- Servlet、Servlet容器等内容讲解
转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的挺清晰的,转载下 之前在开源中国看到一篇文章& ...
- servlet 如何处理多请求访问以及线程讲解
servlet 如何处理多请求访问以及线程讲解 场景:js循环500次请求同一个后台接口,接口内部逻辑:1.查询商品数量,2.扣减商品数量 ,那么该接口是否需要考虑多线程并发安全问题? 分析: 1.先 ...
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
随机推荐
- Object.assign()是浅拷贝
浅拷贝: 复制的值指向同一个内存地址 深拷贝:复制的值指向新的内存地址 var a = { xm: { name: 'xiaoming' } } var b = Object.assign({}, a ...
- uva-1636-概率
https://vjudge.net/problem/UVA-1636 给出一个左轮手枪的弹夹串,第一枪是空的,问是继续打还是转一转再打下一枪还为空的概率大.继续打为空的概率就是 '00'的个数比上' ...
- Holt-Winters模型原理分析
Holt-Winters模型原理分析及代码实现(python) from:https://blog.csdn.net/u010665216/article/details/78051192 引言 最近 ...
- 039——VUE中组件之子组件中data使用实例与text-xtemplate的使用方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 64位Ubuntu系统安装OpenCV 2.4.x+ffmpeg 完美解决方案
http://www.bfcat.com/index.php/2012/09/64bits-ubuntu-opencv-2-4-x-ffmpeg/
- elasticsearch 自定义similarity 插件开发
转自:http://www.chepoo.com/elasticsearch-similarity-custom-plug-in-development.html 在搜索开发中,我们要修改打分机制,就 ...
- windows安装mysql方法 mysql5.7以后的安装方法
mysql 安装步骤: 1.www.mysql.com 下载mysql 2.解压mysql到E盘,或者其他盘解压后 E:\mysql\bin (bin一定要按照这个目录) 3.这bin目录 ...
- Linux:安装Ubuntu时出现“客户机操作新系统已禁用CPU,请关闭或重置虚拟机”
安装Ubuntu时出现“客户机操作新系统已禁用CPU,请关闭或重置虚拟机“ 解决 在vmware的虚拟机的配置文件中找到xxxx.vmx的文件 用记事本打开 加入 cpuid..eax = " ...
- 20155323 2016-2017-2 《Java程序设计》第8周学习总结
20155323 2016-2017-2 <Java程序设计>第8周学习总结 教材学习内容总结 日志API:使用日志的起点是Logger类,要取得Logger类,必须使用Logger的静态 ...
- DesignPattern(二) 创建型模式
创建型模式 创建型模式就是用来创建对象的模式,抽象了实例化的过程.所有的创建型模式都有两个共同点.第一,它们都将系统使用哪些具体类的信息封装起来:第二,它们隐藏了这些类的实例是如何被创建和组织的.创建 ...