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

标签 java servlets servlet-filters web.xml

在 chat 我的应用程序中,我有五个 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>

我只需要将 EncodingFilter 过滤器应用于此 SendMessageAction servlet,

package com.tps.flexchat.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.genesyslab.platform.webmedia.protocol.FlexChatProtocol;
import com.tps.flexchat.Request.SendMessage;
import com.tps.flexchat.info.ApplicationInfo;
import com.tps.flexchat.info.CustomerInfo;

public class SendMessageAction extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private String msg;
    private String seckey;
    private String uid;
    private String sessionId;
    private int counter;
    private FlexChatProtocol protocol = null; 
    private SendMessage message;


    public SendMessageAction() {
        super();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

            msg = request.getParameter("message");
            seckey = request.getParameter("securekey");
            uid = request.getParameter("userId");
            sessionId = request.getParameter("sessionId");
            counter = 1;
            protocol = ApplicationInfo.flexProtocol;

            message = new SendMessage();
            message.send(msg, seckey, uid, sessionId, counter, protocol);

            CustomerInfo customer = ApplicationInfo.customerDetails.get(uid);

            out.print(customer.getMessage());

        }

    }

提前致谢....

最佳答案

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

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

您应该能够使用以下过滤器映射:

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

关于java - 如何为一个特定的 servlet 应用过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13509090/

相关文章:

java - 无法摆脱循环

javascript - 设置网络音频,多种声音,单独的gainNodes和全局LOW PASS滤波器?

java - 测试 TestNG 监听器

java - Matlab/Java API 回调

java - 如何在 Java 8 中使用自定义格式打印日期?

java - 如何从javascript调用servlet

java - 远程 MySQL DB 和 eclipse

java - Servlet doPost 方法

java - 将 web.xml 中的过滤器配置转换为 spring.xml

jsf-2 - 打开 Facelets 页面时删除 session 属性