WEB&&request&&response2022-07-11

 #博学谷IT学习技术支持#

个人笔记后续会进行内容改进

request:获取请求数据

## 1、获取请求行的方法:

//            * 获取请求方式: `GET`

//                    String getMethod()


//            * 获取虚拟目录(项目访问路径): `/request-demo`

//                    String getContextPath()


//            * 获取URL(统一资源定位符): `http://localhost:8080/request-demo/req1`

//                    StringBuffer getRequestURL()


//            * 获取URI(统一资源标识符): `/request-demo/req1`

//                    String getRequestURI()


//            * 获取请求参数(GET方式): `username=zhangsan&password=123`

//                    String getQueryString()

String method = req.getMethod();

    System.out.println(method);

    System.out.println("===============");

    String path = req.getContextPath();

    System.out.println(path);

    System.out.println("===============");

    StringBuffer url = req.getRequestURL();

    System.out.println(url);

    System.out.println("===============");

    String requestURI = req.getRequestURI();

    System.out.println(requestURI);

    System.out.println("===============");

    String string = req.getQueryString();

    System.out.println(string);

## 2、获取请求头:

String getHeader(String name)

## 3、获取请求体:

对于请求体中的数据,Request对象提供了如下两种方式来获取其中的数据,分别是:

* 获取字节输入流,如果前端发送的是字节数据,比如传递的是文件数据,则使用该方法

* xServletInputStream getInputStream()该方法可以获取字节

* 获取字符输入流,如果前端发送的是纯文本数据,则使用该方法

* BufferedReader getReader()

接下来,大家需要思考,要想获取到请求体的内容该如何实现?

## 遍历的快捷方式iter!!!!!!

## 4、request通用方法:

request对象为我们提供了如下方法:

* 获取所有参数Map集合

* Map<String,String[]> getParameterMap()

* 根据名称获取参数值(数组)

* String[] getParameterValues(String name)

* 根据名称获取参数值(单个值)

* String getParameter(String name)

Map<String, String[]> map = req.getParameterMap();

        for (String k : map.keySet()) {

            System.out.print(k+":");

String[] vs = map.get(k);

    for (String v : vs) {

        System.out.print(v);

    }

    System.out.println();

}

System.out.println("===========");

String[] hobies = req.getParameterValues("hoby");

for (String hoby : hobies) {

    System.out.println(hoby);

}

System.out.println("===========");

System.out.println(req.getParameter("name"));

System.out.println(req.getParameter("pass"));

上面说的是哪个放在在request和response中通用,不过为了避免代码重复

可以在response中用一行代码解决上述问题

this.doGET() 在response中引用request的方法

this.doGet(req,resp);

## 5、解决中文乱码问题的代码(TOMCAT8之后就把get的解码设为utf-8)

* GET请求获取请求参数的方式是`request.getQueryString()`

* POST请求获取请求参数的方式是`request.getReader()`

### 5.1、解决post乱码:

* 分析出现中文乱码的原因:

  * POST的请求参数是通过request的getReader()来获取流中的数据

  * TOMCAT在获取流的时候采用的编码是ISO-8859-1

  * ISO-8859-1编码是不支持中文的,所以会出现乱码

* 解决方案:

  * 页面设置的编码格式为UTF-8

  * 把TOMCAT在获取流数据之前的编码设置为UTF-8

  * 通过request.setCharacterEncoding("UTF-8")设置编码,UTF-8也可以写成小写

**request.setCharacterEncoding("utf-8")是设置request处理流的编码**

### 5.2解决get乱码/post乱码通用方法:

分析出现中文乱码的原因:

(1)浏览器通过HTTP协议发送请求和数据给后台服务器(Tomcat)

(2)浏览器在发送HTTP的过程中会对中文数据进行URL==编码==

(3)在进行URL编码的时候会采用页面`<meta>`标签指定的UTF-8的方式进行编码,`张三`编码后的结果为`%E5%BC%A0%E4%B8%89`

(4)后台服务器(Tomcat)接收到`%E5%BC%A0%E4%B8%89`后会默认按照`ISO-8859-1`进行URL==解码==

(5)由于前后编码与解码采用的格式不一样,就会导致后台获取到的数据为乱码。

解决方案:

name =new String(name.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF-8)

byte[] byte=    name.getBytes(StandardCharsets.ISO-8859-1)

name= new String(byte,StandardCharsets.UTF-8)

 6、request转发:forward

#### 6.1、格式:

request.getrequestdispatcher("/demo6").forward(request,response)

dispatcher 调度转发

dispatcher

#### 6.2、内置三个方法:

setattribute

getattribute

removeattribute

* 存储数据到request域[范围,数据是存储在request对象]中

* void setAttribute(String name,Object o);

* 根据key获取值

* Object getAttribute(String name);

* 根据key删除该键值对

* void removeAttribute(String name);

#### 6.3、特点:

4. 请求转发的特点

* 浏览器地址栏路径不发生变化

  虽然后台从`/req5`转发到`/req6`,但是浏览器的地址一直是`/req5`,未发生变化

  ![1628857365153](F:\java\java SE\线路\八周\Request&Response\讲义\assets\1628857365153.png)

* 只能转发到当前服务器的内部资源

  不能从一个服务器通过转发访问另一台服务器

* 一次请求,可以在转发资源间使用request共享数据

  虽然后台从`/req5`转发到`/req6`,但是这个==只有一次请求==

# response:设置响应数据

### yi \重定向格式:两种方法:

1、

response.setstatus(302)

response.heard("location","/linyi/responsedemo2")

2、简化版:

response.sendRedirect("/linyi/responsedemo2")

send redirect重定向

**重定向需要添加虚拟路径**

**转发不需要:**

**其实判断的依据很简单,只需要记住下面的规则即可:**

* **浏览器使用:需要加虚拟目录(项目访问路径)**

* **服务端使用:不需要加虚拟目录**

![image-20220709191205139](C:\Users\as\AppData\Roaming\Typora\typora-user-images\image-20220709191205139.png)

#### 1、response响应字符流

writer=  response.getwriter()

writer.writer("aaaaaaaaa")

#### else:解决response 输出字符流乱码

response.setcontentype("text/html;charset=utf-8")  这行代码是解决字符流乱码

#### 2、response响应字节流

编写一个读取字符流

1)可以编写字节流copyd代码,也可以在pom.xml中添加以来坐标,建议添加

在已有的<dependencies>标签中加入新的<dependency>

<dependency>

  <groupId>commons-io</groupId>

  <artifactId>commons-io</artifactId>

  <version>2.6</version>

</dependency>

2)使用以来中的ioutile。copy方法

IOUtils.copy(inputStream,outputStream);

最后把读取字符流关闭即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357

推荐阅读更多精彩内容