RequestResponse
Request(请求)Response(回应)·Request获取请求数据·Response:设置响应数据RequestRequest继承体系ServletRequest ----Java提供的请求对象根接口HttpServletRequest----Java提供的对Http协议封装的请求对象接口RequestFacade ----Tomcat定义实现类1.Tomcat需要解析请求数据冯张伟request对象并且创建request对象传到service方法中2.使用request对象查阅JavaEE API文档的HttpServletRequest接口Request获取请求数据获取请求数据请求数据分为3部分1.请求行GET/request-demo/reql?usernamezhangsan HTTP/1.1·String getMethod():获取请求方式GET·String getContextPath():获取虚拟目录(项目访问路径)/request-demo·StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/request-demo/req1·String getRequestURI():获取URI(统一资源标识符):/request-dem/req1·String getQueryString():获取请求参数(GET方式):usernamezhangsanpassword1232.请求头User-Agent:Mozilla/5.0 Chrome/91.0.4472.106·String gatHeader(String name):根据请求头名称获取值3.请求体usernamesuperbabypassword123·ServletputStream getputStream():获取字节输入流·BufferedReader getReader():获取字符输入流通用方式获取请求参数·请求参数获取方式*Get方式String getQueryString()*POST方式BufferedReader getReader()·Request通用方式获取请求参数*MapString,String[]getParameterMap():获取所有参数Map集合*String[]getParameterValues(String name):根据名称获取参数值(数组)*StringgetParameter(String name):根据名称获取参数值单个值使用Servlet模板创建Servlet更高效请求参数中文乱码处理Reauest请求参数中文乱码处理·请求参数如果存在中文数据则会乱码·解决方案*POST设置输入流的编码req.setCharacterEncoding(UTF-8);*通用方式(GET/POST):先解码再编码:new String(username.getBytes(ISO-8859-1),UTF-8);·URL编码*编码URLEncoder.encode(str,utf-8);*解码URLDecoder.decode(s,ISO-8859-1);1.将字符串按照编码的方式转为二进制2.每个字节转为2个16进制并在前面加上%Request请求转发·请求转发(forward)一种在服务器内部的资源跳转方式·实现方式req.getRequestDispatcher(资源B路径).forward(req,resp)·请求转发资源间共享数据使用Request对象·void setAttribute(String name,Object o):存储数据到request域中·Object getAttribute(String name):根据key,获取值·void removeAttribute(String name):根据key删除该键值对·请求转发特点浏览器地址栏路径不发生变化只能转发到当前服务器的内部资源一次请求可以在转发的资源间使用request共享数据ResponseResponse 设置响应数据功能介绍·响应数据分为3部分1.相应行HTTP/1.1 200 OK*void setStatus(int sc):设置响应状态码2.响应头Content-Type:text/html*void setHeader(String name,String value):设置响应头键值对3.响应体htmlheadheadbody/body/html*PrintWriter getWriter():获取字符输出流*ServietOutStream gatOutputStream():获取字节输出流Response 完成重定向·重定向Redirect)一种资源跳转方式·实现方式resp.setStatus(302);resp.setHeader(location,资源B的路径”·重定向特点浏览器地址栏路径发生变化可以重定向到仁义位置的资源服务器内部、外部均可两次请求不能在多个资源使用request共享数据·请求转发(forward)一种在服务器内部的资源跳转方式·请求转发特点浏览器地址栏路径不发生变化只能转发到当前服务器的内部资源一次请求可以在转发的资源间使用request共享数据Response响应字符数据·使用1.通过Response对象获取字符输出流PrintWriter writer resp.getWriter();2.写数据writer.write(aaa);·注意该流不需要关闭随着响应结束response对象销毁由服务器关闭中文数据乱码原因通过Response获取的字符输出流默认编码ISO-8859-1resp.setContentType(text/html;charsetutf-8);Response响应字节数据·使用1.通过Response对象获取字符输出流ServletOutputStream outputStream resp.getOutputStream();2.写数据outputStream.write(字节数据);·IOUtils工具类使用1.导入坐标dependency groupldcommons-io/groupld artifactldcommons-io/artifactld version2.6/version /denpendency2.使用ioutils.copy(输入流输出流)