2012-11-22 24 views
6

Nella chat delle mie applicazioni ho cinque servlet. Devo applicare il filtro per un singolo servlet.Come applicare il filtro per un particolare servlet?

mio filtro è,

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() { 
    } 

} 

La mappatura nel web.xml sarà

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

ho bisogno di applicare il filtro EncodingFilter solo a questo servlet 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()); 

     } 

    } 

Grazie In anticipo ....

+1

Perché non applicare lo stesso percorso del filtro come Servlet? –

+0

Grazie per la risposta ... puoi darmi il codice? –

+0

Il percorso servlet sarà in web.xml, qualcosa del genere: /percorso/

risposta

5

È possibile modificare il percorso di filtro:

Modificare il <url-pattern> per lo stesso percorso come il tuo 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> 
6

è inoltre possibile applicare un filtro a una servlet specifica facendo riferimento al nome servlet, invece di un URL modello. Se il servlet è dichiarato così:

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

Si dovrebbe essere in grado di utilizzare il seguente mappatura del filtro:

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

Grazie mille per il risultato ... –

+1

Bello, non lo sapevo! –

Problemi correlati