Web 技术

1.Servlet 的生命周期详解

Servlet 的生命周期,简单的概括这就分为四步:

 servlet 类加载--->实例化--->服务--->销 毁

1、Web Client 向 Servlet 容器(Tomcat)发出 Http 请求

2、Servlet 容器接收 Web Client 的请求

3、Servlet 容器创建一个 HttpRequest 对象,将 Web Client 请求的信息封装到这个对象中

4、Servlet 容器创建一个 HttpResponse 对象

5、Servlet 容器调用 HttpServlet 对象的 service 方法,把 HttpRequest 对象与 HttpResponse
对象作为参数传给 HttpServlet 对象

6、HttpServlet 调用 HttpRequest 对象的有关方法,获取 Http 请求信息

7、HttpServlet 调用 HttpResponse 对象的有关方法,生成响应数据

8、Servlet 容器把 HttpServlet 的响应结果传给 Web Client

Servlet 的框架是由两个 Java 包组成的:javax.servlet 与 javax.servlet.http。

在 javax.servlet 包中定义了所有的 Servlet都必须实现或者扩展的通用接口和类。
在 javax.servlet.http 包中定义了采用 Http 协议通信的 HttpServlet 类。Servlet 的
框架的核心是 javax.servlet.Servlet 接口,所有的 Servlet 都必须实现这个接口。

在 Servlet 接口中定义了 5 个方法,其中 3 个方法代表了 Servlet 的生命周期

1、init 方法:负责初始化 Servlet 对象。
2、service 方法:负责响应客户的请求。
3、destroy 方法:当 Servlet 对象退出生命周期时,负责释放占用的资源

Jsp 和 servlet 的区别和联系 :

区别

jsp 经编译后就变成了 Servlet.
(JSP 的本质就是 Servlet,JVM 只能识别 java 的类,不能识别 JSP 的代码,Web 容器将 JSP 的代码编译成 JVM 能够识别的 java 类)


Servlet 在 Java 代码中通过 HttpServletResponse 对象动态输出 HTML 内容
JSP 在静态 HTML 内容中嵌入 Java 代码,Java 代码被动态执行后生成 HTML 内容


jsp 更擅长表现于页面显示,servlet 更擅长于逻辑控制.


Servlet 中没有内置对象,Jsp 中的内置对象都是必须通过
HttpServletRequest对象,HttpServletResponse 对象以及HttpServlet 对象得到


Jsp 是 Servlet 的一种简化,使用 Jsp 只需要完成程序员需要输出到客户端的内容,Jsp 中的 Java 脚本如何镶嵌到一个类中,由Jsp 容器完成。
而 Servlet 则是个完整的 Java 类,这个类的 Service 方法用于生成对客户端的响应。

联系

JSP 是 Servlet 技术的扩展,本质上就是 Servlet 的简易方式。JSP 编译后是“类 servlet”.

Cookie 和 session 区别

1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。

2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗
考虑到安全应当使用 session。

3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用 COOKIE。

4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。


将登陆信息等重要信息存放在 SESSION
其他信息如果需要保留,可以放在 COOKIE

Jsp 9大内置对象:

1、request 对象

request 对象是 javax.servlet.httpServletRequest 类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过 HTTP
协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request 对象的作用域为一次请求。

2、response 对象

response 代表的是对客户端的响应,主要是将 JSP 容器处理过的对象传回到客户端。response 对象也具有作用域,它只在 JSP
页面内有效。

3、session 对象

session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个 session 对象,用于保存该用户的信
息,跟踪用户的操作状态。session 对象内部使用 Map 类来保存数据,因此保存数据的格式为 “Key/value”。 session 对象的
value 可以使复杂的对象类型,而不仅仅局限于字符串类型。

4、application 对象

application 对象可将信息保存在服务器中,直到服务器关闭,否则 application 对象中保存的信息会在整个应用中都有效。
与 session 对象相比,application 对象生命周期更长,类似于系统的“全局变量”。

5、out 对象

out 对象用于在 Web 浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲
区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

6、pageContext 对象

pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP 页面的 out、request、reponse、session、application 等对象。pageContext 对象的创建和初始化都是由容器来完成的,在 JSP 页面中可以直接使用 pageContext 对象。

7、config 对象

config 对象的主要作用是取得服务器的配置信息。通过 pageConext 对象的 getServletConfig() 方法可以获取一个 config 对
象。当一个 Servlet 初始化时,容器把某些信息通过 config 对象传递给这个 Servlet。 开发者可以在 web.xml 文件中为应用
程序环境中的 Servlet 程序和 JSP 页面提供初始化参数。

8、page 对象

page 对象代表 JSP 本身,只有在 JSP 页面内才是合法的。page 隐含对象本质上包含当前 Servlet 接口引用的变量,类似于 Java 编程中的 this 指针。

9、exception 对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的 JSP 页面中使用该
对象将无法编译 JSP 文件。excepation 对象和 Java 的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了
所有异常情况。在 Java 程序中,可以使用 try/catch 关键字来处理异常情况; 如果在 JSP 页面中出现没有捕获到的异常,就会
生成 exception 对象,并把 exception 对象传送到在 page 指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

Request 对象主要有哪些方法:

setAttribute(String name,Object):设置名字为 name 的 request 的参数值
getAttribute(String name):返回由 name 指定的属性值
getAttributeNames():返回 request 对象所有属性的名字集合,结果是一个枚举的实例
getCookies():返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组
getCharacterEncoding() :返回请求中的字符编码方式
getContentLength() :返回请求的 Body 的长度
getHeader(String name) :获得 HTTP 协议定义的文件头信息
getHeaders(String name) :返回指定名字的 request Header 的所有值,结果是一个枚举的实例
getHeaderNames() :返回所以 request Header 的名字,结果是一个枚举的实例
getInputStream() :返回请求的输入流,用于获得请求中的数据
getMethod() :获得客户端向服务器端传送数据的方法
getParameter(String name) :获得客户端传送给服务器端的有 name 指定的参数值
getParameterNames() :获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实
例
getParameterValues(String name):获得有 name 指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString() :获得查询字符串
getRequestURI() :获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的 IP 地址
getRemoteHost() :获取客户端的名字
getSession([Boolean create]) :返回和请求相关 Session
getServerName() :获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性