刚进入filter的学习,一开始认为这东西也就不过如此了。

但是,我必须得承认,我错了!

刚开始学的时候,老师让我们自己做一个小程序。

就是:输入一串字符,点击发送,在另一个窗口显示。要求是把字符串中的 'a' 字符转换成 '*' 输出、例子:“string”——》"*tring"。

我一想,很简单嘛。过一会就写出来了。

但是,就在运行的时候,出了问题。输入一串字符,他并没有立刻转换出来。要后退,再进入才能转换。这就是说,我这一次输入"string"它并不会立刻转换。我需要后退一步,在进入,才会转换成"*tring"。

问题很简单。就是在用户输入后,要跳转到另一个页面。过程是:1. 进入"web.xml"这个文件,其中有filter过滤器。2. 进入过滤器,查找是否有值,(答案是没有的因为这个时候我并没有将用户输入的值写入到session或者application中。)有值的话判断值中是否包含'a',有则替换为'*'。3. 然后进入显示值处理的Servlet类,这里将用户数据处理,并存入session或者application中。4. 然后再跳转到显示页面。

从这个流程就可以看出问题了。第二步,没有值,所以没办法进行过滤。但是当循环一次后,到第二步这里,它就有值了,过滤器生效了。但是,这里过滤的字符串是上一次输入的。

所以我们需要在第二步的时候将用户输入的值取到。因此我尝试了使用request方法,将用户输入的值取出。

我在之前认为这是行不通的,因为request传值只能在下一个页面进行接收,但是,没想到在filter中也能通过new出request对象的方式进行操作。

下面上代码:

Filter

package servlet;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class T implements Filter{@Overridepublic void destroy() {// TODO Auto-generated method stub
        }@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain nextPage ) throws IOException, ServletException {/* 取得所需要的内置对象*/// requestHttpServletRequest request = (HttpServletRequest)req;// sessionHttpSession session = request.getSession();        /*** 尝试直接拿到用户输入的值*/String yh = req.getParameter("ping");                String a = null;if(yh!=null){if(yh.indexOf('a')>=0){a = yh.replace('a', '*');}}        session.setAttribute("a", a);    nextPage.doFilter(req, resp);}@Overridepublic void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub
        }}

Servlet

package servlet;import java.io.IOException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session;public class P extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse resp){this.doPost(req, resp);}public void doPost(HttpServletRequest req, HttpServletResponse resp){try {            HttpSession session = req.getSession();                        session.getAttribute("a");            req.getRequestDispatcher("/page/3.jsp").forward(req, resp);} catch (ServletException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}}

转载于:https://www.cnblogs.com/ygnew/p/4422125.html

关于Servlet中filter过滤器的小问题相关推荐

  1. Java Servlet中Filter过滤器的原理以及使用方式

    详细介绍了Java Web Servlet中的Filter过滤器的原理以及常见用法. 文章目录 1 Filter接口 1.1 过滤器的生命周期 1.2 doFilter过滤方法 2 Filter的使用 ...

  2. java 过滤器 中文_java中Filter过滤器解决中文乱码办法

    java中Filter过滤器解决中文乱码办法 发布时间:2020-04-07 10:19:09 来源:亿速云 阅读:16 作者:小新 这篇文章主要为大家详细介绍了java中Filter过滤器解决中文乱 ...

  3. java中servlet filter_lua学习笔记(二)仿java servlet中Filter功能

    2)代码 Filter.lua--[[ 过滤器接口 ]]-- local FilterChain = require("FilterChain") local Filter = { ...

  4. 【Servlet】Filter过滤器详解、使用示例

    Filter过滤器讲解 定义 过滤器处于浏览器与servlet之间,是一个实现了 javax.servlet.Filter 接口的 Java 类 客户端发送的请求.服务器发送的资源,需要通过过滤器,才 ...

  5. jsp servlet中的过滤器Filter配置总结(转)

    在Java web开发中常会使用到功能强大的过滤器,他毕竟能给我们带来很大的方便,但是针对过滤的资源我们需要详细的了解他们在web.xml中的配置信息.这个根据几种常用的不同情况进行了总结: 1.如果 ...

  6. Servlet之Filter过滤器

    过滤器是一个实现了javax.servlet.Filter 接口的 Java 类.javax.servlet.Filter 接口定义了三个方法: 1    public void doFilter ( ...

  7. servlet中filter的的异步问题以及JSP与servlet配合时filter的注意

    这是今天写的时候遇到的问题,首先说说JSP与servlet配合时的问题 建立了一个filter,验证session里的username属性,如果为空则认为未登陆,返回到登陆页面,而登陆是JSP做表现层 ...

  8. java脏字过滤_分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤...

    案例1. 利用Servlet的过滤器Filter进行完成脏话过滤 package cn.javabs.filter; import java.io.IOException; import javax. ...

  9. java脏话模糊对比_分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤...

    案例1. 利用Servlet的过滤器Filter进行完成脏话过滤 package cn.javabs.filter; import java.io.IOException; import javax. ...

最新文章

  1. http请求gmt时间_从Chrome源码看HTTP
  2. tomcat catalina.home和catalina.base区别(转)
  3. Libra教程之:运行自定义move modules
  4. 解决 : Shell 脚本 $‘\r‘: command not found 问题
  5. 机器人J中WPR_机器人经颅磁刺激(Robotized TMS)技术知多少?
  6. 现身说法,给职场新人的投资理财建议
  7. 别再把比特币和区块链划等号了,求求你们了!
  8. xmind怎样画流程图_老师是怎样上网课的?
  9. 2021安新中学高考成绩查询,石家庄二中雄安校区•河北安新中学2019届冲刺高考百日誓师大会...
  10. 2.1 LibCurl编程流程(转)
  11. 【转】javascript代码混淆和压缩
  12. [ openwrt ] 添加一个通过GPIO控制的LED
  13. 混沌图像---陈氏吸引子的飞蛾
  14. 误关闭阿里云主机的网络后如何进行恢复
  15. git 简单命令使用
  16. k8s源码分析 pdf_我是怎么阅读kubernetes源代码的?
  17. 一起talk C栗子吧(第一百八十七回:C语言实例--反余弦函数 )
  18. 让swfobject.js 支持透明的flash
  19. 微观经济学知识点(七)
  20. 指纹锁与数字密码锁哪个更安全靠谱?

热门文章

  1. Web development mistakes
  2. 2006最新版个人所得税计算器
  3. LaneAF | 利用Affinity Field聚类进行车道线实例分割
  4. Transformer在计算机视觉领域走到哪了?
  5. 仅用语音生成人体姿态,代码已开源
  6. 深度学习图像超分辨率最新综述:从模型到应用
  7. 【python教程入门学习】普通人学python有意义吗
  8. 前沿 | 加州理工大学什么是Imitation Learning(模仿学习)
  9. 《Python编程从入门到实践》记录之第7章 用户输入(input)和while 循环总结(思维导图)
  10. linux ntfs 3g6,CentOS6挂载读写NTFS分区(ntfs-3g)