Java 如何为一个特定的servlet应用过滤器?
在我的聊天应用程序中,我有五个servlet。我需要为一个servlet应用过滤器 我的过滤器是Java 如何为一个特定的servlet应用过滤器?,java,servlets,servlet-filters,web.xml,Java,Servlets,Servlet Filters,Web.xml,在我的聊天应用程序中,我有五个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; im
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>
提前感谢….您可以更改过滤器路径: 将
更改为与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>
编码滤波器
编码滤波器
com.tps.flexchat.action.EncodingFilter
编码滤波器
/SendMessageAction/
您还可以通过引用servlet名称而不是url模式,将筛选器应用于特定servlet。如果您的servlet是这样声明的:
<servlet>
<servlet-name>SendMessageAction</servlet-name>
<servlet-class>com.tps.flexchat.action.SendMessageAction</servlet-class>
</servlet>
SendMessageAction
com.tps.flexchat.action.SendMessageAction
您应该能够使用以下筛选器映射:
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<servlet-name>SendMessageAction</servlet-name>
</filter-mapping>
编码滤波器
SendMessageAction
为什么不将与Servlet相同的路径应用到您的过滤器上?谢谢您的回复…您能给我代码吗?您的Servlet路径将是web.xml,类似这样:Servlet/path/这是正确的兄弟吗/SendMessageAction?/SendMessageAction/?不错,我不知道!我喜欢这种方法,因为它更直接。
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<servlet-name>SendMessageAction</servlet-name>
</filter-mapping>