任务卡_06-JavaWEB_Filter和Listener

目录

一,过滤器和监听器的使用

1,任务概述

2,任务过程

3,验收标准

4,编码过程

4.1 配置环境

4.2 数据库设计

4.3 实现登录和登录验证功能

4.4 限制积分合格的人方可下载

4.5 评论时过滤敏感词

5,运行结果展示

6,需要注意的点

6.1 注意getParameter与getAttribute区别!!!

6.2 显示评论时间,具体到秒

6.3 修改完数据库结构后一定要记得修改bean中的实体类!


完整项目地址Chapter7 · GoodbyeFirefly/JavaCourse - 码云 - 开源中国 (gitee.com) 

一,过滤器和监听器的使用

1,任务概述

现在公司为了能扩大收益面,将原来免费下载的资源修改为有偿下载,要 求用户在登录情况下,且个人积分在 100 分以上时,才可以下载资源(用户可 以通过充值来提高积分量),并且下载完成后,可以留言评论该资源,此时如 何保证用户发布的文字合理合法(不能包含敏感词)?

2,任务过程

  • 1. 配置所有请求执行过滤器
  • 2. 过滤器中添加用户非登录验证
  • 3. 用户登录情况下,查询其个人积分是否满足下载条件
  • 4. 下载完成后,用户留言评论,在过滤器中对留言内容进行敏感词过滤

3,验收标准

  • 下载请求时的验证效果
  • 输入敏感词后,替换成星号或直接让用户重新输入

4,编码过程

为了加快学习速度,目前将注意力放在任务卡最核心的地方,其余的细节部分尽量简化,有需要的同学酌情参考。

完整项目代码在这里

4.1 配置环境

老一套了,但是在自己完全搞熟之前还是一步一步来吧

1,创建web工程,记得在里面勾选tomcat server并填写相关信息,如果在创建项目时不填写,后面需要自己进行tomcat配置和导包(新版本的IDEA没有创建web application的选项,只能先创建Java项目,然后在support framework里选择并创建)

2,在web/WEB-INF下创建lib、classes。将所需的jar包粘贴在lib中,在project structure/modules/dependences中引入该目录。在project structure/modules/paths中修改编译文件的输出路径为classes

3,如果在创建项目时没有勾选tomcat配置,需要在edit configuration中进行配置,点击左上角选择tomcat服务器,重命名为当前项目名称

4,引入tomcat外部依赖包

 

4.2 数据库设计

4.3 实现登录和登录验证功能

和之前的任务卡实现过程类似,区别在于:

1,实现登录servlet时,根据账号密码查询用户存在,将用户相关信息返回,并存入session中;

2,添加了一个登录过滤器;

4.4 限制积分合格的人方可下载

用户登录后跳转到index.jsp页面,简单展示了用户名称、用户积分,以及下载链接(a标签展示)。

用户点击下载链接后,若积分大于100,则跳转到评论页面,否则跳回当前页面

4.5 评论时过滤敏感词

1,展示评论框和评论列表

2,发送评论时通过message请求完成(上图action=message),评论过滤需要针对该请求进行


    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        req.setCharacterEncoding("UTF-8");
        // 这里是getParameter不是getAttribute!!!
        String comment = req.getParameter("comment");
        User user = (User) req.getSession().getAttribute("userInfo");
        if(comment != null && user != null && user.getScore() > 100) {
            System.out.println("messageFilter2:" + comment);
            String[] sensitiveWord = {"滚", "爬", "fuck", "卧槽", "靠", "放屁", "炸弹"};
            // 遍历敏感词组的每个单词 若存在于评论中则将其替换为*
            for(String str : sensitiveWord) {
                StringBuilder sb = new StringBuilder();
                for(int i = 0; i < str.length(); i++) sb.append("*");
                comment = comment.replace(str, sb.toString());
            }
        } else if(user == null || (user != null && user.getScore() <= 100)) {
            // 避免积分低的用户登录后再直接跳转到信息界面
            resp.sendRedirect("login.jsp");
        }
        req.getSession().setAttribute("comment", comment);
        filterChain.doFilter(req, resp);
    }


5,运行结果展示

 

6,需要注意的点

6.1 注意getParameter与getAttribute区别!!!

getParameter是从页面输入中获取参数,比如form表单中的文本输入框等;

getAttribute要想获得数据,需要先用setAttribute存入;

6.2 显示评论时间,具体到秒

首先,数据库中评论表的时间属性是timestamp

其次,向数据库插入数据时需要用new Timestamp(new Date().getTime());

最后,显示时间时,修改展示格式

<li><g:formatDate value="${comment.time}" pattern="yyyy-MM-dd HH:mm:ss"></g:formatDate> </li>

6.3 修改完数据库结构后一定要记得修改bean中的实体类!

idea中的插件可以根据数据库表,直接生成实体类,但是存在以下几个问题:

1,包名不对。自动生成的类中,可以看到包名在飘红,修改为其所在包即可;

2,无构造方法。需要自己手动编写;

3,通过插件修改数据库的表结构后,记得重新生成实体类;


章节汇总在这里(づ ̄3 ̄)づ╭❤~@&再见萤火虫&【06-JavaWEB】


对学习Java感兴趣的同学欢迎加入QQ学习交流群:1126298731

有问题欢迎提问,大家一起在学习Java的路上打怪升级!(o゜▽゜)o☆[BINGO!]

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值