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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Black_Y 初级黑马   /  2018-5-21 15:45  /  723 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-5-23 14:45 编辑

Request&Response

`ServletContext中的getResourceAsStream(绝对路径 url)-返回的是一个文件的输入流InputStream方法读取Web工程中的文件

getRealPath(绝对路径 url)方法返回的是磁盘绝对路径

#ServletContext的功能
```
1.读取全局初始化参数
2.获得文件的MIME的类型.
3.作为域对象存取数据(重点)
4.读取web项目下的文件

```
#类加载器(重点掌握)
```

InputStream is = 类.class.getClassLoader().getResourceAsStream("db.properties");


```
#工具类<<通用性,方法重载,>>----编写思想
```
该抽取的抽取,当作一个参数传进来
方法出错了如何处理,是否需要判断...

```
##文件下载的方式
1.超链接下载.直接将文件的路径写到超链接的href中---前提:文件类型,浏览器不支持
2.手动编写代码的方式完成文件的下载(设置两个头和一个流:Content-Type:文件的MIME的类型 Content-Disposition:以下载的方式打开文件 InputStream:文件的输入流)



###处理request接受参数的中文乱码的问题
```
现在无论是get还是post提交中文的时候,都会出现乱码的问题.
post的解决方案:
post的参数在请求体中,直接到达后台的servlet.数据封装到servlet中的request中.request也有一个缓冲区.request的缓冲区也是ISO-8859-1编码.
设置request的缓冲区的编码.

request.setCharacterEncoding("UTF-8");--一定要在接收参数之前设置编码就OK.

get的解决方案:
1.修改tomcat的字符集的编码.(不推荐)

2.使用URLEncoder和URLDecoder进行编码和解码的操作

3.使用String的构造方法:
    String(byte[] bytes,String charsetName)
通过使用指定的charset解码指定的byte数组,构造一个新的String.







```






#处理response乱码

```
使用字节流输入中文:
*有没有乱码?为什么?
**不一定?.
***解决:
****设置中文转成字节数组取出的时候的编码
****设置浏览器默认打开的时候编码

//设置浏览器默认打开的时候采用的字符集编码
response.setHeader("Content-Type","text/html;charset=UTF-8");
//设置中文转成字节数组的时候取出的编码
response.getOutputStrea().write("中文".getBytes("UTF-8"));
```
```
使用字符流输出中文:
*有没有乱码?为什么呢?
**一定会乱码.字符流输出的时候会有缓冲区
***response的字符流的缓冲区的默认的编码是ISO-8859-1 (老外发明的) ,这个编码根本不支持中文.
解决:
*设置response的字符流的缓冲区的编码.
*设置浏览器默认打开的时候采用的字符集编码.

//设置浏览器默认打开的时候采用的字符集编码
response.setHeader("Content-Type","text/html;charset=UTF-8");
//设置response的字符流的缓冲区的编码.
response.setCharacterEncoding("UTF-8");
response.getWriter().println("中文");


response.setContentType("text/html;charset=UTF-8");

```


#request的常用API
```
功能一.获得与客户机相关的信息
getMethod():返回请求方式
获得路径
getRequestURI()
getRequestURL()

获得IP地址
getRemoteAddr()

动态获得工程名
getContextPath()
```
```
功能二.获得页面提交的参数


```
```
功能三.作为域对象存取数据


```
#Request作为域对象存取数据
```
setAttribute(String name,String value);
Object getAttribute(String name);

request域对象的作用范围
一次请求的范围
创建:客户端向服务器端发送了一次请求以后,服务器就会创建一个request的对象
销毁:当服务器端对这次请求做出响应之后request域对象就会被销毁
```

#重定向和转发的区别(redirect和forward的区别)
```
一.重定向的地址栏会发生变化,转发的地址栏不变.
二.重定向两次请求两次响应,转发一次请求一次响应.
三.重定向路径需要加工程名,转发的路径不需要加工程名.
四.重定向可以跳转到任意网站,转发只能在服务器内部进行转发.

```


#乱码问题总结
###request请求时候的乱码
```
将请求的参数呈现在浏览器页面
get请求方式   String(byte[] bytes,String charsetName)通过使用指定的charset解码指定的byte数组,构造一个新的String.
post请求方式   request.setCharacterEncoding("UTF-8");--一定要在接收参数之前设置编码就OK.

```
###response响应时候的乱码
```
字节流输出方式:
    //设置浏览器默认打开的时候采用的字符集编码
    response.setHeader("Content-Type","text/html;charset=UTF-8");
    //设置中文转成字节数组的时候取出的编码
    response.getOutputStrea().write("中文".getBytes("UTF-8"));



字符流输出方式
    //设置浏览器默认打开的时候采用的字符集编码
    response.setHeader("Content-Type","text/html;charset=UTF-8");
    //设置response的字符流的缓冲区的编码.
    response.setContentType("text/html;charset=UTF-8");

```

0 个回复

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