目录
6.1 注意getParameter与getAttribute区别!!!
6.3 修改完数据库结构后一定要记得修改bean中的实体类!
一,过滤器和监听器的使用
1,任务概述
现在公司为了能扩大收益面,将原来免费下载的资源修改为有偿下载,要 求用户在登录情况下,且个人积分在 100 分以上时,才可以下载资源(用户可 以通过充值来提高积分量),并且下载完成后,可以留言评论该资源,此时如 何保证用户发布的文字合理合法(不能包含敏感词)?
2,任务过程
- 1. 配置所有请求执行过滤器
- 2. 过滤器中添加用户非登录验证
- 3. 用户登录情况下,查询其个人积分是否满足下载条件
- 4. 下载完成后,用户留言评论,在过滤器中对留言内容进行敏感词过滤
3,验收标准
- 下载请求时的验证效果
- 输入敏感词后,替换成星号或直接让用户重新输入
4,编码过程
为了加快学习速度,目前将注意力放在任务卡最核心的地方,其余的细节部分尽量简化,有需要的同学酌情参考。
完整代码正在整理,准备上传到gitee上,速度很快(相比于GitHub),但是一次只能上传20个文件,这里先记一下,后面补上。
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!]