您的位置:首页 > 理论基础 > 计算机网络

Servlet-处理HTTP请求与响应

2016-12-11 11:44 381 查看

HttpServletRequest

HttpServletRequest 对象代表客户端的请求,客户端的所有消息都封装在这个对象中,通过这个方法可以获取请求数据

作用:

读取和写入HTTP请求数据

取得和设置Cookies

取得路径信息

标识HTTP信息

实现请求转发

HttpServletResponse

HttpServletRequest 对象代表服务端提供给客户端的响应,封装了HTTP响应数据

作用:

- 设置对客户端的输出内容

- 设置响应的状态码

- 设置浏览器的解码方式

- 设置Cookies

- 实现重定向

处理请求参数

例如:key-value、key-values

public ModelAndView getIps(HttpServletRequest request) {
String currPageStr = request.getParameter("page");
String values[]    = request.getParameterValues("name");
}


请求方式

请求方式作用
GET请求指定资源
POST向指定的资源提交需要处理的数据
HEAD要求相应于相应的get一样,只是没有响应体
PUT上传指定资源
DELETE删除指定资源
请求方式是用户请求的意向,利于服务器做出不同的响应,因为不同请求方式:

数据传输可能不同

表单提交、服务端处理可能不同

浏览器会用不同处理缓存方式等

GET 与 POST

GET:

- 直接将请求资源放在资源路径的后面,只能提交少量数据

- 请求参数显示在浏览器地址栏上,不安全

POST:

- 提交需要处理的数据,可以导致新资源的产生和已有资源的更新

- 请求参数添加在实体内容中,可提交大量数据

- 不会将请求参数显示在浏览器地址栏,相对安全

处理中文参数

须统一设置为UTF-8,编码和解码不一致会产生乱码

请求方式为POST

step1 页面指定字符集

JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


html页面:

<meta charset="UTF-8">


step2 服务器端编码

try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}


请求方式为GET

step1 页面与post方式相同

step2 服务端

//iso-8859-1 转为 utf-8
String currPageStr = request.getParameter("page");
try {
currPageStr = new String(currPageStr.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}


处理返回中文

服务端:

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


通知容器,使用指定字符集

生成消息头中content-type的值,通知浏览器返回的数据类型和字符集

Springmvc 编码过滤器

web.xml中可能需要编码过滤器

<!-- 编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


其bean实现:

CharacterEncodingFilter.doFilterInternal(HttpServletRequest request...){
//核心,为每次请求都设置所配置的字符集
request.setCharacterEncoding(this.encoding);

}


其他编码问题

数据库连接池,我这里是mysql: useUnicode=true&characterEncoding=utf-8

data_source_url=jdbc:mysql://localhost:3306/just_test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&allowMultiQueries=true


数据库编码查看

mysql> show variables like 'character_set_%';
+--------------------------+--------------------------------------+
| Variable_name            | Value                                |
+--------------------------+--------------------------------------+
| character_set_client     | utf8                                 |
| character_set_connection | utf8                                 |
| character_set_database   | utf8                                 |
| character_set_filesystem | binary                               |
| character_set_results    | utf8                                 |
| character_set_server     | utf8                                 |
| character_set_system     | utf8                                 |
| character_sets_dir       | D:\baseRuntime\mysql\share\charsets\ |
+--------------------------+--------------------------------------+
8 rows in set (0.00 sec)


设置,如

mysql> SET character_set_client='utf-8';
mysql> SET character_set_connection='utf-8'
mysql> SET character_set_results='utf-8'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  request Servlet response