HttpServletResponse接口和HttpServleRequest接口

HttpServletResponse对象

每一个Servlet创建好之后都有一个请求对象和一个响应对象,Tomcat将这两个封装好的对象,传到service的方法中去
HttpServletResponse封装的是响应对象
每一个响应对象都包含三个部分:响应行、响应头、响应体

HttpServletResponse接口和HttpServleRequest接口

响应行

响应行包含了协议、协议的版本、状态码、描述

响应行的设置:
  • response.setStatus(304);:正常情况下状态码设置,页面无对应状态处理
    HttpServletResponse接口和HttpServleRequest接口
  • response.sendError(404);:异常情况下状态码的设置,页面会直接处理响应的状态
    HttpServletResponse接口和HttpServleRequest接口
  • response.sendError(400, “请看清楚你的路径”);:可以设置提示信息
    HttpServletResponse接口和HttpServleRequest接口
关于响应相关的状态码
  • 100–199:表示请求到达服务器但是没有处理完成,如果需要完成全部操作需要再次请求
  • 200–299:表示服务器已经处理完成请求(正常200)
  • 300–399:表示服务器将这个资源转移(页面重定向 304)
  • 400–499:表示资源无法找到(找不到指定的资源或文档不存在 404)
  • 500–599:服务器内部错误(Java代码出现异常 空指针 500)

响应头

响应头的设置
  • setHeader(param1, param2):设置响应头中的key-value,当有多个相同的key设置时,只会保存最后一对
  • addHeader(param1, param2):设置响应头中的key-value,当有多个相同的key设置时,不会覆盖前面的

(关于参数以后详解)

响应体

响应体就是response对象在返回具体数据到浏览器时需要的数据传递媒介

  • 字符流的响应:response.getWriter().println()

  • 字节流的响应:response.getOutPutStream().write(“字节流”)

注意
1、使用字节流可以传输文件、图片常用的文档内容传输既使用字符流
2、可用同时使用多个字节流或者字符流的代码
3、不能字节流和字符流同时使用

HttpServleRequest对象

HttpServleRequest封装的是请求对象
每个请求对象也分为请求行,请求头,请求体
HttpServletResponse接口和HttpServleRequest接口

请求行

作用:后台需要操作一些项目名称才能进行下一步操作的时候

请求行的操作
  • getMethod():获取请求方式
  • getRequestURI():获取请求资源的路径
  • getRequestURL():获取比较全的路径
  • getContextPath():获取到项目路径
  • getLocalAddr():服务器的IP地址
//获取请求行参数
//获取请求方式
String method = request.getMethod();
System.out.println("method:"+method);//method:GET

//获取请求资源的路径 
String requestURI = request.getRequestURI();
System.out.println("requestURI:"+requestURI);//requestURI:/day14/servletDemo01

//获取比较全的路径
StringBuffer requestURL = request.getRequestURL();
System.out.println("requestURL:"+requestURL);//requestURL:http://localhost:8081/day14/servletDemo01

//获取到项目路径
String contextPath = request.getContextPath();
System.out.println("contextPath:"+contextPath);//contextPath:/day14

//服务器的IP地址
String localAddr = request.getLocalAddr();
System.out.println("localAddr:"+localAddr);

请求头

操作

getHeader(param):获取请求头信息

请求体

操作
  • getParameter(参数):获取提交过来的数据
  • getParameterValues(参数):根据参数名,获取参数值,返回数组
  • getParameterMap() :获取所有的参数封装成map集合
使用BeanUtils工具类来操作map集合

需导包:commons-beanutils和commons-logging
HttpServletResponse接口和HttpServleRequest接口

request域对象

request域对象操作方法

  • request.setAttribute(String , object):向作用域中添加数据
  • request.getAttribute(String ):获取作用域数据
  • request.removeAttribute(String):移除作用域数据
生命周期

从请求开始到响应结束-----一次完整的请求
ServletConfig对象是Servlet生命周期结束后消失(使用范围是自己的Servlet)
ServletContext对象,Tomcat创建出来之后就是针对全局的,Tomcat服务器停止时才会消失(或资源重新加载时)

转发与重定向

重定向

响应时通过response对象跳转新的页面
HttpServletResponse接口和HttpServleRequest接口

response.setStatus(302);
//重定向地址
//response.setHeader("location", "/day14/ServletDemo05");		

//重定向合成了一个步骤
response.sendRedirect("/day14/ServletDemo05");

总结
1、重定向地址栏地址会发生改变,显式最后一次重定向访问的地址
2、重定向是多次请求多次响应
3、重定向页面显式的内容为最后一次响应的内容

请求转发

请求时希望跳转另一个页面,并回传时携带信息,使用request对象

HttpServletResponse接口和HttpServleRequest接口

 request.getRequestDispatcher("servlet").forward(request,response);

总结
1、浏览器地址栏没有发生改变
2、一次请求一次响应,跳转是在服务器内部进行的
3、浏览器页面显式的是 转发的最后的路径给出的响应

注意:请求转发使用的是相对路径重定向使用的是绝对路径
重定向和转发都可以进行页面的跳转:当需要使用request域对象传递参数时,使用请求转发,否则使用重定向

关于中文乱码问题

请求对象转码

request.setCharacterEncoding("utf-8");

响应的时候转码

//告诉服务器,要以UTF-8的形式向浏览器传输响应内容
response.setCharacterEncoding("utf-8");
//告诉浏览器,以utf-8的形式进行解析
response.setHeader("Content-Type", "text/html;charset=utf-8");

//以上两步可以合成一步
response.setContentType("text/html;charset=utf-8");
上一篇:第11章 拾遗5:IPv6和IPv4共存技术(2)_ISATAP隧道技术


下一篇:Javaweb —— HTTPServletResponse对象