默认计划
(1人评价)
JavaWeb-JSP-Servlet实战开发2017【极限IT JAVA专业第8课】

从这节课 开始JAVAWEB

价格 ¥ 199.00
该课程属于 【极限IT】JAVA工程师训练营 领券低至2980元
请加入后再学习

过滤器

Servlet实际上分为3中:普通Servlet(MVC),过滤Servlet(FIlter),监听Servlet(Listener)

过滤器实现

1. 过滤操作的使用是自动进行调用的

2. 实现过滤器需要实现 javax.servlet.Filter接口,该接口定义如下处理方法

- 初始化:

public void init(FilterConfig filterConfig) throws ServletException

- 执行过滤操作

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

- 销毁:

public void destroy()

建立一个过滤器
public class MyFilter implements Filter {
    @Override 
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("******过滤器初始化,初始化参数:" + filterConfig.getInitParameter("msg");
    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException{
        System.out.println("*******执行过滤******");
    }
    @Override
    public void destroy(){
        System.out.println("*******过滤器销毁*****");
    }
}

 

<filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>cn.my.filter.MyFilter</filter-class>
    <init-parm>
        <param-name>msg</param-name>
        <param-value>mlndjava</param-value>
    </init-parm>
</filter>
<filter-mapping>
    <filter-name>MyFilter</filter-name>
    <!--过滤执行路径,如果设置为/*,表示所有的根目录下的内容都要求被过滤-->
    <url-pattern>/*</url-pattern>
</filter-mapping>
 

所有的请求到了过滤器后被拦截,要想请求继续放行,需要FilterChain接口中的方法

public void doFilter(ServletRequest req, ServletResponse resp) throws IOException, ServletException

 

编写编码过滤器

public class EncodingFilter implements Filter {
    private String charset = "UTF-8";
    @Override
    public void init(FilterConfig filterconfig) throws ServletException{
        if(filterconfig.getInitParameter("charset")!=null){
            this.charset = filterconfig.getInitParameter("charset");
        }
    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throw IOException, ServletException{
        req.setCharacterEncoding(this.charset);
        chain.doFilter(req,resp);
        resp.setCharacterEncoding(this.charset);
    }
    @Override
    public void destroy(){
        
    }
}

 

web.xml中配置过滤器

<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>cn.my.filter.EncodingFilter</filter-class>
    <init-param>
        <param-name>charset</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

登录过滤

1. 设置过滤目录:例如/pages下的页面都必须登录后访问

2. 实例

- session属于HTTP协议范畴,要将ServletRequest变为HttpServletRequest

public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest  request = (HttpServletRequest)req;
        HttpSession session = request.getSession();
        if(session.getAttribute("mid")!=null){//mid存在,代表已经登录
            chain.doFilter(request,resp);
        }else{
            request.setAttribute("msg","你还未登录,请先登录");
            request.getRequestDispatcher("/login.jsp").forward(request,resp);
            )
        }
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException{
        
    }
    @Override
    public void destroy(){
        
    }
}

- web.xml中配置filter

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>cn.my.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/pages/*</url-pattern>
</filter-mapping>

- 定义登录页面

<h1>${msg}</h1>
<%
    if(request.getParameter("mid")!=null){
        session.setAttribute("mid",request.getParameter("mid"));
    }
%>
<form action="login" method="post">
    登录用户名:<input type="text" name="mid" id="mid">
    <input type="submit" value="提交">
</form>

[展开全文]

授课教师

讲师

课程特色

视频(142)
图文(2)
文档(38)

学员动态

Drop 加入学习
妥了 加入学习
xiepeng 加入学习
charmyCode 加入学习
luojianglai 加入学习