版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中文乱码和过滤器,第二章,回顾与作业点评,Java中生成一个Class对象的方法主要有哪些? Java反射技术有什么优缺点? 代理模式中一般涉及哪三个角色? 静态代理和动态代理的区别有哪些?,本章任务,使用过滤器解决中文乱码问题 使用过滤器解决权限验证问题 使用过滤器进行字符替换,本章目标,能够解决中文乱码问题 编码知识 解决中文乱码问题 掌握过滤器知识 过滤器及其作用 过滤器运行原理 过滤器接口 过滤器的应用,字符集与字符编码,字符集(Character Set) 字符组成的集合,描述并定义了这个集合中可以出现哪些字符 字符编码(Character Encoding) 字符集中的字符在计算机
2、中的二进制存储形式 先有字符集,再有字符编码 一个字符集可以有多种编码方式,字符集与字符编码,ASCII ASCII使用7个比特进行字符编码,最多可以表示的字符数量为27(128)个 包括大小写英文字母、数字、标点符号、控制字符等 每个字符用一个字节表示,每个字节的最高位为0 字符“A”在用ASCII码中用2进制的“01000001”表示,换算成10进制为“65”,字符集与字符编码,ISO8859-1 ISO8859-1,又称Latin-1或西欧语言,在ASCII的基础上,使用8比特编码,新增一些字符,兼容ASCII 新增的字符主要用来支持部分欧洲国家所使用的语言,例如德语、葡萄牙语和西班牙语
3、等 ISO8859另外定义了14个适用于不同文字的字符集(8859-2到8859-15),均共享0-127的ASCII码,只是每个字符集都包含了128-255的其他字符 ISO8859-2:中欧语言 ISO8859-3:南欧语言 ISO8859-4:北欧语言 ,字符集与字符编码,GB2312 1981年,开始使用国家标准信息交换用汉字编码字符集基本集,简称GB2312 GB2312使用双字节编码,包含7445个字符。对汉字分成两级,一级为3755个常用字,二级为3008个次常用字,还收录了682个其他字符 GB2312主要应用在中国大陆和新加坡,兼容ASCII GBK 在GB2312的基础上又
4、进行了扩充。在1995年,推出了汉字内码扩展规范,简称GBK GBK收录了21886个汉字和图形符号,其中汉字21003个,图形符号883个,并且向下与GB2312编码完全兼容,字符集与字符编码,GB18030 GB18030-2000编码标准是由信息产业部和国家质量技术监督局在2000年联合发布的 在GBK编码标准的基础上进行扩充,增加了一些新的字符,特别是一些少数民族使用的字符 主要目的是为了解决一些生、偏、难字的问题 BIG5 BIG5又称为大五码,是针对繁体汉字的汉字编码,目前广泛应用在在台湾、澳门和香港地区 BIG5也是双字节编码,一共收录了5401个常用字和7652个次常用字,字符
5、集与字符编码,Unicode 1991年Unicode把世界上几十种文字整合在一个字符集中,Unicode中每个字符都有一个唯一的数字进行表示 现在Unicode已被广泛使用,Java、WindowsXP、和MS Office等软件内部都使用了Unicode作为内码 目前已经定义了40000多个不同Unicode字符,剩余的留给将来扩展使用。其中20000个字符用于汉字,11000左右个用于韩语音节。同样兼容ASCII,字符集与字符编码,UTF-8 UTF是Unicode/UCS Transformation Format (统一字符集/统一字符编码转换格式)的缩写 UTF就是Unicode的
6、一种字符编码(转换)方法。Unicode组织推荐使用的是UTF-8和UTF-16,UTF-8是一种变长的编码方式,也是当前Unicode最常用的一种字符编码(转换)方法,字符集与字符编码,使用Unicode编码,一个英文字符要用两个字节,在Internet上,大多数信息使用英文表示的,如果采用Unicode编码,将会使数据量增加一倍。为了减少存储和传输英文字符数据的数据量,可以使用UTF-8编码 因为中文字符的Unicode编码在0 x0800与0 xffff之间,所以数据如果是中文,采用UTF-8编码,一个中文字符将占用3个字节空间,数据量会增加50%,中文乱码解决方法,JSP文件的中文乱码
7、问题 Servlet的中文乱码问题 表单处理的中文乱码问题 Struts 2的中文乱码问题,中文乱码解决方法,JSP文件的中文乱码问题 通过浏览器调用JSP页面,在浏览器中所有的中文内容出现乱码 解决方法, 或者 ,中文乱码解决方法,Servlet的中文乱码问题 通过浏览器调用Servlet,Servlet在浏览器中显示的内容出现乱码 解决方法:在Servlet使用response对输出内容之前,指定字符类型,response.setContentType(“text/html;charset=utf-8”);,中文乱码解决方法,POST表单传递参数乱码 通过JSP页面、HTML页面或者Ser
8、vlet中的表单元素提交参数给对应的JSP页面或者Servlet,而JSP页面或者Servlet接收的中文参数值乱码 解决方法:在接收POST 提交的参数之前,设定接收参数的内容使用UTF-8编码 更好的解决方法,就是使用过滤器技术,在接收参数之前,设定传递的参数内容的编码是UTF-8,request.setCharacterEncoding(UTF-8);,中文乱码解决方法,GET表单传递参数乱码 可以通过GET方式传递表单参数,还可以使用链接方式传递参数,这种方法本质上还是GET方式。如果传递参数的值是中文,也会出现乱码 解决方法一:修改Tomcat的server.xml文件 解决方法二:
9、程序中进行编码转换处理,String name=request.getParameter(name); byte b=name.getBytes(iso-8859-1); name=new String(b,utf-8); out.println(name);,中文乱码解决方法,Struts 2的中文乱码问题 在struts.xml中配置struts.i18n.encoding常量, ,小结,常见的中文字符编码有哪些,有什么区别? 如何解决表单提交中的中文乱码问题?,什么是过滤器,过滤器是驻留在服务器端的Web组件,它可以截取客户端和服务器目标资源之间的请求和响应信息,并对这些信息进行处理 过
10、滤器是请求到达一个目标资源前的预处理程序,和/或响应离开目标资源后的后处理程序 利用过滤器可以实现多种功能,例如编码转化、数据过滤和替换、身份验证、数据加密、数据压缩、日志记录等,过滤器的工作原理,过滤器,过滤器的工作原理,过滤器链 对于任意请求和任意响应项目中任意过滤器都执行过滤操作吗? 请求与响应时各把过滤器从头至尾执行一遍吗? 各过滤器的执行顺序如何指定呢?,过滤器的工作原理,定义过滤器Filter1和Filter2,public class Filter1 implements Filter public void init(FilterConfig arg0) throws Serv
11、letException public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException System.out.println(before filter1); chain.doFilter(request, response); System.out.println(after filter1); public void destroy() ,public class Filter2 implements
12、 Filter public void init(FilterConfig arg0) throws ServletException public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException System.out.println(before filter2); chain.doFilter(request, response); System.out.println(after filter2);
13、 public void destroy() ,过滤器的工作原理,在web.xml中配置过滤器Filter1和Filter2, filter1 cn.jbit.filter.Filter1 filter1 /* filter2 cn.jbit.filter.Filter2 filter2 /* ,过滤器接口,Filter接口 任何一个过滤器必须要实现javax.servlet.Filter接口 Filter 接口包含以下方法,Filter 接口,init(),doFilter(),destroy(),过滤器接口,Filter接口 init(FilterConfig filterConfig)
14、Web容器调用该方法来初始化过滤器 容器在调用该方法时,向过滤器传递FilterConfig对象 利用该对象可以得到ServletContext对象,以及在web.xml中配置的过滤器初始化参数 doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 可以调用chain.doFilter()将请求传给下一个过滤器或目标资源 可以直接向客户端返回响应信息 可以利用RequestDispatcher的forwrard()和include()以及HttpServletResponse的sendRedi
15、rect()将请求转向其他资源 destroy() 销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为null,过滤器接口,FilterChain 接口 FilterChain 接口用于调用过滤器链的一系列过滤器 过滤链,在Web应 用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器 这个顺序的设置是在web.xml中完成的,其中的先后顺序指定了这个顺序 调用FilterChain的唯一方法doFilter(ServletRequest, SerletResponse) 就可以传递到链中的下一个过滤器,过滤器接口,Fil
16、terConfig接口 在初始化过程中,容器使用 FilterConfig 将信息传递给过滤器 FilterConfig 接口包含以下方法,getFilterName(),getInitParameter(),getInitParameterNames(),getServletContext(),FilterConfig,开发字符编码过滤器,使用Servlet进行登录验证,无法正确识别和显示中文 可以在Servlet中通过使用以下语句进行处理,但作用仅限于当前Servlet 通过Filter进行处理,可以作用于多个Servlet,request.setCharacterEncoding(“ut
17、f-8) ; response.setContentType(text/html;charset=utf-8);,开发字符编码过滤器,public class EncodingFilter implements Filter FilterConfig filterConfig; String encoding; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException String contentTy
18、pe = text/html;charset=+encoding; response.setContentType(contentType); request.setCharacterEncoding(encoding); chain.doFilter(request, response); public void init(FilterConfig filterConfig) throws ServletException this.filterConfig = filterConfig; encoding = filterConfig.getInitParameter(encoding);
19、 if (encoding = null) encoding = gbk; public void destroy() filterConfig = null; ,开发字符编码过滤器,读取初始化参数,进行编码处理,开发字符编码过滤器, encoding cn.jbit.filter.EncodingFilter encoding utf-8 encoding /* ,配置字符编码过滤器,指定初始化参数,提高灵活性,练习开发字符编码过滤器,需求说明: 开发字符编码过滤器,解决中文乱码问题 实现步骤 参考本专题实现步骤和代码,完成时间:20分钟,共性问题集中讲解,常见调试问题及解决办法 代码规范问
20、题,共性问题集中讲解,开发权限控制过滤器,用户必须登录才能访问网站资源,如果直接访问网站资源将重定向到登陆页面,从而提高网站安全性 使用过滤器进行权限验证 如果访问登录页面,或者提交登录,则不进行过滤 其他情况都要判断是否登录,如果没有登录则重定向到登录页面,开发权限控制过滤器,public class VerifyFilter implements Filter public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, Servle
21、tException HttpServletRequest httpreq = (HttpServletRequest) request; HttpServletResponse httpresp = (HttpServletResponse) response; HttpSession session = httpreq.getSession(); String path1 = httpreq.getRequestURI(); int n1 = path1.indexOf(/login/login.jsp); String path2 = httpreq.getServletPath();
22、int n2 = path2.indexOf(servlet/Login); if (n1 != -1 | n2 != -1) chain.doFilter(request, response); else String username = (String) session.getAttribute(username); if (username = null) httpresp.sendRedirect(/filter/login/login.jsp); ,开发权限控制过滤器,开发权限控制过滤器, Verify cn.jbit.filter.VerifyFilter Verify /* ,
23、配置权限控制过滤器,练习开发权限控制过滤器,需求说明: 开发权限控制过滤器,使用户必须登录才可以访问网站资源,否则将重定向到登陆页面 实现步骤 参考本专题实现步骤和代码,完成时间:20分钟,共性问题集中讲解,常见调试问题及解决办法 代码规范问题,共性问题集中讲解,开发字符替换过滤器,需要对输入的中“” 、“”、“ ”等字符进行替换。可以使用过滤器完成该功能,HttpServletRequest类并没有提供对请求信息进行修改的setXXX()方法,所以虽然过滤器可以截取到请求数据却无法修改 虽然不能直接改变请求对象的状态,但可以利用请求的包装类(wrapper)来间接改变请求数据 请求包装类的构
24、造方法中接受真正的请求对象,然后利用该对象的方法完成自己需要实现的方法 有了包装类,要改变请求信息就非常简单了,只需要编写一个包装类的子类,然后覆盖想要修改的方法即可 在过滤器的doFilter方法中,需要构造一个包装类的子类的实例,并作为参数传递给Chain.doChain()方法,开发字符替换过滤器,开发字符替换过滤器,public class MyRequestWrapper extends HttpServletRequestWrapper public String getParameter(String str) String param = super.getParameter(str); return t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年版音像制品出版与销售合同
- 2024年度环保项目合作开发与技术转让合同
- 二零二四年度版权购买合同标的
- 2024年度酒店厨房设备采购合同
- 二零二四年度物业管理服务合同(新版本)
- 2024年度数据处理与分析合同协议书
- 2024版设备租赁合同租赁物详细描述及其规定
- 2024年度电竞游戏内容制作合同
- 2024版大学校园信息安全评估与维护合同
- 搬运安全协议书
- 管工常用工具及基本操作课件
- 海康威视-视频监控原理培训教材课件
- 输煤系统配煤优化qc成果报告运行四值
- 江苏省质量通病防治手册
- 三级医院评审标准实施细则解读课件
- 激光切割加工的价格
- 精装修总包和土建总包施工界面的划分规定
- 卓越中层管理培训实务PPT培训课件
- 稍复杂的分数乘法实际问题-完整版获奖课件
- 华北理工大学生物药剂学与药物动力学教案
- 小学语文人教二年级上册(统编)第五单元-寒号鸟第二课时教学设计
评论
0/150
提交评论