Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为一个特定的servlet应用过滤器?_Java_Servlets_Servlet Filters_Web.xml - Fatal编程技术网

Java 如何为一个特定的servlet应用过滤器?

Java 如何为一个特定的servlet应用过滤器?,java,servlets,servlet-filters,web.xml,Java,Servlets,Servlet Filters,Web.xml,在我的聊天应用程序中,我有五个servlet。我需要为一个servlet应用过滤器 我的过滤器是 package com.tps.flexchat.action; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; im

在我的聊天应用程序中,我有五个servlet。我需要为一个servlet应用过滤器

我的过滤器是

package com.tps.flexchat.action;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * Servlet Filter implementation class EncodingFilter
 */
public class EncodingFilter implements Filter {
    private String encoding = "UTF-8";
    private FilterConfig filterConfig;
    /**
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
     */
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    /**
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
     */
    public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {

        resp.setCharacterEncoding("encoding");
        resp.setContentType("encoding");
                    req.setCharacterEncoding(encoding);
        chain.doFilter(req, resp);

        System.out.println("filter -------> :"+encoding );
    }

    /**
     * @see javax.servlet.Filter#destroy()
     */
    public void destroy() {
    }

}
web.xml中的映射将是

<filter>
    <display-name>EncodingFilter</display-name>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.tps.flexchat.action.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

提前感谢….

您可以更改过滤器路径:

更改为与servlet相同的路径

<filter>
    <display-name>EncodingFilter</display-name>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.tps.flexchat.action.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/SendMessageAction/</url-pattern>
</filter-mapping>

编码滤波器
编码滤波器
com.tps.flexchat.action.EncodingFilter
编码滤波器
/SendMessageAction/

您还可以通过引用servlet名称而不是url模式,将筛选器应用于特定servlet。如果您的servlet是这样声明的:

<servlet>
    <servlet-name>SendMessageAction</servlet-name>
    <servlet-class>com.tps.flexchat.action.SendMessageAction</servlet-class>
</servlet>

SendMessageAction
com.tps.flexchat.action.SendMessageAction
您应该能够使用以下筛选器映射:

<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <servlet-name>SendMessageAction</servlet-name>
</filter-mapping>

编码滤波器
SendMessageAction

为什么不将与Servlet相同的路径应用到您的过滤器上?谢谢您的回复…您能给我代码吗?您的Servlet路径将是web.xml,类似这样:Servlet/path/这是正确的兄弟吗/SendMessageAction?/SendMessageAction/?不错,我不知道!我喜欢这种方法,因为它更直接。
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <servlet-name>SendMessageAction</servlet-name>
</filter-mapping>