A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 小石姐姐 于 2018-11-2 10:05 编辑

day14-ServletRequest
今日内容:
1.      Servlet
l  Servlet体系结构(它的子父类)
l  访问路径的配置
2.      Http协议(规定)
l  http协议概述
l  分为两部分
3.       Request(掌握)
l  请求过程概述
l  请求常用的api
l  登录案例(上面讲的api
一.Servlet
1.      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();
                                                                           mapkey: String 类型,是name属性的值
                                                                           mapvalue: String[] 类型,是用户提交的数据
3.请求过程中出现了中文乱码问题:
为什么会出现乱码?
原因:两个地方的编码格式不一样引起的。
解决:统一两个地方的编码格式保持一致。
请求过程提交的常用的请求方式:get和post
== post请求提交中文,出现乱码解决:
//utf-8 支持中文的编码格式覆盖不支持中文的iso-8859-1编码格式
request.setCharacterEncoding("utf-8");

== get请求提交中文,乱码不乱码看tomcat的版本。
    如果tomcat的版本是8.0以下的版本,会出现乱码。
如果tomcat的版本是8.0以上的版本,就不会出现乱码。
4.requet作为域对象的用途
  什么域对象?:具有一定范围的对象,称之为域对象。
  域对象的作用:在一定范围内存值 和 取值
voidsetAttribute(String name, Object o)

Object getAttribute(String name)
     request作为一个域对象具体的范围多大:一次请求
            作用范围只能作用一次请求,通常和转发一块使用(一次请求)。
5.request转发功能:
      方法:
           1.获取转发器对象
           RequestDispatcher  rs= getRequestDispatcher(String path)
2.实现转发
voidforward(ServletRequest request, ServletResponse response)
//简化:
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);

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马