HttpServletRequest和HttpServletResponse
HttpServletRequest
这个对象封装了客户端提交过来的一切数据
1.可以获取客户端请求头
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()){
String name = (String)headerNames.nextElement();
String value = request.getHeader(name);
System.out.println(name+"="+value);
}
2.可以获取到客户端提交上来的数据
//获取单个参数
String name = request.getParameter("name");
String address = request.getParameter("adderss");
//获取所有参数,得到一个枚举集合
Map<String,String[]> map = request.getParameterMap();
Set<String> keySet = map.keySet();
Iterator<String> iterator = keySet.iterator();
while(iterator.hasNext()){
String key = (String)iterator.next();
String value = map.get(key)[0];
System.out.println(key+"=="+value);
}
HttpServletRequest获取数据时如何避免中文乱码
- 如果是Get方式
get请求过来的数据,在url地址栏上就已经经过编码了,所以我们取到的是乱码,tomcat收到了这批数据,getParameter默认使用ISO-8859-1去解码
1.我们可以先让文字回到ISO-8859-1对应的字节数组,然后再按utf-8组拼字符串
username = new String(username.getBytes("ISO-8859-1"),"UTF-8");
2.可以在tomcat里面做设置处理,conf/server.xml加上URIEncoding=“utf-8”
<Connector connectionTimeout="2000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8">
- 如果是Post方式
将以下代码设置在getParameter之前
request.setCharacterEncoding("UTF-8");
这个是设置请求体里面的文字编码,用在get方法是不行的,只能用在post方法中
HttpServletResponse
1.以字符流的方式写数据
resoponse.getWriter().write("hello response");
2.以字节流的方式写数据
resoponse.getOutputStream().write("hello response");
- 如果单纯是写文字输出,那么用哪种都是差不多的,但是如果要写文件,则只能用字节流的方式
3.设置一个头
response.setHeader(name,value);
4.设置当前这个请求的处理状态码
response.setStatus("");
5.设置相应的内容类型
response.setContentType(type);
HttpServletResponse相应数据如何避免中文乱码
//指定输出到客户端的时候,这些文字使用UTF-8编码
response.setCharacterEncoding("UTF-8");
//直接规定浏览器看这份数据的时候,使用什么编码类型
response.setHeader("Content-Type","text/htm; charset=UTF-8");
resoponse.getWriter().write("你好");
默认情况下getOutputStream()使用的是UTF-8编码
//默认情况下getOutputStream()使用的是UTF-8编码
response.setHeader("Content-Type","text/htm; charset=UTF-8");
response.getOutputStream().write("你好".getBytes());
如果要更改编码
//如果要更改编码
response.getOutputStream().write("你好".getBytes("GBK"));
//设置相应的数据类型为html文本,并且告知浏览器使用的是UTF-8编码
response.setContentType("text/htm; charset=UTF-8");