第2章 Servlet_知识点

  • 格式:docx
  • 大小:117.88 KB
  • 文档页数:6

第2章 Servlet

1. 概述

Servlet运行在服务器端,它是一种实现了特殊接口的Java类,运行在Servlet容器中。

2. Servlet框架:

a) 要引用javax.servlet包和javax.servlet.http包。

① 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的通用接口和类。

② 在javax.servlet.http包中定义了采用HTTP协议通信的HttpServlet类。

b) 要继承GenericServlet和HttpServlet(其中后者继承前者)。

3. 生命周期

实例化init()  service() destroy()

调用构造方法调用一次

Servlet的生命周期由Web容器控制,当Servlet被请求时Web容器的操作:

① 如果Servlet实例不存在(servlet只有一个),Web容器会首先加载Servlet类,然后创建一个该Servlet的实例,接着调用它的init()方法进行初始化。

② 调用service()方法,并向它传递请求和响应对象。

③ 当Web容器检测到一个Servlet实例应该被移除时,就会调用它的destroy()方法,以便让该实例可以释放它所使用的资源。

4. 使用HttpServlet处理客户端请求

i. 请求对象的常用方法

String getParameter(String labname)根据给定的参数名返回参数

String[] getParameterValues(String labname)根据给定的参数名返回参数数组

getRemoteAddr()返回远程客户端的ip地址

setCharacterEncoding(String encoding)设置request的参数编码

setAttribute()

ObjectgetAtrribute(Stringname)根据参数给定的属性名返回属性值参数不存在的返回null

ii. 响应对象 getWriter() 返回可以像客户端发送字符数据的PrintWrite对象

getOutputStream()返回可以向客户端发送二进制数据的输入流对象

iii. 什么时候是Get方式的请求,什么时候是Post方式的请求?

a) 用get的情况

① 在地址栏直接输入地址时

② 点击页面中的链接

③ Form表单指定用get请求

b) 用post的情况

只有一种:form表单指定用post请求

iv. Get和Post方式的请求有什么区别?

a) Get请求将数据附加在地址后面,数据直接显示在url中

Post请求通过http机制,把那内容放在header中一起传递给服务器端交给action所指的程序进行处理。

b) Get的传输量非常小,Post传递数据相对较多。

c) Get执行效率比Post高

d) Post比Get安全

v. doGet()和doPost()抛出的异常 ServletExeption,IOException

5. 中文乱码问题

i. 为什么会出现乱码?

Web容器默认的编码是ISO-8859-1

ii. 怎么解决?

a) POST请求中,在获取所有请求参数前调用request.setCharacterEncoding(“UTF-8”);

在向浏览器发送中文数据之前,调用response.setCotentType(“text/html;charset=UTF-8”);指定输入的内容的编码方式是UTF-8;

b) GET请求中,提交的数据是作为查询字符串被附加到url中的所以SetCharacterenCoding()是没有用的,应该获取请求参数的值,并重新转码。

Stingname=request。getParameter(“name”);

name=new String(name.getByte(“ISO-8859-1”),”UTF-8”);

6. HTTP协议HTTP(HyperText Transfer Protocol,超文本传输协议)

i. HTTP协议主要用在浏览器和Web服务器之间进行通信,是一种最基本的客户机/服务器的访问协议。浏览器向服务器发送请求,而服务器回应相应的网页

ii. 无状态的协议:协议对于事务处理没有记忆能力。

iii. HTTP消息报文分为三部分:请求行/状态行、头信息、实体

HTTP请求:请求方法 URI(总是以“/”开头)协议/版本请求头请求正文

HTTP响应:协议/状态代码描述响应正文

状态代码:成功 2XX(200成功)

重定向 3XX

客户端错误4XX(404找不到资源)

服务器错误5XX(500服务器内部错误)

7. Servlet配置

i. 初始化参数

a) 作用:更好的解耦,避免把一些信息以硬编码的方式写入程序中。

b) 某一个servlet的初始化参数的用法: ① 在web.xml中在标记中通过进行配置

② 访问方法

ServletConfig sc = getServletConfig();

sc.getInitParameter(“参数名”);

c) 全局初始化参数的用法:

① 在web.xml中通过标记进行配置的上下文的初始化参数。

② 获取方法(步骤):

1) 通过GenericServlet.getServletContext()或者ServletConfig.getServerContext()得到上下文对象。

2) servletContext.getInitParameter()获取参数值

ii. 配置servlet名字和类

a) 在/WEB-INF/web.xml下

全路径名

Servlet的访问路径:上下文路径+映射路径

iii. 设置启动装入优先级

a) Servlet默认的是首次请求的时候加载,可以通过进行修改。

b) 优先级必须是整数

c) 负数或者不设置是默认方法,0或正数时启动容器时加载,数值越小越先加载。

全路径名

10

iv. 映射

a) 为servlet添加一个映射

映射路径

b) 可以为一个servlet添加多个映射路径:使用通配符 /param/*

8. Servlet上下文

i. 对于每个Web应用,上下文对象是唯一的。

ii. 获得ServletContext对象的方法有:

a) Servlet容器在Servlet初始化期间向其传递一个ServletConfig对象,通过这个对象的getServletContext()方法来得到ServletContext对象。

b) 通过GenericServlet类的getServletContext()方法得到。

9. 请求转发与请求重定向

i. 相同点:都可以实现从一个界面到另一个界面

ii. 不同点:

请求转发只能请求到同一个应用下;

请求重定向可以定向到任何一个URL中,不仅仅是同一应用的URL

iii. 请求转发(步骤):

a) 先获取RequestDispatcher(两种方式)

① ServletRequest.getRequestDispatcher()

参数可以相对于上下文也可以相对于当前servlet

② ServletContext.getRequestDispatcher()

参数相对于当前上下文根路径的必须以/开头

b) 调用forward()/include()

① 相同点:在相应被提交之前调用

② 不同点:

a) farward()方法调用后,原先在响应缓存中的没有提交的内容将被自动清除。

b) include()方法转发的资源将产生的响应并入到原来的响应对象中,原先的servlet还可以继续输出响应信息

iv. 请求重定向:response.sendRedirect()

10. 会话跟踪

i. Web服务器跟踪客户状态的方法有四种:

a) 建立含有跟踪数据的隐藏表格字段

b) 重写包含额外参数的URL

c) 使用持久化的Cookie

d) 使用Servlet API中的Session(会话)机制

ii. Session的简介

Java Servlet API使用Session来跟踪会话和管理会话的状态。利用Session,服务器可以把一个客户的所有请求联系在一起,并记住客户的操作状态。

当客户第一次连接到服务器的时候,服务器为其建立一个Session,并分配给客户一个唯一的标识(Session ID),以后客户每次提交请求都要将标识一起提交。服务器根据标识找出特定的Session,用这个Session记录客户的状态。

iii. URL重写

a) 原因