HTTP响应消息 与 Response 响应
HTTP 响应概念
响应消息:服务端发送给客户端的数据
数据格式:
1.响应行
(1).组成:协议/版本 响应状态码 状态码描述
(2).响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态
1.状态码都是3位数字
2.分类:
①. 1xx:服务器接收客户端消息,但是没有接受完成,等待一段时间后,发送1xx多状态码
②. 2xx:成功。例如::200
③. 3xx:重定向。例如:302(重定向),304(访问缓存)
④. 4xx:客户端错误。例如:404(请求路径没有对应的资源),405(请求方式没有对应的doXxx方法)
⑤. 5xx:服务器端错误。例如500(服务器内部出现异常)
2.响应头
(1).格式:头名称 : 值
(2).常见的响应头
Location: http://www.company.org/index.jsp --重定向的地址,该响应头和302的状态码一起使用。
Server:apache tomcat --服务器的类型
Content-Encoding: gzip --服务器发送给浏览器的数据压缩类型
Content-Length: 80 --服务器发送给浏览器的数据长度
Content-Language: zh-cn --服务器支持的语言
Content-Type: text/html; charset=GB2312 --服务器发送给浏览器的数据类型及内容编码
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --服务器资源的最后修改时间
Refresh: 1;url=http://www.company.org --定时刷新
Content-Disposition: attachment; filename=aaa.zip --告诉浏览器以下载方式打开资源(文件下载)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search --服务器发送给浏览器的cookie信息(会话管理时用到)
Connection: close/Keep-Alive --服务器和浏览器的连接状态。close:关闭连接 keep-alive:保持连接
3. 响应体:传输的数据
发送给浏览器的内容
Response对象 响应
功能:设置响应消息
1.设置响应行
response.setStatus(int sc); 设置状态码
//设置状态码为302 response.setStatus(404); //404 + 错误页面 response.sendError(404); //简单的重定向方法 response.sendRedirect("/day01/responseDemo1");
2.设置响应头
setHeader(String name, String value);
//重定向路径(注意项目名称) response.setHeader("Location",req.getContextPath()+"/login.html"); //刷新 Refresh :刷新 间隔1秒 原理:浏览器认识refresh头,得到refresh头之后重新请求当前资源 response.setHeader("Refresh", "1"); //定时跳转 间隔3 URL = 网址 response.setHeader("Refresh", "3; url = http://www.baidu.com");
3.设置响应体
使用步骤:
response.getWriter().write(); 发送字符实体内容
response.getOutputStream().write() 发送字节实体内容
//格式化日期 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); //获取当前日期 String format = simpleDateFormat.format(new Date()); //输出当前日期到浏览器 response.getWriter().write(format)
forward(转发) 和 redirect(重定向) 区别
转发的特点:
1.转发地址栏路径不变
2.转发只能访问当前服务器下的资源
3.转发是一次请求,可以使用requet对象来共享数据
重定向的特点:
1.地址栏发生变化
2.重定向可以访问其他占点(服务器)的资源
3.重定向是两次请求,不能使用request对象来共享数据
//设置以下载方式打开文件 File file = new File("E:/img/2.jpg"); response.setHeader("Content-Disposition", "attachment;filename="+file.getName()); FileInputStream in = new FileInputStream(file); byte[] b = new byte[1024]; //把图片内容写出到浏览器 while( in.read(b)!=-1 ){ response.getOutputStream().write(b); }
1.概念:
代表整个web应用,可以和程序的容器(服务器)来通讯
2.获取:
1.通过request对象获取
request.getServletContext();
2.通过HttpServlet获取
this.getServletContext();
3. 功能:
ServletContext是一个域对象
域对象:作用是用于保存数据,获取数据。可以在不同的动态资源之间共享数据。
案例:两个Servlet之间传递数据
Servlet1
name=eric
方案1:response.sendRedirect("/Servlet2?name=eric")
Servlet2
String request.getParameter("name");
方案2:保存到域对象中,从域对象获取
方案1: 可以通过传递参数的形式,共享数据。局限:只能传递非中文字符串类型。
方案2: 可以使用域对象共享数据,好处:可以共享任何类型的数据!!!
保存数据: void setAttribute(java.lang.String name, java.lang.Object object)
获取数据: java.lang.Object getAttribute(java.lang.String name)
删除数据: void removeAttribute(java.lang.String name)
ServletContext域对象:作用范围在整个web应用中有效!!!
所有域对象:(域范围从大到小)
ServletContext 域对象
HttpSession 域对象
HttpServletRequet 域对象
PageContext 域对象
代码实现:
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/responsedome1") public class ResponseDome1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("==<在域中写入内容>=="); //获取ServletContext对象(域对象) 一个web项目只有一个ServletContext对象 ServletContext servletContext = req.getServletContext(); System.out.println(servletContext); //在不同的动态资源之间传递数据 //保存数据 servletContext.setAttribute("username", "Tom"); } }
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/responsedome2") public class ResponseDome2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("==<从域中读取内容>=="); ServletContext servletContext = req.getServletContext(); //读取数据 String username = (String)servletContext.getAttribute("username"); System.out.println(username); resp.setHeader("Refresh", "3"); } }
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/responsedome3") public class ResponseDome3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = req.getServletContext(); //从域对象中移除内容 servletContext.removeAttribute("username"); System.out.println("==<从域移除内容>=="); } }

浙公网安备 33010602011771号