1. 请求和响应的概述:
请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程。
响应:服务器根据浏览器发生的请求,返回数据到浏览器在网页上进行显示,这个过程称之为响应。
2.HttpServletResponse对象
HttpServletResponse是一个接口,它的父接口是ServletResponse,在开发中通常使用HttpServletResponse
响应信息分为三部分:响应行,响应头,响应正文(响应体)
发生状态码的相关方法:
setStatus(int sc ):参数就是状态码。
常见的状态码:200 响应成功,302 重定向, 404 请求资源找不到,500 服务器代码出现异常。
错误信息方法:
setError(iint sc ):参数状态码
setStatus(int sc , String sm):第一个参数表示状态码,第二个参数是状态码的描述。
3.发送响应消息头的相关的方法:
响应消息头的数据格式 key-value的形式,有的是一个key,一个value,有的是一个key,多个value。
设置响应消息头:
一个key,一个value:setHeader(String key , String value );
一个key,多个value:addHeader(String key , String value );
设置相应数据的长度:setContentLength(int src )方法
设置处理乱码的方法:
setCharacterEncoding(String a );参数就是一个码表格式,比如:utf-8
setContentType(String a ):参数代表响应数据的类型和码表格式,比如:"text/html;charset=utf-8".
4.发送响应体相关的方法:
①方法一:getOutputStream(),通过response想浏览器返回图片、视频等二进制数据的文件,当然也可以向浏览器返回文本数据。
②方法二:getWriter(),通常response向浏览器返回文本数据,不能像浏览器返回图片,视频等二进制文件。
5.实现重定向
第一种方式:302和Location配合使用,实现重定向。
response.setStatus(302);
response.setHeader("Location","/包名/项目名称");
第二种方式:sendRedirect("/包名/项目名称");
6.HttpServletRequest请求对象
HttpServletRequest它是一个接口,它的父接口ServletRequest,在开发中常用的是带协议的请求对象。
请求消息:请求行,请求头,请求参数
请求行
@WebServlet(name = "RequestLineServlet4and10", urlPatterns = "/ch03/RequestLineServlet4and10") public class RequestLineServlet4and10 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter pw = response.getWriter(); pw.println("getMethod : "+request.getMethod()+"
");//用于获取HTTP请求消息中的请求方式,GET,POST等 pw.println("getRequestURI : "+request.getRequestURI()+"
");//用于获取请求行中资源名称部分, pw.println("getQueryString : "+request.getQueryString()+"
");//用于获取请求行中的参数部分, pw.println("getProtocol : "+request.getProtocol()+"
");//用于获取请求行中的协议 pw.println("getContextPath : "+request.getContextPath()+"
");//用于获取请求URL中属于web应用程序的路径 pw.println("getPathInfo : "+request.getPathInfo()+"
");// pw.println("getPathTranslated : "+request.getPathTranslated()+"
");// pw.println("getServletPath : "+request.getServletPath()+"
");//用于获取servlet路径 pw.println("getRemoteAddr : "+request.getRemoteAddr()+"
");//用于获取web服务器上接收当前请求网络连接的IP地址 pw.println("getRemoteHost : "+request.getRemoteHost()+"
");//用于获取请求客户端的完整主机名 pw.println("getRemotePort : "+request.getRemotePort()+"
");//用于获取请求客户端网络连接的端口号 pw.println("etServerName : "+request.getServerName()+"
");//用于获取请求所指向的主机名 pw.println("getServerPort : "+request.getServerPort()+"
");//用于获取请求所连接的服务器端口号 pw.println("getScheme : "+request.getScheme()+"
");//用于获取请求的协议名 pw.println("getRequestURL : "+request.getRequestURL()+"
");//用于获取客户端发出请求时的完整URL } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
7.获取请求消息头的相关方法:
①根据消息头,获取值: String value = getHeader(消息头的名称);
②获取所有的消息头:Enumeration er = getHeaderNames( );
8. 获取请求参数相关的方法:
①根据name属性值,获取用户输入的值:String value = getParameter(属性对应的值);
②根据name属性值,获取用户选择的值:String[ ] values = getParameterValues(name属性对应的值);
③没有参数,获取所有值:Map
9.通过Request对象传递数据
request域对象:在一次请求中,可以存值和取值
存值:setAttribute(String key,Object obj);
取值:Object obj = getAttribute(String key);
移除:removeAttribute(String key);
10.RequestDispatcher接口
(1)在开发中访问到一个web资源后,需要服务器跳转到另一个资源去处理请求,可以通过sendRedirect重定向方法来实现,也可以RequestDispatcher转发对象的forward方法来实现。
前提是得到转发对象:
RequestDispatcher forwardObj = request.getRequestDispatcher("另一个资源的路径");
常用方法:
①实现请求转发:forwardObj.forward(request,response);
②实现请求包含:forwardObj.include(request,response);
过程分析:
转发:发送了一次请求,响应一次。
重定向:发送了两次请求,响应两次。
(2)请求转发:
特点:发送了一次请求 ,响应一次,和request域对象配合使用,可以实现值的传递。
转发路径:转发动作是在服务器内部完成的,所以转发路径不要携带项目名称。
请求重定向:
特点:发送了两次请求,响应了两次,不能和request域对象配合使用。
重定向路径:重定向动作在浏览器端执行的,所以路径需要携带项目名称。
(3)请求包含:在服务器内部完成的,路径不需要携带项目名称。
11.处理乱码问题:
在处理字符流和字节流输出中文乱码时,都采用
response.setContentType("text/html;charset=utf-8");