web常用对象01

请求方式

1、地址栏输入
  在浏览器地址栏直接输入要访问的地址即可,此种方式可以看做是访问服务器的起始操作。
  http: //ip:port/path
2、超链接
  使用超链接也可以向服务器发出请求
  < a href=”http://www.baidu.com”>百度< /a>
3、 Form 表单
4.、ajax
5、请求转发
6、 重定向

HttpServletRequest 对象

HttpServletRequest 对象:主要作用是用来接收客户端发送过来的请求信息。
常用形式
1)常用方法
  getRequestURL() —— 获取请求的完整路径 (从http开始,到?前面)
  getRequestURI() —— 获取请求的部分路径(从项目站点名开始,到?前面)
  getQueryString() ——(从?开始,到最后的字符串)
  getMethod() —— 获取请求类型(GET/POST)
  getProtocol() —— 获取协议版本(HTTP/1.1)
  getContextPath() —— 获取站点名  
2)获取请求头
  getHeader(String) —— 获取指定请求头的值
  getHeaderNames() —— 获取所有请求头的名称集合,枚举类型Enumeration< T>
3)获取客户端请求参数 (客户端提交的数据)
  getParameter(name) —— 获取指定名称的参数值
  getParameterValues(name) —— 获取指定名称的所有参数值 
    String[] hobbys = request.getParameterValues(“hobbys”);
  getParameterNames() —— 获取所有的参数名  
    Enumeration< string > enumeration = request.getParameterNames();
  getParameterMap() —— 获取所有参数名与参数值的map的对象 
    Map<String, String[]> map = request.getParameterMap();
请求乱码
乱码原因:
  由于现在的 request 属于接收客户端的参数,所以必然有其默认的语言编码。
  主要是由于在解析过程中默认使用的编码方式为 ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。
解决方案:
1)设置 request 中的编码方式
  设置服务器解析编码 request.setCharacterEncoding(“UTF-8”);
  只针对POST请求有效,GET请求无任何影响。
2)接收到乱码数据以后,再通过相应的编码格式还原
  new String(request.getParameter(“uname”).getBytes(“IS0-8859-1”),“UTF-8”)
  无论是GET请求还是POST请求,都有效。  
乱码场景:
             POST请求          GET请求
Tomcat8及以上版本    乱码,要处理        不乱码,不处理
         request.setCharacterEncoding(“UTF-8”);
Tomcat7及以下版本    乱码,要处理          乱码,要处理
  request.setCharacterEncoding(“UTF-8”);  new String(request.getParameter(“uname”).getBytes(“IS0-8859-1”),“UTF-8”)
请求转发
  请求转发,是一种服务器的行为。
  当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的 URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有一个请求发出。
实现方式如下,达到多个资源协同响应的效果
  request.getRequestDispatcher(“跳转的路径”).forward(request, response);
request域对象
  通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效。
方法:
  request.setAttribute():设置域对象内容;
  request.getAttribute(String name):获取域对象内容;
  request.removeAttribute(String name): 删除域对象内容。

HttpServletResponse 对象

HttpServletResponse 的主要功能用于服务器对客户端的请求进行响应,将Web 服务器处理后的结果返回给客户端。
常用方法
  setHeader(string name, string value) —— 设置响应头
  sendError(int sc) —— 设置一个错误状态码
  setContentType(String) —— 设置响应数据的类型及编码
  getWriter() —— 获取输出字符流
  getOutputstream() —— 获取输出字节流
刷新:
  response.setHeader(“refresh”,“2”);
  每2秒刷新一次
自动跳转:
  response.setHeader(“refresh”,“3;URL=http://www.baidu.com”);
  3秒后跳转到百度
数据响应
getWriter() —— 获取字符流(只能响应回字符);
  PrintWriter printWriter = response.getWriter();
printWriter.write(“Hello Writer”);
getOutputStream() —— 获取字节流(能响应一切数据)。
  ServletOutputStream out = response.getOutputStream();
  out.write(“Hello output”.getBytes());
响应的数据到客户端被浏览器解析。
注意:两者不能同时使用。
乱码解决
乱码原因:
  服务器响应的数据也会经过网络传输,服务器端有一种编码方式,在客户端也存在一种编码方式,当两端使用的编码方式不同时则出现乱码。
getWriter()的字符乱码
  响应中文必定出乱码,由于服务器端在进行编码时默认会使用 ISO-8859-1 格式的编码,该编码方式并不支持中文。
解决方案:
  1)设置服务端编码为UTF-8
     response.setCharacterEncoding(“UTF-8”);
  2)设置客户端的编码
    response.setHeader(“content-type”, “text/html;charset=utf-8”);
  上述两句可用一句代替:
    response.setContentType(“text/html;charset=utf-8”);
getOutputStream()字节乱码
  响应中文时,由于本身就是传输的字节, 所以此时可能出现乱码,也可能正确显示.。
  当服务器端给的字节恰好和客户端使用的编码方式一致时则文本正确显示,否则出现乱码。
解决方案:
  response.setContentType(“text/html;charset=utf-8”);
响应图片
1、获取项目存放在服务器中的真实路径 request.getServletContext().getRealPath("/");
2、获取图片的路径
3、通过路径得到file对象
4、判断file对象是否存在,且是一个标准文件
5、得到文件的输入流
6、得到字节输出流
7、输出文件
8、关闭资源

  // 1、获取项目存放在服务器中的真实路径	request.getServletContext().getRealPath("/");
		String realPath = request.getServletContext().getRealPath("/");
  // 2、获取图片的路径
		String filePath = realPath + "WEB-INF/image/jay.jpg";
		// 3、通过路径得到file对象
		File file = new File(filePath);
		// 4、判断file对象是否存在,且是一个标准文件
		if (file.exists() && file.isFile()) {
			// 5、得到文件的输入流
			InputStream in = new FileInputStream(file);
			// 设置响应类型
			response.setContentType("image/jpeg");
			// 6、得到字节输出流
			ServletOutputStream out = response.getOutputStream();
			// 7、输出文件
			byte[] bytes = new byte[1024];
			int len = 0;
			while ((len = in.read(bytes)) != -1) {
				out.write(bytes,0,len);
			}
			// 8、关闭资源
			out.close();
			in.close();
		} else {
			response.setContentType("text/html;charset=UTF-8");
			response.getWriter().write("<h2>文件不存在!</h2>");
			response.getWriter().close();
		}

重定向跳转
重定向是一种服务器指导客户端的行为。
  客户端发出第一个请求,被服务器接收,经过处理服务器进行响应,与此同时,服务器给客户端一个地址(下次请求的地址 resp.sendRedirect(“url”);),当客户端接收到响应后,立刻、马上、自动根据服务器 给的地址进行请求的发送第二个请求,服务器接收请求并作出响应,重定向完成。
特点:
  1、客户端跳转
  2、地址栏会发生改变
  3、request对象不共享

请求转发和重定向的区别

1、请求转发是服务端跳转,重定向是客户端跳转
2、请求转发时地址栏不发生改变,重定向时地址栏发生改变
3、请求转发时request对象共享,重定向时request对象不共享
4、请求转发的地址只能在当前站点下,重定向的地址可以是任意路径
5、请求转发时request作用域有效,重定向时request域对象无效

请求路径问题

相对路径:相对当前资源的路径。
  http: // localhost:8080/站点名/
绝对路径:
  1)以http://开头的路径,已经跨域,可以访问任意地址 (只有客户端跳转才可使用)
  2)以/开头
    请求转发
      "/“代表的是"http: // localhost:8080/站点名/”
    重定向
      "/“代表的是"http: // localhost:8080/”

Cookie

创建cookie和发送cookie

    	// 创建Cookie
		Cookie cookie = new Cookie("uname","admin");
		// 发送cookie
		response.addCookie(cookie);

Cookie的获取
getCookies()
  获取客户端回传的所有 cookie 组成的一个数组,
  如果需要获取单个 cookie 则需要通过遍历,
getName()
  获取 Cookie 的名称
getValue()
  获取 Cookie 的值
Cookie到期时间的设定
到期时间,到期时间用来指定该 cookie 何时失效。
  默认为当前浏览器关闭即失效。
setMaxAge(int time)
  设定 cookie 的最大有效时间,以秒为单位。
默认-1.表示只在当前浏览器中存活,关闭浏览器后失效。
正整数:
  表示存活指定秒数。无论是关闭浏览器还是电脑,都会存活。
负整数:
  表示只在当前浏览器中存活,关闭浏览器后失效。
零:
  表示即刻删除。
Cookie 的注意点
1、不跨浏览器和电脑
2、不能存中文
  Cookie 中不能出现中文,如果有中文则通过 URLEncoder.encode()来进行编码,获取时通过 URLDecoder.decode()来进行解码。
3、如果服务器端发送重复的Cookie那么会覆盖原有的Cookie。
Cookie的路径
setPath(“路径”)
  设置cookie的路径。
  在 Servlet 中保存的 Cookie 如果没有设置 path,那么它的 path 默认为当前 Servlet 的所在路径;
  “/” 表示表示只要在当前服务器下的所有项目都可访问。
当访问的路径包含了 cookie 的路径时,则该请求将带上该 cookie;如果访问路径不包含 cookie 路径,则该请求不会携带该 cookie。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值