2012-11-22 3 views
6

В чате моих приложений у меня есть пять сервлетов. Мне нужно применить фильтр для одного сервлета.Как применить фильтр для одного сервлета?

Мой фильтр,

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 сервлет

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()); 

     } 

    } 

Спасибо заранее.

+1

Почему бы не применить тот же самый путь к фильтру, как ваш сервлет? –

+0

Спасибо за ответ ... Может, пожалуйста, дайте мне код? –

+0

Ваш путь сервлета будет в web.xml, что-то вроде этого: Servlet/path/

ответ

5

Вы можете изменить путь фильтра:

Изменение <url-pattern> к тому же пути, как сервлет

<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> 
6

Вы также можете применить фильтр к конкретному сервлета, ссылаясь на имя сервлета вместо URL шаблон. Если ваш сервлет объявлен так:

<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> 
+0

Большое спасибо и получил результат .... –

+1

Ничего, я не знал об этом! –

Смежные вопросы