HttpServletResquest
HttpServletResquest包含了客户端传到服务器端的一切数据。
- 获取对象客户端请求头信息
Enumeration<String> headersNames = request.getHeadernames();
while(headersNames.hasMoreElements()){
String name = (String)headersNames.nextElements();
String value =request.getHeader(name);
System.out.println(name+"="+value);
}
- 获取客户端提交过来的数据
String name = request.getParameter("name");
String address = request.getParameter("address");
System.out.println("name="+name);
System.out.println("address="+address);
----------------------------------------------------------------------------
//name=zhangsan&name-lisi&name=wangwu一个key可以对应多个值
Map<String,String[]> map = request.getParameterMap();
Set<String> keyset = map.keySet();
Iterator<string> iterator = keyset.iterator();
while(iterator.hasNext()){
String key = (String)iterator.next();
System.out.println(“key=”+key+”---的值总数有;”+map.get(key).length);
String value = map.get(key)[0];
String value1 = map.get(key)[1];
String value2 = map.get(key)[2];
System.out.println(key+”====”+value+”=”+value1+”=”+value2);
}
- 获取中文数据
客户端提交数据给服务器端,如果数据中有中文,有可能出现乱码情况,那么可以参考以下方法解决。
1.如果是Get方式
String username = request.getParameter("username");
String password = request.getParameter("password");
/**
Get请求过来的数据,在url地址栏上就已经经过编码了,所以取到的就是乱码。Tomcat收到了这批数据,getParameter默认使用ISO-8859-1去解码。
*/
//先让文字回到ISO-8859-1对应的字节数组,然后再按照utf-8拼成字符串。
username = new String(username.getBytes("ISO-8859-1"), "utf-8");
System.out.println("username="+username+"password="+password);
当然也可以直接在tomcat里面做配置,以后get请求过来的数据永远都是utf-8编码。conf/server.xml加上URLEncoding=“utf-8”。
<Connector connectionTimeout=”2000” port=”8080” protocol=”HTTP/1.1” redirectPort=”8443” URIEncoding=”utf-8”/>
2.如果是Post方式
这个说的是设置请求体里面的文字编码。Get方式,用这行没有用。
request.setCharacterEncoding("UTF-8");//这一行一定要卸载request.getParameter()之前
HttpServletRespone
HttpServletRespone负责返回数据给客户端。
1.输出数据到页面上
response.getWriter().write("<h2>hello response...</h2>");
或response.getOutputStream().write("hello response222......".getBytes());
或response.setContentType(type);
2.响应的数据中有中文,那么有可能出现中文乱码
(1)以字符流输出
response.setCharacterEncoding("utf-8");//指定输出到客户端的时候,这些文字使用utf-8编码
response.setHeader("Content-Type", "text/html;charset=utf-8");//直接规定浏览器看这份数据的时候使用什么编码来看
response.getWriter().write(“你好!”);//默认使用ISO-8859-1,我们可以指定写出去的时候使用什么编码写
(2)以字节流输出
如果想让从服务器出去的中文在客户端能够正常显示。只要确保这一点,即出去的时候用的编码和客户端看这份数据用的编码是一样的。
response.setHeader("Content-Type", "text/html;charset=utf-8");
或response.getOutputStream().write("你好!".getBytes());//默认情况下,getOutputStream输出使用的是utf-8编码,当然也可以直接指定utf-8编码
但总的来书,不管是字节流还是字符流都可以使用。response.setContentType("text/html;charset=utf-8");