簡體   English   中英

如何在Eclipse中創建Servlet過濾器?

[英]How to create a servlet filter in Eclipse?

我是servlet技術的新手。 我設置了Java 7,Tomcat8和Eclipse。 我在Eclipse上創建了幾個servlet,並且一切正常。

今天,我創建了一個簡單的servlet過濾器。 但是它不在任何servlet之前執行。 我可以看到使用控制台消息執行了init方法。 根據Servlet 3.0,我不使用web.xml,而是使用@WebFilter(“ / FilterDemo”)批注。

這是servlet過濾器代碼,

package net.codejava;

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;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class FilterDemo
 */
@WebFilter("/FilterDemo")
public class FilterDemo implements Filter {

/** 
 * Default constructor. 
 */
public FilterDemo() {
    // TODO Auto-generated constructor stub
}

/**
 * @see Filter#destroy()
 */
public void destroy() {
    // TODO Auto-generated method stub
    System.out.println("Destroy is called.");
}

/**
 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
 */
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    // TODO Auto-generated method stub
    // place your code here

    String ipAddress = request.getRemoteAddr();
    System.out.println("Do Filter is called.");
    System.out.println(ipAddress);

    // pass the request along the filter chain
    chain.doFilter(request, response);
}

/**
 * @see Filter#init(FilterConfig)
 */
public void init(FilterConfig fConfig) throws ServletException {
    // TODO Auto-generated method stub
    System.out.println("Filter Init is called."); 
}

}

工作區屏幕截圖: 在此處輸入圖片說明

任何幫助將不勝感激。

過濾器位於Servlet的前面。 在注釋中,您指定了過濾器僅應過濾去/FilterDemo請求。 您需要做的是將過濾器映射到與您的一個servlet相同的URL,或者指定要過濾器進行處理的servlet的名稱(使用@WebFilter批注的servletNames參數。

盡管您正在使用@WebFilter批注,但仍必須在web.xml聲明過濾器映射。

根據Servlet 3.0

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet{...}

@WebFilter(filterName="filter1", urlPatterns={ "/LoginServlet" })
public class AuthenticationFilter implements Filter {..}

但您仍應將<url-pattern>保留在web.xml中,因為XSD要求使用它,盡管它可以為空:

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern />
</filter-mapping>

另請參見使用Tomcat,@ WebFilter不能與web.xml一起使用

了解如何將Servlet映射到過濾器。

web.xml:

<filter>  
<filter-name>f1</filter-name>  
<filter-class>MyFilter</filter-class>  
</filter>  

<filter-mapping>  
<filter-name>f1</filter-name>  
<url-pattern>/servlet1</url-pattern> 
</filter-mapping>  

/ servlet1是您的servlet的url模式(您要執行的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM