ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:30.90KB ,
资源ID:9998017      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9998017.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(day19ThreadLocal模式与OSIV模式.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

day19ThreadLocal模式与OSIV模式.docx

1、day19ThreadLocal模式与OSIV模式Day19过虑器/ThreadLocal/权限/监听器/观察者模式1、 今天的主要内容学习的方法: 方法三步曲: 第一步:抄写代码。(抄) 第二步:默写代码。(背) 第三步:理解代码。(理解)、用过虑器实现以下功能:1:对输出的数据进行压缩。或是对全站进行压缩。 ByteArrayoutputsteam GzipoutputStream 实现数据压缩 设置三个头: resp.setContentType(text/html;charset=UTf-8); resp.setContentLength(dest.length); resp.setH

2、eader(Content-Encoding,gzip);2:用过虑器来管理事务,OSIV模式,与使用代理管理事务对比与分析。 ThreadLocal模式在实际开发中的应用。 参与数据库管理。 将事务下放到Service层。3:实现权限过虑器。综合示例。相对比较复杂。 5个表联合工作。 ER实体关系图。 要用两个过虑器实现安全过虑。认证过虑器和验证过虑器。2、补以下内容:补:CallableStatement调用存储过程补:内省在数据封装中起的作用?数据库反射与类反射共同使用带来的方便。 内省 一个核心类:PropertyDescriptor。 内省本质上是反射。补:JNDI3、监听器观察者模

3、式 观察者。被观察者。观察事件。2、 以下是课上的记录3、数据的压缩GzipOutputStream - ByteArrayOutputStream。:以下是在某个servlet中对指定的数据进行压缩:package cn.itcast.servlet;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import java.io.StringReader;import java.util.zip.GZIPO

4、utputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class GzipServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse resp) thro

5、ws ServletException, IOException /声明准备被压缩的数据 String str = Hello你好Hello你好在内存中声明一Hello你好在 + 内存中声明一个Hello你好在内存中声明一个Hello你 + 好在内存中声明一个容器声明准备被压缩获取准备被压缩 + 的数据的字节码的数据容器声明准备被压缩获取准备被压缩的数 + 据的字节码的数据容器声明准备被压缩获取准备被压缩的数据的 + 字节码的数据个容器声明准备被压缩获取准备被压缩的数据的字节码的 + 数据在内存中声明一个容器声明准备被压缩获取准备被压缩的数据 + 的字节码的数据; /2:获取准备被压缩的数据的

6、字节码 byte src = str.getBytes(UTF-8); /3:在内存中声明一个容器 ByteArrayOutputStream destByte = new ByteArrayOutputStream(); /:声明压缩的工具流,并设置压缩的目的地为destByte GZIPOutputStream zip = new GZIPOutputStream(destByte); /5:写入数据 zip.write(src); /6:关闭压缩工具流 zip.close(); System.err.println(压缩之前字节码大小:+src.length); /:获取压缩以后数据 b

7、yte dest = destByte.toByteArray(); System.err.println(压缩以后的字节码大小:+dest.length); /8:必须要输出压缩以后字节数组 resp.setContentType(text/html;charset=UTF-8); /9:必须要使用字节流来输出信息 OutputStream out = resp.getOutputStream(); /10:通知浏览器。这是压缩的数据,要求浏览器解压 resp.setHeader(Content-encoding,gzip); /11:通知浏览器压缩数据的长度 resp.setContent

8、Length(dest.length); /10:输出 out.write(dest); :所有页面*。jsp全部压缩 只要是输出信息,只有两种方式: Respoonse.getWriter().输出信息字符流。所有的jsp页面,编译后,都是通过JspWriter方式输出的信息。 但所有jsp页面都是JspWriter,而jspwriter是对PrintWriter的包装。Response.getOutputStream() 字节流。分析:如果要实现全站的压缩,请先实现对所有servlet中的resp.getWriter输出的数据都压缩 先实现对一个进行压缩。第一步:书写一个类Servlet类

9、。正常输出信息 : resp.,getWriter().print(.);public class OneServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html;charset=UTF-8); PrintWriter out = response.getWriter(); out.println(Hell

10、o你好大家同学); 第二步:对这上面的这个类进行拦截-Filter,在拦截过程中包装response 实现抽像类:HttpServletResponseWrapper package cn.itcast.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletReq

11、uest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;public class GzipFilter implements Filter public void init(FilterConfig filterConfig) throws ServletException public void doFilter(ServletRequest request, Serv

12、letResponse response, FilterChain chain) throws IOException, ServletException /声明MyResponse包装类 MyResponse resp = new MyResponse(HttpServletResponse) response); /放行时,必须要传递自己包装过的类 chain.doFilter(request, resp); public void destroy() /实现对HttpSerlvetResponse的包装class MyResponse extends HttpServletRespons

13、eWrapper public MyResponse(HttpServletResponse response) super(response); 第三步:为了可以压缩数据,我们必须要拦截getwriter方法 返回的不是apache的Wrtiter对象。以下是完整的代码:package cn.itcast.filter;public class GzipFilter implements Filter public void init(FilterConfig filterConfig) throws ServletException public void doFilter(Servlet

14、Request request, ServletResponse response, FilterChain chain) throws IOException, ServletException /声明MyResponse包装类 MyResponse resp = new MyResponse(HttpServletResponse) response); /放行时,必须要传递自己包装过的类 chain.doFilter(request, resp); /目标类调用完成了,返回 以后读取a.txt File file = new File(d:/a/a.txt); /声明一个缓存的字符串对象

15、 StringBuilder sb = new StringBuilder(); /读取文件 InputStream in = new FileInputStream(file); byte b = new byte1024; int len = 0; while(len=in.read(b)!=-1) sb.append(new String(b,0,len,UTF-8); in.close(); /转成字节开始压缩 byte src = sb.toString().getBytes(UTF-8); /声明缓存容器 ByteArrayOutputStream destBytes = new

16、ByteArrayOutputStream(); /声明压缩流 GZIPOutputStream gzip = new GZIPOutputStream(destBytes); /压缩数据 gzip.write(src); gzip.close(); /获取压缩以后数据 byte dest = destBytes.toByteArray(); System.err.println(压缩之前:+src.length); System.err.println(压缩以后:+dest.length); /输出 /必须要使用原生 的response HttpServletResponse res = (

17、HttpServletResponse) response; res.setContentType(text/html;charset=UTf-8); OutputStream out = res.getOutputStream(); res.setHeader(Content-encoding, gzip);/必须 res.setContentLength(dest.length); out.write(dest); public void destroy() /实现对HttpSerlvetResponse的包装class MyResponse extends HttpServletResp

18、onseWrapper public MyResponse(HttpServletResponse response) super(response); Override public PrintWriter getWriter() throws IOException System.err.println(有人想获取输出流); PrintWriter out = new PrintWriter( new OutputStreamWriter( new FileOutputStream(d:/a/a.txt),UTF-8); return out; 第四步:修改包装类Myresponse2,让

19、输出数据放到一个内存缓存区中package cn.itcast.filter;public class GzipFilter2 implements Filter public void init(FilterConfig filterConfig) throws ServletException public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException HttpServletResponse res

20、p= (HttpServletResponse) response; /声明包装类对象 MyResponse2 myresp = new MyResponse2(resp); /放行,调用oneServlet.doGet chain.doFilter(request, myresp); /第二步:从myresp2中读取原生的数据 byte src = myresp.getSrc(); /第三步:开始压缩 ByteArrayOutputStream destBytes = new ByteArrayOutputStream(); GZIPOutputStream zip = new GZIPOu

21、tputStream(destBytes); zip.write(src); zip.close(); /第三步:输出-使用原生的response resp.setContentType(text/html;charset=UTF-8); /获压缩以后数据 byte dest = destBytes.toByteArray(); System.err.println(压缩之前:+src.length); System.err.println(压缩以后:+dest.length); /设置头 resp.setContentLength(dest.length); resp.setHeader(C

22、ontent-Encoding,gzip); /输出 OutputStream out = resp.getOutputStream(); out.write(dest); public void destroy() /第一步:声明response的包装类class MyResponse2 extends HttpServletResponseWrapper /将这个容器/a.txt,声明成员变量 private ByteArrayOutputStream srcByte; public MyResponse2(HttpServletResponse response) super(respo

23、nse); /修改增强getWtier方法 Override public PrintWriter getWriter() throws IOException srcByte = new ByteArrayOutputStream(); PrintWriter out = new PrintWriter( new OutputStreamWriter(srcByte, UTF-8); return out; /提供一个方法获取原生 的数据 public byte getSrc() return srcByte.toByteArray(); 第五步:全部的jsp都要经过压缩 只要是通过包装re

24、rsponse,且修改了getWriter方法,返回一个自己的printwiter对象。声明一个放原数据的容器对象。就可以实现数据压缩。 public class GzipFilter2 implements Filter public void init(FilterConfig filterConfig) throws ServletException public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletExc

25、eption HttpServletResponse resp= (HttpServletResponse) response; /声明包装类对象 MyResponse2 myresp = new MyResponse2(resp); /放行,调用oneServlet.doGet chain.doFilter(request, myresp); /第二步:从myresp2中读取原生的数据 byte src = myresp.getSrc(); /第三步:开始压缩 ByteArrayOutputStream destBytes = new ByteArrayOutputStream(); GZI

26、POutputStream zip = new GZIPOutputStream(destBytes); zip.write(src); zip.close(); /第三步:输出-使用原生的response resp.setContentType(text/html;charset=UTF-8); /获压缩以后数据 byte dest = destBytes.toByteArray(); System.err.println(压缩之前:+src.length); System.err.println(压缩以后:+dest.length); /设置头 resp.setContentLength(

27、dest.length); resp.setHeader(Content-Encoding,gzip); /输出 OutputStream out = resp.getOutputStream(); out.write(dest); public void destroy() /第一步:声明response的包装类class MyResponse2 extends HttpServletResponseWrapper /将这个容器/a.txt,声明成员变量 private ByteArrayOutputStream srcByte; private PrintWriter out; publi

28、c MyResponse2(HttpServletResponse response) super(response); /修改增强getWtier方法 Override public PrintWriter getWriter() throws IOException srcByte = new ByteArrayOutputStream(); out = new PrintWriter( new OutputStreamWriter(srcByte, UTF-8); return out; /提供一个方法获取原生 的数据 public byte getSrc() if(out!=null) out.close(); return srcByte.toByteArray(); 且它的配置如下: zip2 cn.itcast.filter.GzipFilter2 zip2 *.jsp 4、同时实现对getoutputstream和getWtier压缩 思想: 在myrespons2这个类中,对getoutputstream也要覆盖。 返回一个Servle

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1