黑马程序员技术交流社区
标题: 【石家庄校区】Servlet和Request [打印本页]
作者: 卞建彬 时间: 2018-11-1 21:31
标题: 【石家庄校区】Servlet和Request
本帖最后由 小石姐姐 于 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”>学习
<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);
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |