目录

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

​​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

任务卡_06-JavaWEB_Filter和Listener_敏感词

任务卡_06-JavaWEB_Filter和Listener_开课吧新职课_02

任务卡_06-JavaWEB_Filter和Listener_敏感词_03

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

任务卡_06-JavaWEB_Filter和Listener_Javaweb_04

任务卡_06-JavaWEB_Filter和Listener_任务卡_05

4,引入tomcat外部依赖包

任务卡_06-JavaWEB_Filter和Listener_Javaweb_06

 

任务卡_06-JavaWEB_Filter和Listener_开课吧新职课_07

4.2 数据库设计

任务卡_06-JavaWEB_Filter和Listener_任务卡_08

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

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

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

任务卡_06-JavaWEB_Filter和Listener_敏感词_09

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

任务卡_06-JavaWEB_Filter和Listener_Javaweb_10

任务卡_06-JavaWEB_Filter和Listener_过滤器_11

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

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

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

任务卡_06-JavaWEB_Filter和Listener_敏感词_12

任务卡_06-JavaWEB_Filter和Listener_过滤器_13

4.5 评论时过滤敏感词

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

任务卡_06-JavaWEB_Filter和Listener_Javaweb_14

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);
}

任务卡_06-JavaWEB_Filter和Listener_敏感词_15

5,运行结果展示

任务卡_06-JavaWEB_Filter和Listener_开课吧新职课_16

任务卡_06-JavaWEB_Filter和Listener_Javaweb_17

任务卡_06-JavaWEB_Filter和Listener_开课吧新职课_18

 

任务卡_06-JavaWEB_Filter和Listener_敏感词_19

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>

任务卡_06-JavaWEB_Filter和Listener_过滤器_20

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

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

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

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

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


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

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

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