03 HttpServletRequest_HttpServletResponse
HttpServletRequest:一次来自客户端的请求的相关信息
请求行
request.getMethod() 获取http请求方式
request.getRequestURI() 获取统一资源标识符
request.getRequestURL() 获取统一资源定位符
request.getQueryString() 获取查询字符串
request.getProcotol() 获取协议版本
request.getScheme() 获取协议名
请求头
request.getHeader() 获取请求头信息
request.getHeaderNames() 获取所有请求头的名字
实体内容
request.getParameter() 获取请求实体中的参数、或URL后的请求参数
request.getInputStream() 获取请求参数,当表单提交的enctype="multipart/form-data"
网络相关信息
request.getRemoteAddr() 获取客户端的IP地址
request.getRemotePort() 获取客户端的端口号
request.getLocalAddr() 获取服务器端的IP地址
request.getLocalPort() 获取服务器端的端口号
HttpServletResponse:一次发送给客户端的响应的相关信息
状态行
应答头
response.setHeader() 设置应答头
response.setContentType("text/html; charset=utf-8") 设置响应内容及字符集
响应实体
response.getWriter() 获取打印流,输出字符数据
response.getOutputStream() 获取字节输出流,输出二进制数据
一、客户端请求服务器的数据有乱码
1.get方式请求
①修改tomcat/conf/server.xml,在<Connector> 标签中添加属性useBodyEncodingForURI="true"
②在获取请求数据之前,设置 request.setCharacterEncoding("utf-8");
2.post方式请求
在获取请求数据之前,设置 request.setCharacterEncoding("utf-8");
二、服务器返回给客户端的数据有乱码
response.setContentType("text/html; charset=utf-8");
请求转发
request.getRequestDispathcer("path").forward(reqeust,response);
请求转发的特点:
1.地址栏没有发生变化
2.用户只发起了一次请求
3.请求转发只能转发本服务器以内的资源
4.由于请求是同一个对象,所以可以利用该request做servlet之间数据的传输
重定向
response.sendRedirect("path")
重定向的特点:
1.地址栏会发生改变
2.用户发起了两次请求
3.重定向可以访问服务器以外的资源
4.重定向由于请求多次的,所以HttpServletRequest不是同一个对象,故不能使用它传递数据
一、分析
1.找出一个url中的项目名称
项目名称前面的“/”是服务器地址,例:http://127.0.0.1:8080/
项目名称后面的“/”是项目地址,例:http://127.0.0.1:8080/proejctname/
二、判断
1.判断一次请求行为是谁发出的
如果是浏览器行为,则表示项目名称前面的“/”,即服务器地址
如果是服务器内部行为,则表示项目名称后面的“/”,即项目地址
1.服务器内部行为:请求转发
2.浏览器行为:重定向、页面中form提交、页面中a标签、js中通过location.href定位一个路径
Cookie:在浏览器中保存用户的信息
使用:由服务器创建,发送到浏览器保存,之后随着请求发回到服务器
1.创建cookie
Cookie cookie = new Cookie("name","value");
2.发送cookie到浏览器
response.addCookie(cookie对象);
3.获取来自客户端的cookie
Cookie[] cookies = request.getCookies();
使用注意:
1.cookie第一次是由servlet发送到浏览器中,第一次不能获取cookie
2.不同的浏览器存放的cookie不是同一个
3.如果设置了cookie的maxage,则cookie会保存在浏览器所在电脑的硬盘上,如果没设置该属性,则保存在浏览器的内存中
Session:在服务器中保存用户信息
使用:在服务器端创建Session,来保存当前访问服务器的用户的信息
1.获取session(如果已经创建了session,则返回当前session)或创建session:
HttpSession session = request.getSession();
2.设置session最大不活跃时间
session.setMaxInactiveInteval() //以秒为单位
3.使用session保存信息
session.setAttribute(String key,Object value);
session.getAttribute(String key);
4.立即销毁session
session.invalidate();
HttpServletRequest:封装了一次来自客户端的Http的请求信息
请求消息包含几个部分?
1请求行
private void getRequestLine(HttpServletRequest request, HttpServletResponse response) { //请求方式 String method = request.getMethod(); System.out.println(method); //资源路径 String uri =request.getRequestURI(); String url=request.getRequestURL().toString(); System.out.println(uri); System.out.println(url); //请求参数字符串 String queryString =request.getQueryString(); System.out.println(queryString); //协议及版本号 String protocol = request.getProtocol(); System.out.println(protocol); String scheme = request.getScheme(); System.out.println(scheme); }
2请求头
private void getRequestHead(HttpServletRequest request, HttpServletResponse response) { // 根据header的key获取其value String user_agent = request.getHeader("User-Agent"); System.out.println(user_agent); // 查询header所有的keyname Enumeration<String> enu = request.getHeaderNames(); while (enu.hasMoreElements()) { System.out.println(enu.nextElement()); } }
3 实体内容
private void getRequestBody(HttpServletRequest request, HttpServletResponse response) throws IOException { // 获取请求实体中的数据 // 请求实体中的数据有三种形式: // 1.application/x-www-form-urlencoded // 2.multipart/form-data // 3.text/plain // 对于1、3 // getParameter() //无论post方式还是get方式都可以获取用户的请求数据 String value = request.getParameter("username"); System.out.println(value); String coment = request.getParameter("coment"); System.out.println(coment); ServletInputStream in= request.getInputStream(); FileOutputStream out = new FileOutputStream( "d:\\1.txt"); int len = 0; byte[] flush = new byte[1024]; while ((len = in.read(flush)) != -1) { out.write(flush, 0, len); } out.close(); in.close(); }
4网络信息
private void getIntenetInfo(HttpServletRequest request, HttpServletResponse response) { System.out.println("访问服务器的地址为:" + request.getRemoteAddr() + ":" + request.getRemotePort()); System.out.println("服务器的本地地址为:" + request.getLocalAddr() + ":" + request.getLocalPort()); } }
响应消息分为几步?
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 状态行 // 协议版本 http状态码 htt状态描述 // 应答头 // 响应实体 // 设置应答头 response.setHeader("content-type", "image/jpeg; charset=utf-8"); // 向用户输出字符数据 /* * PrintWriter out = response.getWriter(); out.write("<h1>你好世界!</h1>"); * out.flush(); out.close(); */ // 我们只能打开一个流为用户输出数据 FileInputStream in = new FileInputStream("D:\\1.jpg"); ServletOutputStream out = response.getOutputStream(); int len = 0; byte[] flush = new byte[1024 * 1024]; while ((len = in.read(flush)) != -1) { out.write(flush, 0, len); } out.flush(); out.close(); in.close(); }
本文作者:___mouM
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
版权说明:本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.