ServletContext
这堂课主要讲ServletContext这个web域(可以看得见范围的)对象,web在启动的时候会创建唯一的ServletContext域对象。
作用:1.用来web域共享数据
1.1 通过设置域属性(SetAttribute)和获取域属性(GetAttribute)来实现数据共享
2. 实现转发
2.1 转发与重定向的区别
转发一次请求一次响应(获取转发对象RequestDispatcher,通过forward方法实现转发);重定向两次请求两次响应
3. 读取资源文件
3.1 获取真实的文件路径(通过父类中的GetRealPath方法获取文件的真实路径)
2015-02-27
Response:向客户端发送数据
主要讲了向客户端发送数据以及解决乱码的问题
1.Response.GetOutputStream字节流
1.1 通过str.GetBytes("utf-8")指定编码
1.2 SetHeader("content-type","text/html;charset=utf-8")指定客户端的解析码表
2.Response.GetWriter字符
2.1 Response.setCharacterEncoding("utf-8")设置服务器码表
3. 由于setheader使用频率比较高所以封装了一个方法SetContentType,这个既能设置服务器端编码又能设置客户端编码
2015-02-28
Response--下载文件
1. 输入流 首先要有一个输入流读取附件
2.输出流 此时的输出流就是response中的输出流
3.将输入流的数据读取到输出流中 通过一个字节数组缓冲区转
4. 设置头部信息 设置content-disposition值为attachement;filename="xx"如果有中文利用URLEncoder.encode("美女.jpg","utf-8");
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("content-disposition", "attachement;filename="+URLEncoder.encode("美女.jpg","utf-8")); InputStream in = new FileInputStream(this.getServletContext() .getRealPath("spring.jpg")); OutputStream out = response.getOutputStream(); byte[] bs = new byte[1024]; int count = 0; while ((count =in.read(bs))!=-1) { out.write(bs, 0, bs.length); } in.close(); }
ps:response会自动关闭输出流
2015-03-02
Response--定时刷新页面
定时刷新页面可以通过以下两种方式实现一个是设置http头部还有一个是通过设置meta来模拟,应用场景如注册成功后跳转到首页。
1.设置http头部
SetHeader("Refresh","3;url=")
2.设置meta标签
<meta http-equiv="refresh" content="3;url=/Day03/servlet/ResponseServlet">
Response--控制缓存
通过设置头部expires(0,-1)、cache-control(no-cache)、pragma(no-cache)
Response--重定向
重定向的原理就是302+location
1.setstatus
2.response.setHeader("location", "/Day03/servlet/CacheServlet");
由于这个方法常用故封装了一个方法SendRedirect("url")
Response--输出验证码图片
1.内存图 首先要实例化一张内存图对象
2. 获取这张图的画板 当一个内存图对象的时候还不能够直接往上面画东西,得获取图片的画板对象
3. 设置颜色(好比我们操作画图软件时设置一个颜色)
4.边框
5.干扰点、线 防止机器注册
6.画字
7.输出 从内存中输出到输出流中来