HttpServletResponse对象
每一个Servlet创建好之后都有一个请求对象和一个响应对象,Tomcat将这两个封装好的对象,传到service的方法中去
HttpServletResponse封装的是响应对象
每一个响应对象都包含三个部分:响应行、响应头、响应体
响应行
响应行包含了协议、协议的版本、状态码、描述
响应行的设置:
- response.setStatus(304);:正常情况下状态码设置,页面无对应状态处理
- response.sendError(404);:异常情况下状态码的设置,页面会直接处理响应的状态
- response.sendError(400, “请看清楚你的路径”);:可以设置提示信息
关于响应相关的状态码
- 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封装的是请求对象
每个请求对象也分为请求行,请求头,请求体
请求行
作用:后台需要操作一些项目名称才能进行下一步操作的时候
请求行的操作
- 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
request域对象
request域对象操作方法
- request.setAttribute(String , object):向作用域中添加数据
- request.getAttribute(String ):获取作用域数据
- request.removeAttribute(String):移除作用域数据
生命周期
从请求开始到响应结束-----一次完整的请求
ServletConfig对象是Servlet生命周期结束后消失(使用范围是自己的Servlet)
ServletContext对象,Tomcat创建出来之后就是针对全局的,Tomcat服务器停止时才会消失(或资源重新加载时)
转发与重定向
重定向
响应时通过response对象跳转新的页面
response.setStatus(302);
//重定向地址
//response.setHeader("location", "/day14/ServletDemo05");
//重定向合成了一个步骤
response.sendRedirect("/day14/ServletDemo05");
总结:
1、重定向地址栏地址会发生改变,显式最后一次重定向访问的地址
2、重定向是多次请求多次响应
3、重定向页面显式的内容为最后一次响应的内容
请求转发
请求时希望跳转另一个页面,并回传时携带信息,使用request对象
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");