感谢你的不雅观察,感激你。
话不多说,开始今日的学习:
网络上好多平台都会有敏感词屏蔽,有些词语打出来会被和谐掉。
虽然说现在主见辞吐自由,但我大中华自古以来便是礼仪之邦,好多粗俗之语能不准许就不准许的好。
那这些词汇是如何屏蔽的呢?
利用昨天学的Filter过滤器手艺就能实现。
这便是1个很大略的form表单:
action:提交跳转的路径为wordServlet。
method:提交办法为get提交。
textarea:文本域,属性分别为列数、行数、称呼。
input type=\公众submit\公众:提交按钮
那么必定要有1个Servlet要和表单提交的路径对应,从而得到文本域中用户输入的数据。
①处理乱码问题
经由request的setCharcatierEncoding()方法设定字符集为utf-8,处理乱码问题。
②得到用户输入的数据
经由request的getParamter()方法得到用户输入的数据。
文本域对应的name为word,以是这里参数也为word。
固然依照实际情形,得到用户数据后,会将用户的批评展现在对应的批评区中。
我这边业务逻辑没有这样繁杂,就干脆用1个输出语句来代替了。
既然是要屏蔽敏感词汇,必定须要先断定哪些词算是敏感词,再以这些词汇当作标准当作屏蔽。
在web包下创建1个word包,专门寄存须要屏蔽的词汇文献,依照分类必定是有好多很文献的。
为了更好地测试,我写了1个豆豆团影视,将其设定为1级,究竟总不或许真的写那些敏感词。
好,敏感词汇准备好了,就要创建Filter过滤器和编写如何屏蔽的业务逻辑代码了。
起初要得到敏感词汇,在init()方法中实现该需求,由于代码太长欠好截图,故分红了两部分:
1得到words文献夹里的各个文献
①创建三个群集
前面也说了,敏感词有三个品级,就创建三个成员变量来专门寄存得到的词汇。
②得到words文献夹
在初始化方法init中,有1个参数FilterConfig。
利用它的getServlerContext()可以得到web利用中的servletcontext ,从而利用servletcontext接口的少许方法。
getRealPath()内里填入words包的相对路径,就能得到words这个包了。
③利用文献过滤器过滤文献
我们刚才将敏感词汇文献放入words这个包中了,内里有好多文献,为了防止被别的文献混入,我们只读取后缀名为“.txt”的文本文献。
利用FileFilter接口就能到达过滤文献的效益。
2得到words文献夹里的各个文献里的本色
代码接上图,加强for重复遍历上述过滤后的words文献夹:
①转换流与缓冲流
利用转换流在于其可以设立编码字符集:utf-8。
利用缓冲流在于可以1溜1溜地读。
同期也算是对这两种IO流的1个回顾与温习。
②迭代器读取文献
这便是IO流中的重点代码,1溜1溜地读取各个文献里的本色。
③切割字符串
字符串为1溜的本色:因此“|”为分开,前面为敏感词,后背为屏蔽品级。
以是利用split()方法来将其分开成1个数组,数组里0索引位为敏感词,1索引位为屏蔽品级。
④依照屏蔽品级分别存入对应群集
split[1]暗示的也便是屏蔽品级,trim()方法可以去除空格。
split[0]暗示的也便是敏感词本色,将其存入对应群集便可。
上述是对过滤器中init()方法里的代码编写,用于得到敏感词1共有哪些。
现在对doFilter()方法里的代码编写,用户得到用户输入的讯息,再进1步剖断是不是合乎哀求。
①处理乱码并得到用户数据
和在wordServlet中编写的代码雷同。
②遍历敏感词汇并与用户数据匹配
敏感词汇1共有三个级别,可以分别对应分别的处理办法,例如永久封号、封号7天,禁言……
现在究竟学习阶段,只遍历品级为1的群集,正则匹配波及到1个用具类Pattern:
compile(str):以遍历的敏感词为标准。
matcher(word):以上述标准匹配得到的用户数据。
经由matcher的find()方法可以剖断,若为true即暗示匹配,不合乎哀求。
③不合乎哀求反应并提示用户
在request域工具中设定1个名为msg的值,值为“批评本色不规范”,再跳转word.jsp页面。
终极在word.jsp中利用EL表达式得到request域工具中的数据。
${msg}得到的也便是③中设定的msg对应的值,如果用户输入的本色不规范,在word.jsp页面就会浮现警示讯息。
做个测试
豆豆团影视在前面已被我设立成了1级敏感词,以是在批评的韶光输入豆豆团影视,过滤器中会换取到。
从而跳转word.jsp页面并附带警示讯息。
嘻嘻嘻不为敏感词汇,则不受影响。
感激你的不雅观察。
如果可以的话,贫苦帮助点个赞,感激你。
如果喜好我的文章,请大家多多“关注”我吧,第一韶光获取最新资讯!