Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。
==================request
获得客户机信息:
getRequestURL方法返回客户端发出请求时的完整URL。
getRequestURI方法返回请求行中的资源名部分。
getQueryString 方法返回请求行中的参数部分。
getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。
getRemoteAddr方法返回发出请求的客户机的IP地址。
getRemoteHost方法返回发出请求的客户机的完整主机名。
getRemotePort方法返回客户机所使用的网络端口号。
getLocalAddr方法返回WEB服务器的IP地址。
getLocalName方法返回WEB服务器的主机名。
获得客户机请求头:
getHeader(string name)方法:String
getHeaders(String name)方法:Enumeration
getHeaderNames()方法
获得客户机请求参数(客户端提交的数据):
getParameter(String)方法(常用)
getParameterValues(String name)方法(常用)
getParameterNames()方法(不常用)
getParameterMap()方法(编写框架时常用)
request接收表单提交中文参数乱码问题:
以POST方式提交表单中文参数的乱码问题:
request.setCharacterEncoding("UTF-8");
String userName = request.getParameter("userName");
以GET方式提交表单中文参数的乱码问题:
String name = request.getParameter("name");
name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;
Request对象实现请求转发:
request.getRequestDispatcher("/test.jsp").forward(request, response);
request对象作为一个域对象(Map容器)使用时,主要是通过以下的四个方法来操作:
setAttribute(String name,Object o)方法,将数据作为request对象的一个属性存放到request对象中,例如:request.setAttribute("data", data);
getAttribute(String name)方法,获取request对象的name属性的属性值,例如:request.getAttribute("data")
removeAttribute(String name)方法,移除request对象的name属性,例如:request.removeAttribute("data")
getAttributeNames方法,获取request对象的所有属性名,返回的是一个,例如:Enumeration<String> attrNames = request.getAttributeNames();
====================response
使用OutputStream流向客户端浏览器输出中文数据:
String data = "中国";
OutputStream outputStream = response.getOutputStream();//获取OutputStream输出流
response.setHeader("content-type", "text/html;charset=UTF-8");//通过设置响应头控制浏览器以UTF-8的编码显示数据
byte[] dataByteArr = data.getBytes("UTF-8");//将字符转换成字节数组,指定以UTF-8编码进行转换
outputStream.write(dataByteArr);//使用OutputStream流向客户端输出字节数组
使用PrintWriter流向客户端浏览器输出中文数据:
String data = "中国";
response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器
PrintWriter out = response.getWriter();//获取PrintWriter输出流
response.setHeader("content-type", "text/html;charset=UTF-8");
//多学一招:使用HTML语言里面的<meta>标签来控制浏览器行为,模拟通过设置响应头控制浏览器行为,两者取其一
response.getWriter().write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'/>");
out.write(data);//使用PrintWriter流向客户端输出字符
当需要向浏览器输出字符数据时,使用PrintWriter比较方便,省去了将字符转换成字节数组那一步。