为了练习使用struts 2,我正在使用struts2-archetype-starter maven arche类型。
我在尝试添加自己的过滤器时遇到了一个问题,希望有人能给我指明正确的方向。
我使用eclipse和maven进行构建,Tomcat 8.5作为本地服务器。
我已经能够设置一些基本的操作。我现在正试图添加一个过滤器来设置请求的编码,这样我就可以处理日文输入。为了做到这一点,我参考了这个关于过滤器的资源,来创建我自己的自定义过滤器,我在项目的web.xml文件中引用了这个资源。
过滤器参考来源。https:/www.oracle.comjavatechnologiesfilters.html
然而,当我试图访问我的项目的网址时,我得到一个404错误。
我试过在过滤器中添加断点,并在服务器上调试项目,但断点从未被击中。(否则我可以调试和使用断点)
在我的web.xml文件中,我添加了过滤器声明。
<filter>
<filter-name>MyEncoder</filter-name>
<filter-class>jono_group.mav_arch_2.filters.MyChaEnFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
</filter>
和这个过滤器映射
<filter-mapping>
<filter-name>MyEncoder</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
它们分别位于其他所有过滤器和过滤器映射的前面,目的是让它在过滤器链的前面执行。
使用上述过滤器和过滤器映射,maven构建(干净的包成功运行,没有报告错误。但我得到的是404。只要我删除这两个过滤器,404错误就会消失,我的操作也能如期进行。
如果有任何帮助,我将非常感激。
我的过滤器类如下。
package jono_group.mav_arch_2.filters;
import java.io.IOException;
import java.nio.file.DirectoryStream.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyChaEnFilter implements Filter
{
private FilterConfig filterConfig = null;
private String encoding;
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain) throws
IOException, ServletException {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws
ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
public void destroy() {
this.filterConfig = null;
}
@Override
public boolean accept(Object entry) throws IOException {
// TODO Auto-generated method stub
return false;
}
}
import java.nio.file.DirectoryStream.Filter
不是一个servlet过滤器。
从你提供的链接中,特别是从 编程过滤器 部分。
过滤器API是由
Filter
,FilterChain
和FilterConfig
接口在javax.servlet包中。
FilterChain
和 FilterConfig
正确导入。Filter
没有那么多。