前言
Servlet最重要的作用就是处理客户端请求,并向客户端作出反应。
针对Servlet的每次请求,Web服务器在调用service()之前,都会创建两个对象:
1.HttpServletRequest用于封装HTTP请求消息,简称request对象;
2.HttpServletResponse用于封装HTTP相应消息,简称response对象。
4.1HttpServletRequest对象
HTTP相应消息分为状态行、相应消息头、消息体三部分
4.1.1发送状态码相关的方法
- setStatus(int status)
用于设置HTTP响应消息的状态码 - sendError(int sc)
用于发送表示错误信息的状态码
public void sendError(int code) throws java.io.IOException
public void sendError(int code, String message) throws java.io.IOException
4.1.2发送响应消息头相关的方法
(待补充)
4.1.3发送响应消息体相关的方法
- getOutPutStream()
直接输出字节数组的二进制数据 - getWriter()
直接输出字符文本内容
String data = "zhang";
//获取字节输出流对象
OutPutStream out = response.getOutPutStream();
out.write(data.getBytes());
String data = "zhang";
//获取字节输出流对象
PrintWriter print = response.getWriter();
print.write(data);
这两个效果一样,在浏览器中均会输出zhang
注:不能同时使用,会发生IllegalStateException异常
4.1.4解决中文输出乱码的问题
String data = "中国";
PrintWriter out = response.getWriter();
out.println(data);
此时启动Tomcat,打开地址显示错误
是由于代码编码和浏览器解码时用的码表与我们需要的码表不同导致的
在上面代码第一行前加
response.setCharacterEncoding("utf-8");
就可以使HttpServletResponse编码时使用的码表为utf-8,编码就正确了,但是此时重新运行,依然是乱码,这是由于浏览器解码的原因
继续添加
response.setHeader("Content-Type", "text/html;charset=utf-8");
使浏览器解码时使用的码表为utf-8
再运行,此时就正确输出了!
4.2HttpServletRequest对象
HTTP请求消息分为请求行、请求消息头和请求消息体三部分
4.2.1获取请求行信息的相关方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//设置Servlet输出内容的MIME类型
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//获取请求行的相关消息
//获取HTTP请求消息中的请求方式
out.println("getMethod : " + request.getMethod() + "<br />");
//获取请求行中资源名称部分
out.println("getRequestURI : " + request.getRequestURI() + "<br />");
//获取请求行中的参数部分
out.println("getQueryString : " + request.getQueryString() + "<br />");
//获取请求行中的协议名和版本
out.println("getProtocol : " + request.getProtocol() + "<br />");
//获取请求URL中属于Web应用程序的路径
out.println("getContextPath : " + request.getContextPath() + "<br />");
//获取Servlet的名称获Servlet所映射的路径
out.println("getServletPath : " + request.getServletPath() + "<br />");
//获取请求客户端的IP地址
out.println("getRemoteAddr : " + request.getRemoteAddr() + "<br />");
//获取请求客户端的完整主机名
out.println("getRemoteHost : " + request.getRemoteHost() + "<br />");
//获取请求客户端网络连接的端口号
out.println("getRemotePort : " + request.getRemotePort() + "<br />");
//获取web服务器上接收当前请求网络连接的IP地址
out.println("getLocalAddr : " + request.getLocalAddr() + "<br />");
//获取web服务器上接收当前网络连接IP所对应的主机名
out.println("getLocalName : " + request.getLocalName() + "<br />");
//获取web服务器上接收当前网络连接的端口号
out.println("getLocalPort : " + request.getLocalPort() + "<br />");
//获取当前请求所指向的主机名
out.println("getServerName : " + request.getServerName() + "<br />");
//获取当前请求所连接的服务器端口号
out.println("getServerPort : " + request.getServerPort() + "<br />");
//获取请求协议名
out.println("getScheme : " + request.getScheme() + "<br />");
//获取客户端发出请求时的URl
out.println("getRequestURL : " + request.getRequestURL() + "<br />");
}