第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 使用字节流响应中文

  • 编写代码

****使用上述代码向页面输出中文是否会有乱码?

  • 不一定

    • 其实这个乱码的产生与中文转成字节数组及浏览器打开方式(打开的时候采用的默认字符集)有关
  • 解决:
    • 将中文转成字节数组的时候和浏览器默认打开的时候采用的字符集一致即可。

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讲解的更多相关文章

  1. java web 中的servlet讲解

    首先,解释一下解释一下什么是servlet?说一说Servlet的生命周期? servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet ...

  2. 学Android开发,入门语言java知识点

    学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...

  3. Ant 之bulid.xml详解

    ANT build.xml文件详解(一) Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令.当编译Linux内核及一些软件的 ...

  4. JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

    什么是JSP内置对象 JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用.JSP技术的设计者为便于开发人员在编写JSP页面时获得这些w ...

  5. JSP(二):JSP九大内置对象、四个作用域对象

    jsp的九大内置对象:        内置对象:            jsp文件在转译成其对应的Servlet文件的时候自动生成的并声明的对象.我们在jsp页面中直接使用即可.        注意: ...

  6. Ant之build.xml详解---可用

    Ant的概念 :在Eclipse中使用Ant Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率. Ant和make命令很像. ...

  7. Servlet、Servlet容器等内容讲解

    转载自http://blog.csdn.net/iAm333 对于Servlet.Servlet容器以及一个Servlet容器-Tomcat这些概念讲解的挺清晰的,转载下 之前在开源中国看到一篇文章& ...

  8. servlet 如何处理多请求访问以及线程讲解

    servlet 如何处理多请求访问以及线程讲解 场景:js循环500次请求同一个后台接口,接口内部逻辑:1.查询商品数量,2.扣减商品数量 ,那么该接口是否需要考虑多线程并发安全问题? 分析: 1.先 ...

  9. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

随机推荐

  1. rxjava rxandroid使用遇到的坑

    今天在解决一个界面加载本地数据库数据的时候,使用rxjava在指定io线程操作是遇到一个问题,即使指定了在io线程操作,可是界面还是卡顿,最后通过打印线程Thread.currentThread(). ...

  2. office-word

    目录(大纲) word中大纲的视图(也就是目录)是根据1/2/3级大纲决定的 格式刷 可以刷成一样的格式,字体,编号以及大纲等等. 主要用于编号和目录,快捷键(ctrl+shift) 编号设置(不建议 ...

  3. mfc "缺少函数标题(是否是老式的形式表)"的总结

    首先出现这种问题要定位到程序中出错的地方查看,如果没有问题就仔细看类的声明和定义.可能是对应类的后面没有加: 第二个原因是可能忘记了添加头文件 "stdafx",如果是这样可以加上 ...

  4. 基于Oracle的SQL优化(崔华著)-整理笔记-工具集

    一.脚本display_cursor_9i.sql是可以得到SQL的真实执行计划,使用示例 使用示例,请看以下case 1.执行测试sql: SELECT T1.*,T2.* FROM T_0504 ...

  5. Cookie是什么?从哪来?存在哪?往哪去?

    什么是cookie? cookie最简单的介绍就是服务器返回的一个字符串信息,只不过我们每次请求都需要把它发送给服务器.以AFN和android-async-http为例子,默认都会把cookie自动 ...

  6. andorid 反编译

    1. 字节码文件转java文件 smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称 ...

  7. rabbitmq之window环境启动

    rabbitmq启动方式有2种 1.以应用方式启动 rabbitmq-server -detached 后台启动 Rabbitmq-server 直接启动,如果你关闭窗口或者需要在改窗口使用其他命令时 ...

  8. Office 365 开发 集成VS2013 (一)

    博客地址 http://blog.csdn.net/foxdave 题外话:好久不写了,个人比较懒,有时候想写东西的时候想一想就又不知从何下笔了.之前因为某些机缘发现自己完全是个管理外行,所以最近下了 ...

  9. azure 最佳实践 -- 保持冗余

    保持冗余确保你的应用的部署体系是有冗余的,以避免单一节点失败的情况.一个弹性良好的系统可以灵活的绕过系统故障.找出应用中(请求执行)的关键路径.路径中的每个节点是否都有冗余?子系统失败时,系统能否有效 ...

  10. python 中datetime 和 string 转换

    dt = datetime.datetime.strptime(string_date, fmt) fmt 的格式说明如下: https://docs.python.org/2/library/dat ...