加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Web——过滤器

发布时间:2020-12-14 06:32:50 所属栏目:Java 来源:网络整理
导读:h3 class="study-hd"《a href="http://www.imooc.com/learn/213" target="_blank"Java Web开发技术应用——过滤器》 p class="best-text mb-10"过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页

<h3 class="study-hd">《<a href="http://www.imooc.com/learn/213" target="_blank">Java Web开发技术应用——过滤器》
<p class="best-text mb-10">过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:


<p class="best-text mb-10">①以常规的方式调用资源(即,调用servlet或JSP页面)。


<p class="best-text mb-10">②利用修改过的请求信息调用资源。


<p class="best-text mb-10">③调用资源,但在发送响应到客户机前对其进行修改。


<p class="best-text mb-10">④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。


<p class="best-text mb-10">?


<p class="best-text mb-10">用户请求——>过滤器——>WEB资源——>过滤器——>用户

过滤器的生命周期

1.实例化 web.xml ?在web容器启动时依据web.xml实例化

2.初始化 init()

3.过滤 doFilter()

4.销毁 destroy()

配置:

可以通过Design界面快速配置

过滤器需要实现接口javax.servlet.Filter,开始以为是类……找了好久……

需要实现三个方法

? destroy() {}?

? doFilter(ServletRequest arg0,ServletResponse arg1,FilterChain arg2) IOException,ServletException {}?

? init(FilterConfig arg0) ServletException {}?

在doFilter中实现逻辑

如果多个过滤器对应一个路径

那么按照在web.xml的中定义的顺序执行过滤器

请求——>过滤器1——>过滤器2——>Servlet——>过滤器2——>过滤器1——>用户

过滤器的分类:(默认是request

ASYNC:Servlet中异步执行过滤器和业务逻辑内容。

ERROR:处理error-page

FORWARD:通过request.getRequestDispatcher("url").forward(request,response);或者

INCLUDE:通过request.getRequestDispatcher("url").include(request,response);或者

REQUEST:通过链接直接访问,或者通过response.sendRedirect("url");

在web.xml里面配置error-page

404 /error.jsp

在类上面通过注解配置过滤器

@WebFilter(filterName="...",value={"/....jsp"},dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC})

public class FilterName implements Filter {...}

案例:登录校验,如果没有登录,不能直接通过url访问登录后才能访问的页面

(突然发现右键有Servlet的选项,内心是崩溃的……窝每次都是新建java类……

<span style="color: #0000ff;"><!<span style="color: #ff00ff;">DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">html<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">head<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">base <span style="color: #ff0000;">href<span style="color: #0000ff;">="<%=basePath%>"<span style="color: #0000ff;">>

<span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;title</span><span style="color: #0000ff;"&gt;></span>My JSP 'login.jsp' starting page<span style="color: #0000ff;"&gt;</</span><span style="color: #800000;"&gt;title</span><span style="color: #0000ff;"&gt;></span>

<span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;meta </span><span style="color: #ff0000;"&gt;http-equiv</span><span style="color: #0000ff;"&gt;="pragma"</span><span style="color: #ff0000;"&gt; content</span><span style="color: #0000ff;"&gt;="no-cache"</span><span style="color: #0000ff;"&gt;></span>
<span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;meta </span><span style="color: #ff0000;"&gt;http-equiv</span><span style="color: #0000ff;"&gt;="cache-control"</span><span style="color: #ff0000;"&gt; content</span><span style="color: #0000ff;"&gt;="no-cache"</span><span style="color: #0000ff;"&gt;></span>
<span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;meta </span><span style="color: #ff0000;"&gt;http-equiv</span><span style="color: #0000ff;"&gt;="expires"</span><span style="color: #ff0000;"&gt; content</span><span style="color: #0000ff;"&gt;="0"</span><span style="color: #0000ff;"&gt;></span>    
<span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;meta </span><span style="color: #ff0000;"&gt;http-equiv</span><span style="color: #0000ff;"&gt;="keywords"</span><span style="color: #ff0000;"&gt; content</span><span style="color: #0000ff;"&gt;="keyword1,keyword2,keyword3"</span><span style="color: #0000ff;"&gt;></span>
<span style="color: #0000ff;"&gt;<</span><span style="color: #800000;"&gt;meta </span><span style="color: #ff0000;"&gt;http-equiv</span><span style="color: #0000ff;"&gt;="description"</span><span style="color: #ff0000;"&gt; content</span><span style="color: #0000ff;"&gt;="This is my page"</span><span style="color: #0000ff;"&gt;></span>
<span style="color: #008000;"&gt;<!--</span><span style="color: #008000;"&gt;
<link rel="stylesheet" type="text/css" href="styles.css"&gt;
</span><span style="color: #008000;"&gt;--></span>

<span style="color: #0000ff;"></<span style="color: #800000;">head<span style="color: #0000ff;">>

<span style="background-color: #ffff00; color: #000000;"><%<span style="background-color: #f5f5f5; color: #000000;">
request.setCharacterEncoding(<span style="background-color: #f5f5f5; color: #800000;">"<span style="background-color: #f5f5f5; color: #800000;">utf-8<span style="background-color: #f5f5f5; color: #800000;">"<span style="background-color: #f5f5f5; color: #000000;">);
<span style="background-color: #ffff00; color: #000000;">%>

<span style="color: #0000ff;"><<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">form <span style="color: #ff0000;">action<span style="color: #0000ff;">="<%=request.getContextPath() %>/servlet/LoginServlet"<span style="color: #ff0000;"> method<span style="color: #0000ff;">="post"<span style="color: #0000ff;">><span style="color: #000000;">
用户名:<span style="color: #0000ff;"><<span style="color: #800000;">input <span style="color: #ff0000;">type<span style="color: #0000ff;">="text"<span style="color: #ff0000;"> name<span style="color: #0000ff;">="username"<span style="color: #0000ff;">><span style="color: #000000;">
密码:<span style="color: #0000ff;"><<span style="color: #800000;">input <span style="color: #ff0000;">type<span style="color: #0000ff;">="password"<span style="color: #ff0000;"> name<span style="color: #0000ff;">="password"<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">input <span style="color: #ff0000;">type<span style="color: #0000ff;">="submit"<span style="color: #ff0000;"> value<span style="color: #0000ff;">="提交"<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">form<span style="color: #0000ff;">>

<span style="color: #0000ff;"></<span style="color: #800000;">body<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">html<span style="color: #0000ff;">>

<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.IOException;
<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.PrintWriter;

<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletConfig;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletException;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpServlet;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpServletRequest;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpServletResponse;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpSession;

<span style="color: #0000ff;">public <span style="color: #0000ff;">class LoginServlet <span style="color: #0000ff;">extends<span style="color: #000000;"> HttpServlet {

</span><span style="color: #008000;"&gt;/**</span><span style="color: #008000;"&gt;
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * </span><span style="color: #808080;"&gt;@param</span><span style="color: #008000;"&gt; request the request send by the client to the server
     * </span><span style="color: #808080;"&gt;@param</span><span style="color: #008000;"&gt; response the response send by the server to the client
     * </span><span style="color: #808080;"&gt;@throws</span><span style="color: #008000;"&gt; ServletException if an error occurred
     * </span><span style="color: #808080;"&gt;@throws</span><span style="color: #008000;"&gt; IOException if an error occurred
     </span><span style="color: #008000;"&gt;*/</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> doPost(HttpServletRequest request,HttpServletResponse response) <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; ServletException,IOException {

    String username </span>= request.getParameter("username"<span style="color: #000000;"&gt;);
    String password </span>= request.getParameter("password"<span style="color: #000000;"&gt;);

    System.out.println(username);

    </span><span style="color: #0000ff;"&gt;if</span>("admin".equals(username) &amp;&amp; "admin"<span style="color: #000000;"&gt;.equals(password)){
        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;校验通过</span>
        HttpSession session =<span style="color: #000000;"&gt; request.getSession();
        session.setAttribute(</span>"username"<span style="color: #000000;"&gt;,username);
        response.sendRedirect(request.getContextPath()</span>+"/success.jsp"<span style="color: #000000;"&gt;);
        </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; ;
    } </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt;{
        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;校验失败</span>
        response.sendRedirect(request.getContextPath()+"/fail.jsp"<span style="color: #000000;"&gt;);
        </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; ;
    }
}

}

<span style="color: #0000ff;">import<span style="color: #000000;"> java.io.IOException;

<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.Filter;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.FilterChain;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.FilterConfig;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletException;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletRequest;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.ServletResponse;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpServletRequest;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpServletResponse;
<span style="color: #0000ff;">import<span style="color: #000000;"> javax.servlet.http.HttpSession;

<span style="color: #0000ff;">public <span style="color: #0000ff;">class LoginFilter <span style="color: #0000ff;">implements<span style="color: #000000;"> Filter {

</span><span style="color: #0000ff;"&gt;private</span><span style="color: #000000;"&gt; FilterConfig config;

@Override
</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; destroy() {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; TODO Auto-generated method stub</span>

<span style="color: #000000;">
}

@Override
</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; doFilter(ServletRequest arg0,FilterChain arg2)
        </span><span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; IOException,ServletException {
    HttpServletRequest request </span>=<span style="color: #000000;"&gt; (HttpServletRequest) arg0;
    HttpServletResponse response </span>=<span style="color: #000000;"&gt; (HttpServletResponse) arg1;

    String charset </span>= config.getInitParameter("charset"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;if</span> (charset == <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) {
        charset </span>= "utf-8"<span style="color: #000000;"&gt;;
    }

    request.setCharacterEncoding(</span>"utf-8"<span style="color: #000000;"&gt;);

    String noLoginPaths </span>= config.getInitParameter("noLoginPaths"<span style="color: #000000;"&gt;);
    </span><span style="color: #0000ff;"&gt;if</span> (noLoginPaths != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) {
        String[] strArray </span>= noLoginPaths.split(";"<span style="color: #000000;"&gt;);
        </span><span style="color: #0000ff;"&gt;for</span><span style="color: #000000;"&gt; (String s: strArray) {
            </span><span style="color: #0000ff;"&gt;if</span> (s != <span style="color: #0000ff;"&gt;null</span> &amp;&amp; !s.equals("") &amp;&amp; request.getRequestURL().indexOf(s) != -1<span style="color: #000000;"&gt;) {
                arg2.doFilter(arg0,arg1);
                </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt;;
            }
        }
    }


    HttpSession session </span>=<span style="color: #000000;"&gt; request.getSession();
    </span><span style="color: #0000ff;"&gt;if</span> (session.getAttribute("username") != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) {
        arg2.doFilter(arg0,arg1);
    } </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; {
        response.sendRedirect(</span>"login.jsp"<span style="color: #000000;"&gt;);
    }
}

@Override
</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> init(FilterConfig arg0) <span style="color: #0000ff;"&gt;throws</span><span style="color: #000000;"&gt; ServletException {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; TODO Auto-gegnerated method stub</span>
    config =<span style="color: #000000;"&gt; arg0;
}

}

LoginFilter This is the description of my J2EE component This is the display name of my J2EE component LoginServlet com.imooc.servlet.LoginServlet

<span style="color: #0000ff;"><<span style="color: #800000;">servlet-mapping<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">servlet-name<span style="color: #0000ff;">>LoginServlet<span style="color: #0000ff;"></<span style="color: #800000;">servlet-name<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">url-pattern<span style="color: #0000ff;">>/servlet/LoginServlet<span style="color: #0000ff;"></<span style="color: #800000;">url-pattern<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">servlet-mapping<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">welcome-file-list<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>index.html<span style="color: #0000ff;"></<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>index.htm<span style="color: #0000ff;"></<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>index.jsp<span style="color: #0000ff;"></<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>default.html<span style="color: #0000ff;"></<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>default.htm<span style="color: #0000ff;"></<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>default.jsp<span style="color: #0000ff;"></<span style="color: #800000;">welcome-file<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">welcome-file-list<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">filter<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">filter-name<span style="color: #0000ff;">>LoginFilter<span style="color: #0000ff;"></<span style="color: #800000;">filter-name<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">filter-class<span style="color: #0000ff;">>com.imooc.filter.LoginFilter<span style="color: #0000ff;"></<span style="color: #800000;">filter-class<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">init-param<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">param-name<span style="color: #0000ff;">>noLoginPaths<span style="color: #0000ff;"></<span style="color: #800000;">param-name<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">param-value<span style="color: #0000ff;">>login.jsp;fail.jsp;LoginServlet<span style="color: #0000ff;"></<span style="color: #800000;">param-value<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">init-param<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">init-param<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">param-name<span style="color: #0000ff;">>charaset<span style="color: #0000ff;"></<span style="color: #800000;">param-name<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">param-value<span style="color: #0000ff;">>GBK<span style="color: #0000ff;"></<span style="color: #800000;">param-value<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">init-param<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">filter<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">filter-mapping<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">filter-name<span style="color: #0000ff;">>LoginFilter<span style="color: #0000ff;"></<span style="color: #800000;">filter-name<span style="color: #0000ff;">>
<span style="color: #0000ff;"><<span style="color: #800000;">url-pattern<span style="color: #0000ff;">>/*<span style="color: #0000ff;"></<span style="color: #800000;">url-pattern<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">filter-mapping<span style="color: #0000ff;">>
<span style="color: #0000ff;"></<span style="color: #800000;">web-app<span style="color: #0000ff;">>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读