package filter;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
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.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter("/submit_comment")
public class submitcommentfilter implements Filter {
private List<String> dirtyWords = Arrays.asList("haha", "lala", "bubu");
public void init(FilterConfig config) throws ServletException {
// 初始化过滤器
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String comment = req.getParameter("comment");
if (comment != null) {
// 对参数值进行解码
comment = java.net.URLDecoder.decode(comment, "UTF-8");
}
if (hasDirtyWords(comment)) {
res.setContentType("text/html; charset=UTF-8");
res.getWriter().write("您提交的评论含有敏感词汇,请重新输入。");
} else {
// 执行下一个过滤器或目标资源
chain.doFilter(request, response);
}
}
public void destroy() {
// 销毁过滤器
}
private boolean hasDirtyWords(String comment) {
for (String dirtyWord : dirtyWords) {
if (comment != null && comment.indexOf(dirtyWord) != -1) {
return true;
}
}
return false;
}
}
你的字典不就是英文的
单行示例,多行示例:
//单行示例: package org.springframework.util; /** Miscellaneous {@link String} utility methods. */ public abstract class StringUtils { //多行示例: package java.lang; /** Class {@code Object} is the root of the class hierarchy. Every class has {@code Object} as a superclass. All objects, including arrays, implement the methods of this class. */ public class Object {}
在注释中出现以@***被称之为Javadoc文档标记,是JDK定义好的,如@author、@version、@since、@see、@link、@code、@param、@return、@exception、@throws等。
@link的使用语法{@link 包名.类名#方法名(参数类型)},其中当包名在当前类中已经导入了包名可以省略,可以只是一个类名,也可以是仅仅是一个方法名,也可以是类名.方法名,使用此文档标记的类或者方法,可用通过按住Ctrl键+单击 可以快速跳到相应的类或者方法上,解析成html其实就是使用< code> 包名.类名#方法名(参数类型)< /code>
@link示例
// 完全限定的类名 {@link java.lang.Character} // 省略包名 {@link String} // 省略类名,表示指向当前的某个方法 {@link #length()} // 包名.类名.方法名(参数类型) {@link java.lang.String#charAt(int)}
{@code text} 会被解析成<code> text </code>
将文本标记为代码样式的文本,在code内部可以使用 < 、> 等不会被解释成html标签, code标签有自己的样式。
一般在Javadoc中只要涉及到类名或者方法名,都需要使用@code进行标记。
详细描述一般用一段或者几个锻炼来详细描述类的作用,详细描述中可以使用html标签,如<p>、<pre>、<a>、<ul>、<i>等标签, 通常详细描述都以段落p标签开始。
详细描述和概要描述中间通常有一个空行来分割。
package org.springframework.util;
/**
Miscellaneous {@link String} utility methods.
<p>Mainly for internal use within the framework; consider
<a href="http://commons.apache.org/proper/commons-lang/">Apache's Commons Lang</a>
for a more comprehensive suite of {@code String} utilities.
<p>This class delivers some simple functionality that should really be
provided by the core Java {@link String} and {@link StringBuilder}
classes. It also provides easy-to-use methods to convert between
delimited strings, such as CSV strings, and collections and arrays.
*/
public abstract class StringUtils {
一般段落都用p标签来标记,凡涉及到类名和方法名都用@code标记,
凡涉及到组织的,一般用a标签提供出来链接地址。
一般类中支持泛型时会通过@param来解释泛型的类型。
/**
@param <E> the type of elements in this list
*/
public interface List<E> extends Collection<E> {}
详细描述后面一般使用@author来标记作者,如果一个文件有多个作者来维护就标记多个@author,@author 后面可以跟作者姓名(也可以附带邮箱地址)、组织名称(也可以附带组织官网地址)。
// 纯文本作者
@author Rod Johnson
// 纯文本作者,邮件
@author Igor Hersht, igorh@ca.ibm.com
// 超链接邮件 纯文本作者
@author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>
// 纯文本邮件
@author shane_curcuru@us.ibm.com
// 纯文本 组织
@author Apache Software Foundation
// 超链接组织地址 纯文本组织
@author <a href="https://jakarta.apache.org/turbine"> Apache Jakarta Turbine</a>
@see 一般用于标记该类相关联的类,@see即可以用在类上,也可以用在方法上。
/**
@see IntStream
@see LongStream
@see DoubleStream
@see <a href="package-summary.html">java.util.stream</a>
*/
public interface Stream<T> extends BaseStream<T, Stream<T>> {}
对于这个问题,可能是因为过滤器使用的编码格式不支持中文字符,需要对该过滤器进行修改,使其支持中文字符。
具体步骤如下: 1. 确认当前过滤器使用的编码格式,一般为UTF-8编码。 2. 修改过滤器的解析规则,使其支持中文字符。可以使用Java的正则表达式来完成这个任务。 3. 确保过滤器在处理中文字符时不出现乱码,可以在过滤器中添加字符编码转换的代码。
简单的代码实现如下:
public class ChineseFilter implements Filter {
private static String encoding = "UTF-8";
public void init(FilterConfig config) throws ServletException {
//初始化配置
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(encoding); //设置请求编码
response.setCharacterEncoding(encoding); //设置响应编码
String input = request.getParameter("input"); //获取待过滤字符串
if(input != null){
Pattern pattern = Pattern.compile("[^\u4e00-\u9fa5]"); //匹配所有非中文字符
Matcher matcher = pattern.matcher(input);
input = matcher.replaceAll(""); //过滤掉所有非中文字符
request.setAttribute("filteredInput", input); //将过滤后的字符串存入request域中
}
chain.doFilter(request, response); //继续执行过滤器链
}
public void destroy() {
//销毁过滤器
}
}
在以上代码中,我们使用了Java的正则表达式来匹配所有非中文字符,并调用Matcher的replaceAll方法将其替换成空字符串,以达到过滤的效果。最后将过滤后的字符串存入request域中,以便后续使用。
同时需要注意的是,为了避免出现乱码,我们需要在过滤器中对请求和响应的字符编码进行设置。在以上代码中,我们使用了UTF-8编码来设置字符编码,你可以根据实际情况进行修改。