/*
*1、General--》workspace-》UTF-8
* 任何项目(项目影响文件)都是UTF-8 编码方式
*2、General-》Editors-->Associations--》JSP->MyEclipse JSP Editor 运行快
*3、搜索jsp --》编码方式改成utf-8
*4、java--》Installed JRES--》添加
*5、
*6、取出MyEclipse自带的tomcat
*7、General--》Startup and Shutdown--》Myeclipse Derby
*
*如果是win7系统
*C:\windows\Fonts -》Courier New显示 window-》General-》Apperance-》 fonts--》 basic Text FONTs
*
*浏览器与对象无缘(收发HTTP请求) 由服务器创建对象
*服务器处理请求的流程
* 服务器每次收到请求时 都会为这个请求开辟一个新的线程
* 服务器会把客户端的请求数据封装到request对象中 request就是请求数据的载体(袋子)
* 服务器还会创建response对象 这个对象与客户端连接在一起 可以用来向客户端发送响应(手机)
*
*200 ok
*状态头
*Content-Type:text/html;charset=utf-8
*Content-Type:text/html;charset=gbk
*
*response:器类型为HttpServletResponse
* ServletResponse--》与协议无关的类型
* HttpServletResponse--》与http协议相关的类型
* http协议 http协议中响应的内容包含什么?
* 状态码200表示成功 302表示重定向 404表示客户端错(访问的资源不存在) 500表示服务器端错误
* sendError(int sc)-->发送错误状态码 例如 404、500
* sendError(int sc,String msg)-->也是发送错误状态码 还可以带一个错误信息
* setStatus(int sc)-->发送成功的状态码 可以用来发送302
* 发送404
* 响应头 Content-Type、Refresh、Location等等
* 头就是一个键值对 可能会存在一个头(一个名称、一个值) 也可能会存在一个头(一个名称,多个值)
* **setHeader(String,String value) 适用于单值的响应头 response.setHeader("aaa","AAA");
* addHeader(String name,String value) 适用于多值的响应头
* response.addHeader("aaa","A");
* response.addHeader("aaa","AA");
* response.addHeader("aaa","AAA");
* setIntHeader(String name,int value) 适用于单值的int类型的响应头
* response.setIntHeader("Content-Length",88);
* addIntHeader(String name,int value); 适用于多值的int类型的响应头
* setDateHeader(String name,long value);适用于多值的int类型的响应头
* response.setDateHeader("expires",1000*60*60*24); //1天后过期 存储页面 毫秒为单位
* addDateHeader(String name,long value); 适用于多值的毫秒类型的响应头
*
*发送302 设置Location头 完成重定向
* 定时刷新 设置Refresh头 定时重定向
* 禁用浏览器缓存 Cache-Control、pragma、expires 适用所有的浏览器
* <meta>标签可以代替响应头<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
* response有两个流但只能一个不能同时用 不然会抛异常
*响应体 通常是html 也可以是图片
* response的两个流
* ServletOutputStream 用来想客户端发送字节数据 ServletOutputStream = response.getOutputStram;
* PrintWriter 用来想客户端发送字符数据 需要设置编码 PrintWriter = writer = response.getWriter();
* 两个流不能同时使用
* 使用PrintWriter发送字符数据
* 使用ServletOutputStream发送字节数据(图片)
*重定向设置302 设置Location 其中变化的只有Location 所以java提供了一个快捷的方法来完成重定向
* sendRedirect(String location)方法
*
*
*/
/*
*重定向
* 1、设置Location
* 2、发送302状态码
*/
response.setHeader("Location", "/day04_01/DServlet");
response.setStatus(302);
//快捷的重定向方法
response.sendRedirect("http://www.baidu.com");
//请求uri 项目名 servlet路径
response.sendRedirect("/day04_01/DServlet");
/*
*设置一个Refresh 表示定时刷新
*状态头和体都由response完成
*/
//发送响应体
PrintWriter pw = response.getWriter();
pw.print("欢迎登录!3秒后自动跳转到主页");
//设置Refresh响应头 3秒后跳转到指定页面
response.setHeader("Refresh", "3;URL=/day04_01/DServlet");
/*
*禁用浏览器缓存 和meta一样
*/
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.setDateHeader("expires", -1);
/*String s= "hello outputstream";
byte[] bytes = s.getBytes();//字节流万能 字符流不一定
response.getOutputStream().write(bytes);*/
/*
* 演示响应字节数据
*/
//把一张图片读取到字节数组中
String path = "F:/1.png";
FileInputStream in = new FileInputStream(path);
byte[] bytes = IOUtils.toByteArray(in);//读取输入流内容的字节到字节数组中
response.getOutputStream().write(bytes);