1.HttpServletRequest接口
HttpServletRequest接口继承了ServletRequest接口,是专用于HTTP协议的子接口,用于封装HTTP请求信息;
在HttpServlet类的service()方法中,传入的ServletRequest对象被强制转换为HttpServletRequest对象来进行HTTP请求信息的处理。
HttpServletRequest接口提供了具有如下功能类型的方法:
获取请求报文信息(包括请求行、请求头、请求正文)的方法;
获取网络连接信息的方法;
存取请求域属性的方法。
请求行方法:
getMethod(),获取请求使用的HTTP方法,例如,GET、POST、PUT
getRequestURI(),获取请求行中的资源名部分
getProtocol(),获取使用的协议及版本号。例如,HTTP/1.1、HTTP/1.0
getQueryString(),获取请求URL后面的查询字符串,只对GET有效
getServletPath(),获取Servlet所映射的路径
getContextPath(),获取请求资源所属于的Web应用的路径
请求头方法
getHeader(String name),获取一个请求头域的值。如果这个请求头域不存在,这个方法返回-1;
getHeaderNames(),获取一个String对象的Enumeration列表,该列表反映请求的所有头域名;
getHeaders(String name),获取所有参数名为name的http头部值;
getIntHeader(String name),获取整数类型参数名为name的http头部;
getDateHeader(String name),获取long类型name的http头部;
getContentLength(),获取请求内容的长度,以字节为单位;
getContentType(),获取请求的文档类型定义;
//请求信息
// System.out.println(request.getMethod()+"请求方式");
// System.out.println(request.getRequestURI()+"请求资源");
// System.out.println(request.getServletPath()+"映射路径");
// System.out.println(request.getContextPath()+"应用名");
// System.out.println(request.getQueryString()+"地址栏的请求参数的字符串");
//请求头信息
System.out.println(request.getHeader("Host")+"我的主机地址");//localhost:8080 server端的IP:port
System.out.println(request.getRemoteHost()+"远程客户主机地址");//0.0.0.0.0.0.0.0 client端的ip
System.out.println(request.getRemotePort()+"远程客户的端口号");
System.out.println(request.getRemoteAddr()+"远程客户地址");//getRemoteHost()是一样的
//获取所有请求头信息
Enumeration<String> em=request.getHeaderNames();
while(em.hasMoreElements()){
String name=em.nextElement();
System.out.println(name+"***"+request.getHeader(name));
}
2.中文乱码问题
//解决post请求乱码问题
request.setCharacterEncoding("utf8");
//解决get请求的乱码问题 浏览器按iso-8859-1编码,服务端也必须先用iso-8859-1解码,转成utf8
String name=request.getParameter("username");
String name_ok=new String(name.getBytes("iso-8859-1"),"utf8");
3.request请求属性操作
HttpServletRequest接口提供了如下与请求域属性相关的方法:
void setAtrribute(String name,Object value),设定name属性的值为value,保存在request范围内;
Object getAttribute(String name),从request范围内获取name属性的值;
void removeAttribute(String name),从request范围内移除name属性的值;
Enumeration getAttributeNames(),获取所有request范围的属性
//RequestTest设置请求属性
request.setAttribute("user", "张三");
request.setAttribute("email", "张三@qq.com");
request.getRequestDispatcher("TestServlet").forward(request, response);
//TestServlet获取请求属性
String name=(String)request.getAttribute("user");
String mail=(String)request.getAttribute("email");
System.out.println("请求属性"+name+","+mail);
//TestServlet获取所有请求属性和值
Enumeration<String> em=request.getAttributeNames();
while(em.hasMoreElements()){
String key=em.nextElement();//属性名
String val=(String)request.getAttribute(key);//通过属性名值
System.out.println("请求属性:"+key+","+val);
}
4.响应response对象
HttpServletResponse接口继承自ServletResponse接口,是专用于HTTP协议的子接口,用于封装HTTP响应消息。
在HttpServlet类的service()方法中,传入的ServletResponse对象被强制转换为HttpServletResponse对象来进行HTTP响应信息的处理。
HttpServletResponse接口提供了具有如下功能类型的方法:
设置响应状态的方法;
构建响应头的方法;
创建响应正文的方法。
1)常见的响应状态码:
200表示请求成功;
302表示资源(网页等)暂时转移到其它URL;
404表示请求的资源(网页等)不存在;
500表示服务器内部错误。
2)响应头设置
setHeader(String headerName,String headerValue)
setContentType(String mime),设定Content-Type消息头;
setContentLength(int length),设定Content-Length消息头;
addHeader(String name,String value),新增String类型的值到名为name的http头部;
addIntHeader(String name,int value),新增int类型的值到名为name的http头部;
addDateHeader(String name,long date),新增long类型的值到名为name的http头部;
【重要】addCookie(Cookie c),为Set-Cookie消息头增加一个值;
//设置响应头
response.setHeader("xxxx", "yyyyy");
3)响应正文
HttpServletResponse接口提供了两个获取不同类型输出流对象的方法:
getOutputStream(),返回字节输出流对象ServletOutputStream;
ServletOutputStream对象主要用于输出二进制字节数据。例如,配合setContentType()方法响应输出一个图像、视频等。
getWriter(),返回字符输出流对象PrintWriter;
PrintWriter对象主要用于输出字符文本内容,但其内部实现仍是将字符串转换成某种字符集编码的字节数组后再进行输出。
//设置响应正文
//响应中文乱码解决
response.setCharacterEncoding("utf8");
response.setContentType("text/html;charset=UTF-8");
//text/html MIME类型
PrintWriter out=response.getWriter();
out.write("响应输出的内容----write---");
out.println("响应输出内容----print----");
out.println("<a href='http://www.baidu.com'>百度一下吧</a>");
out.print("<html>");
out.print("<table border='1'>");
out.print("<tr><td>");
out.print(new Date());
out.print("</td></tr>");
out.print("</html>