本帖最后由 小石姐姐 于 2018-11-2 10:05 编辑
day14-Servlet和Request今日内容: 1. Servlet l Servlet体系结构(它的子父类) l 访问路径的配置 2. Http协议(规定) l http协议概述 l 分为两部分 3. Request(掌握) l 请求过程概述 l 请求常用的api l 登录案例(上面讲的api) 一.Servlet1. Servlet的体系结构(子父类继承关系) Ø Servlet接口 它的子类: Ø GenericServlet Ø HttpServlet(推荐使用) 在开中,定义一个类推荐使用 继承HttpServlet的方式(处理请求和响应) 代码如下: public class DemoServlet extends HttpServlet{ publicvoid doGet(HttpServletRequestreq,HttpServletResponse rep){------------} public void doPost(HttpServletRequest req,HttpServletResponse rep){------------} }
二.Http协议l Http协议: 规定浏览器和服务器之间访问的约定。 通俗的来讲,规范了浏览器和服务器传输数据的格式。 基于请求和响应过程实现的。 ==请求过程:从浏览器向服务器发送请求。 这时候携带数据到服务器,这个数据是请求数据 ==响应过程:从服务器到浏览器的响应就是一个响应过程 这时候携带的数据到浏览器,这个数据是响应数据 l 协议分两部分 Ø 请求部分 A. 请求行 比如:GET /login.html?username=rose&password=888 HTTP/1.1 B. 请求头 C. 请求体(用户提交到服务器端的数据)只有post请求有 如图: POST /login.html HTTP/1.1 请求行 下面的请求头: [Java] 纯文本查看 复制代码 Accept: application/x-ms-application,image/jpeg, application/xaml+xml, image/gif, image/pjpeg,application/x-ms-xbap, */*
Referer: http://localhost:8080/login.html
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0;Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 25
Connection: Keep-Alive
Cache-Control: no-cache
Cookie:JSESSIONID=2C804637E9463C3F355ED91424AE1D30
username=abc&password=123 请求体(正文)
Ø 响应部分 三.Request1.请求对象具体的体系结构:javax.xxx.ServletRequest 顶层的接口 | javax.xxx.HttpServletRequest 子接口 | 真正实现的类:apache提供的类:RequestFacade类 2.request请求对象概述和方法==请求过程:从浏览器发送请求 到服务器端。 一次请求一次响应(一次请求对应一个request和一个响应response) ==request对象作用:获取请求过程提交的数据 Ø 请求行的数据(掌握) 获取虚拟目录(项目名称): String p = getContextPath(); Ø 请求头的数据(了解) 获取头的方法: String value = getHeader(“头的名称”); Ø 请求体的数据(掌握) 下面这些方法对get和post请求提交的数据都能获取。 n 一个name对应一个值: Stringv1 = getParameter(“name属性的值”); 比如: [AppleScript] 纯文本查看 复制代码 <input name=”username”> n 一个name对应多个值:String[] v2s = getParameterValues(“name属性的值””); n 比如: [Java] 纯文本查看 复制代码 <input type=”checkbox” name=”hobby”value=”study”>学习[/align]<input type=”checkbox” name=”hobby”value=”game”>游戏
<input type=”checkbox” name=”hobby”value=”sleep”>睡觉 n 没有name获取所有值:Map<String,String[]> map = getParameterMap(); map的key: String 类型,是name属性的值 map的value: String[] 类型,是用户提交的数据 3.请求过程中出现了中文乱码问题:为什么会出现乱码? 原因:两个地方的编码格式不一样引起的。 解决:统一两个地方的编码格式保持一致。 请求过程提交的常用的请求方式:get和post == post请求提交中文,出现乱码解决: //用utf-8 支持中文的编码格式覆盖不支持中文的iso-8859-1编码格式 request.setCharacterEncoding("utf-8");
== get请求提交中文,乱码不乱码看tomcat的版本。 如果tomcat的版本是8.0以下的版本,会出现乱码。 如果tomcat的版本是8.0以上的版本,就不会出现乱码。 4.requet作为域对象的用途 什么域对象?:具有一定范围的对象,称之为域对象。 域对象的作用:在一定范围内存值 和 取值
request作为一个域对象具体的范围多大:一次请求 作用范围只能作用一次请求,通常和转发一块使用(一次请求)。 5.request转发功能: 方法: 1.获取转发器对象 2.实现转发 //简化: getRequestDispatcher(String path).forward(request,resonse); 特点: 1. 地址栏的地址没有发生变化 2. 转发操作只有一个请求。 转发的具体流程分析: file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.jpg
6.ServletContext域对象1. 它的作用范围:作用范围是整个web项目 2. 使用它 l 获取ServletContext对象 [AppleScript] 纯文本查看 复制代码 ServletContext context = this.getServletConext(); l 域对象存值和取值: [AppleScript] 纯文本查看 复制代码 void setAttribute(String key,Object o);
Object getAttribute(String key);
|