过滤器案例之编码问题处理、代理对象的使用、过滤器案例之无效数据的过滤
来源:互联网 发布:linux vi 中替换命令 编辑:程序博客网 时间:2024/06/09 20:06
一、过滤器-编码统一处理
几乎每一个Servlet都要涉及编码处理:处理请求数据中文问题!【GET/POST】
每个servlet都要做这些操作,把公用的代码抽取-过滤器实现!
1、代码实现思路:
1.Login.jsp 登陆,输入“中文”
2.LoginServlet.java 直接处理登陆请求
3.EncodingFilter.java 过滤器处理请求数据编码:GET/POST
2、代码实现:
1)过滤器:
/** * 编码处理统一写到这里(servlet中不需要再处理编码) * @author *** */public class EncodingFilter implements Filter { // 过滤器业务处理方法:处理的公用的业务逻辑操作 @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { // 转型 final HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; // 一、处理公用业务 request.setCharacterEncoding("UTF-8"); // POST提交有效 response.setContentType("text/html;charset=UTF-8"); /* * 出现GET中文乱码,是因为在request.getParameter方法内部没有进行提交方式判断并处理。 * String name = request.getParameter("userName"); * * 解决:对指定接口的某一个方法进行功能扩展,可以使用代理! * 对request对象(目标对象),创建代理对象! */ HttpServletRequest proxy = (HttpServletRequest) Proxy.newProxyInstance( request.getClass().getClassLoader(), // 指定当前使用的累加载器 new Class[]{HttpServletRequest.class}, // 对目标对象实现的接口类型 new InvocationHandler() { // 事件处理器 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 定义方法返回值 Object returnValue = null; // 获取方法名 String methodName = method.getName(); // 判断:对getParameter方法进行GET提交中文处理 if ("getParameter".equals(methodName)) { // 获取请求数据值【 <input type="text" name="userName">】 String value = request.getParameter(args[0].toString()); // 调用目标对象的方法 // 获取提交方式 String methodSubmit = request.getMethod(); // 直接调用目标对象的方法 // 判断如果是GET提交,需要对数据进行处理 (POST提交已经处理过了) if ("GET".equals(methodSubmit)) { if (value != null && !"".equals(value.trim())){ // 处理GET中文 value = new String(value.getBytes("ISO8859-1"),"UTF-8"); } } return value; } else { // 执行request对象的其他方法 returnValue = method.invoke(request, args); } return returnValue; } }); // 二、放行 (执行下一个过滤器或者servlet) chain.doFilter(proxy, response); // 传入代理对象 } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { }}
2)过滤器配置:
<!-- 编码处理过滤器配置 --> <filter> <filter-name>encoding</filter-name> <filter-class>cn.itcast.a_loginFilter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3)servlet:
public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取请求数据 String name = request.getParameter("userName"); System.out.println("用户:" + name); }
二、过滤器-无效数据过滤
模拟:论坛过滤敏感词汇!
1、实现思路:
1)Dis.jsp 讨论区页面
2)DisServlet.java 处理提交
—》 获取请求参数
—》 保存到request域
—》 跳转dis.jsp 【从request取数据显示(处理后)】
3)DataFilter.java 过滤器
—》编码
—》无效数据处理
即: 在上一个案例基础上,再添加无效数据过滤的相关代码!
2、代码实现:
1)JSP引入ckeditor组件:客户端组件,便于用户输入内容!
<!-- 引入ckeditor组件(给用户输入提供方便) --> <script src="${pageContext.request.contextPath }/ckeditor/ckeditor.js"></script> <link rel="stylesheet" href="${pageContext.request.contextPath }/ckeditor/samples/sample.css"><body> ${requestScope.content } <form name="frmDis" action="${pageContext.request.contextPath }/dis" method="post"> 发表评论: <textarea class="ckeditor" rows="6" cols="30" name="content"></textarea> <br/> <input type="submit" value="评论" > </form> </body>
2)在上个过滤器案例的基础上,增加如下代码:
// 判断如果是GET提交,需要对数据进行处理 (POST提交已经处理过了) if ("GET".equals(methodSubmit)) { if (value != null && !"".equals(value.trim())){ // 处理GET中文 value = new String(value.getBytes("ISO8859-1"),"UTF-8"); } } // 中文数据已经处理完: 下面进行无效数据过滤 //【如果value中出现dirtyData中数据,用****替换】 for (String data : dirtyData) { // 判断当前输入数据(value), 是否包含无效数据 if (value.contains(data)){ value = value.replace(data, "*****"); } } // 处理完编码、无效数据后的正确数据 return value; } else {
1 0
- 过滤器案例之编码问题处理、代理对象的使用、过滤器案例之无效数据的过滤
- JavaWeb之过滤器实现统一编码案例
- 过滤器的简单使用案例
- 编码过滤器的步骤及过滤器的生命周期和案例
- 过滤器filter使用之案例二
- 图书管理系统之过滤器--处理用户信息的过滤和订单数据的处理
- Jquery过滤器的基本使用案例
- Fileter过滤器的使用及小案例
- 【过滤器】(4)过滤器的应用案例:留言板敏感词过滤技术(包装模式)
- 过滤器Filter的案例1——全站响应编码和缓存问题
- 过滤器Filter--编码转换案例
- JavaWeb之过滤器实现自动登录案例
- 过滤器Filter的案例3——解决全站的请求数据乱码问题
- 关于编码过滤的问题,这里使用在web.xml中添加过滤器的方法!
- 过滤器之登陆过滤
- JavaWeb-过滤器高级案例、URL过滤系统
- Jquery过滤器的基础入门案例
- 过滤器处理编码问题
- 微信小程序 更改navbar上面的文字呢
- Timesys Fedora18系统配置
- Mac下OpenCV的安装
- Android中ViewPager+Fragment懒加载问题解决方案Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案
- 组合算法
- 过滤器案例之编码问题处理、代理对象的使用、过滤器案例之无效数据的过滤
- Docker配置加速器
- caffe for windows的python接口学习(3):生成以原始图片作为输入的配置文件
- java基础学习第一天
- codeforces round 360 div2 C Chris and Roads
- centos下/etc/sysconfig/下找不到iptables文件
- 前后台交互的传参方式与大参数传递
- YOLOv2如何fine-tuning?
- android应用程序稳定性一点想法