Servlet程序的主要分类:
标准Servlet(jsp)--mvc;
过滤Servlet(过滤器);
监听Servlet(监听器)
过滤器是为了安全
过滤器在web中主要起的作用?
过滤器是程序运行之后加入的
功能:
1,任何网站都需要对用户是否登录进行过滤
2,屏蔽非法文字
3,对请求内容进行统一编码
所在的类实现Filter接口,则就可以实现过滤器public interface Filter接口
接口中的方法:
public void init(FilterConfig filterConfig) throws ServletException
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
public void destroy()
过滤器是一个组件,需要在web.xml中部署配置
<filter>
<filter-name>first</filter>
<filter-class>cn.lxh.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>first</filter-name>
<!---于Servlet中的url-pattern不同,此处表示对那个页面进行过滤,如果全部都过滤,则"/*"-->
<url-pattern>/filterdemo</url-pattern>
</filter-mapping>
如果过滤器要将内容传递到目的地,则需要使用FilterChain向下传递
过滤器会执行两次:FilterChain之前执行一次,之后再执行一次
在doFilter中可以使用RequestDispatcher进行跳转
过滤器实例:
1,前台页面
<form action="" method=" demo.jsp">
<input name="" type="text" />
<input name="" type="submit" />
</form>
2,过滤器
package cn.lxh.filter;
import java.io.IOException;
import javax.servlet.*;
public class FirstFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException
{
System.out.println("初始化");
}
public void doFilter(ServletRequest sreq, ServletResponse sres,
FilterChain chain) throws IOException, ServletException
{
String content=sreq.getParameter("content") ;
if(content!=null)
{
if(content.indexOf("AAA")==-1) //没有查到指定的内容
{
//将请求继续下传
chain.doFilter(sreq, sres);
}
else
{
System.out.println("有非法文字!");
//如果需要的话,此处依然可以使用RequestDispatcher实现跳转
}
}
else
{
chain.doFilter(sreq, sres);
}
}
public void destroy()
{
System.out.println("销毁过滤器!");
}
}
3,配置web.xml
4,接收页面demo.jsp
<%= request.getParameter("");%>
实例2:
过虑编码
package cn.lxh.filter;
import java.io.IOException;
import javax.servlet.*;
public class FirstFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException
{
System.out.println("初始化");
}
public void doFilter(ServletRequest sreq, ServletResponse sres, FilterChain chain) throws IOException, ServletException
{
try
{
sreq.setCharacterEncoding("content");
}
catch (Exception e) {
System.out.println("出错!");
}
}
public void destroy()
{
System.out.println("销毁过滤器!");
}
}
实例3:登录验证
package cn.lxh.filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class FirstFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException
{
System.out.println("初始化");
}
public void doFilter(ServletRequest sreq, ServletResponse sres,
FilterChain chain) throws IOException, ServletException
{
//Session属于Http范畴,所以ServletRequest对象需要先转换成HttpServletRequest对象
HttpServletRequest req=(HttpServletRequest)sreq;
HttpSession session=req.getSession();
//如果session不为空,则可以浏览其他页面
if(session.getAttribute("uname")!=null)
{
chain.doFilter(req, sres);
}else
{
sreq.getRequestDispatcher("login.jsp").forward(req, sres);
}
}
public void destroy()
{
System.out.println("销毁过滤器!");
}
}