2012-11-22 39 views
6

Trong ứng dụng trò chuyện của tôi, tôi đang có năm servlet.I cần phải áp dụng bộ lọc cho một servlet đơn.Làm cách nào để áp dụng bộ lọc cho một servlet cụ thể?

lọc của tôi là,

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

} 

Các bản đồ trong web.xml sẽ

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

tôi cần áp dụng các bộ lọc để EncodingFilter SendMessageAction chỉ servlet này,

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

     } 

    } 

Cảm ơn trước ....

+1

Tại sao không áp dụng cùng một con đường để lọc của bạn như Servlet của bạn? –

+0

Cảm ơn bạn đã trả lời ... Bạn có thể cho tôi mã không? –

+0

Đường dẫn servlet của bạn sẽ có trong web.xml, giống như sau: Servlet/path/

Trả lời

5

Bạn có thể thay đổi đường dẫn Lọc:

Thay đổi <url-pattern> đến con đường tương tự như servlet của bạn

<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

Bạn cũng có thể áp dụng một bộ lọc để một servlet cụ thể bằng cách đề cập đến tên servlet thay vì một địa chỉ mẫu. Nếu servlet của bạn được khai báo như thế này:

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

Bạn sẽ có thể sử dụng ánh xạ bộ lọc sau:

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

Cảm ơn rất nhiều và đã nhận được kết quả .... –

+1

Tốt, tôi không biết điều đó! –

Các vấn đề liên quan