第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) 原因