我们通常上网的时候都会遇到一个问题,看到一个视频之类的,想要点开观看,点击之后,网页

提醒你:您尚未登录,是否要登录?然后巴拉巴拉跑去输账号密码。

那么这就是一个过滤器的功能,当你要访问一个资源的时候(通常理解为链接),服务器会进行

分析,当前的访问者是否符合一定条件(通常就是检测一下是不是会员,是否已经登录),符合

条件的话,服务器会跳转到指定链接,不满足的话也会友情提醒:您不是会员,您尚未登录等等。

如何实现呢,还是以用户登录为例子吧,看下面~~~

1.三个页面

登录页面,登录成功页面,登录失败页面

login.jsp---loginsuccess.jsp---loginwrong.jsp

2.实现Filter接口的类

这个java文件实现了Filter接口,并且设定了规则,并且还有配置文件

 public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
request.setCharacterEncoding("utf-8");// 设置请求编码
response.setCharacterEncoding("utf-8");// 设置响应编码
HttpSession session = request.getSession();//session对象,用于存储表单数据
String username = request.getParameter("username");
String password = request.getParameter("password");
session.setAttribute("username", username);
session.setAttribute("password", password);
System.out.println("密码:" + password);
System.out.println("账号:" + session.getAttribute("username"));
if (username != null && password != null) {
if (username.equals("admin") && password.equals("admin")) {
arg2.doFilter(arg0, arg1);// 满足条件放行,跳转到表单想要到达的页面loginsuccess.jsp
} else {
request.getRequestDispatcher("loginwrong.jsp").forward(request,
arg1);// 不满足条件,转到loginwrong页面
}
}
}

配置文件规定了此规则适用于客户端对哪个页面访问时,调用规则

     <filter>
<filter-name>logfilter</filter-name>
<filter-class>Filter.Servletfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logfilter</filter-name>
<url-pattern>/loginsuccess.jsp</url-pattern>
</filter-mapping>

filter-name自定义,不过规则与适用的页面要一一对应,过滤规则类文件要包名+文件名形式书写,

这个文件的意思就是说,当用用户要访问loginsuccess.jsp页面时,过滤器Servletfilter进行拦截,然后

结合规则来看,如果用户的用户名和密码都是admin的话,服务器直接跳转到loginsuccess.jsp页面,

账号和密码不对的话,服务器跳转到loginwrong.jsp页面。

注意:用户提交表单,发送请求之后,请求被过滤器拦截,此时要设置请求和响应的字符编码,防止

后面用到数据的时候造成输出乱码。设置方法在过滤器源码已经用红字标出。

java之web开发过滤器的更多相关文章

  1. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  2. 转: 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    from: https://github.com/RubyLouvre/agate/issues/8 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以 ...

  3. 在做java 的web开发,为什么要使用框架

    现在做项目都会使用框架,现在很常见的框架就是SSH(Struts+SpringMVC+spring+hibernate),SSM(Struts/springMVC+Spring+Hibernate), ...

  4. Java在Web开发语言上败给了PHP

    PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...

  5. Java在Web开发语言上败给了PHP(转)

    PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...

  6. PHP开发人员对JAVA的WEB开发入门(初版-已废弃)

    最近准备对其他部门PHP开发的童鞋做一个对JAVA的培训.知己知彼,百战不殆,我要先了解点PHP,才能确认他们的基础,达到好的授课效果. PHP(原始为Personal Home Page的缩写,后正 ...

  7. PHP开发人员对JAVA的WEB开发入门(初版-基础知识)

    最近准备对其他部门PHP开发的童鞋做一个对JAVA的培训.知己知彼,百战不殆,我要先了解点PHP,才能确认他们的基础,达到好的授课效果. PHP(原始为Personal Home Page的缩写,后正 ...

  8. 我来谈谈PHP和JAVA在web开发上的的区别

    这里的标题写的是谈谈PHP和JAVA的区别,其实是委婉的说法,其实别人是想听PHP好还是JAVA好!!! 从而从中找到存在感!!! 因为由于我是从多年的php开发转到java开发的.所以最,不时的有好 ...

  9. 为什么java的web开发中URLEncoder.encode方法要为什么要调用两次

    一: 我们先看2个编码的情况 String name=java.net.URLEncoder.encode("测试", "UTF-8"); System.out ...

随机推荐

  1. 【IOS 开发】Object - C 语法 之 类型转换

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3913507 ...

  2. C语言符号优先级

    优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象) 对象.成员名   -& ...

  3. [Django高级]理解django中的中间件机制和执行顺序

    原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...

  4. SwiftyiRate中文说明

    SwiftyiRate Github SwiftyiRate Swift语言实现的app内评分,简单易用. Requirements Integration Usage Initialization ...

  5. git简介及使用方法

    一.git简介及安装1.git简介 Git 是用于 Linux 内核开发的版本控制工具.与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持, ...

  6. (NO.00001)iOS游戏SpeedBoy Lite成形记(三十):增加排行榜功能3

    在这个例子中,我们的显示代码只需要选手的名字以及对应的成绩.根据选手名字取对应的成绩可以用前面实现的playerRecord:方法,我们只需要将按照成绩排序后的选手名字返回就可以了. 我只需要再实现一 ...

  7. Android scrollview嵌套webview滑动冲突的解决方案

    在Android开发中有时我们需要在scrollview中嵌套webview这时你会发现这两者的滑动事件产生了冲突导致:webview很难被滑动,即使被滑动了一点也非常不顺畅.解决方案也比较简单只需要 ...

  8. 【Qt编程】Qt 小时钟

    Hello World! 学习编程语言的最简单最经典的小程序,当然Qt也不例外.在学习画图时,我觉得写个时钟小程序也是个比较好的开始.在之前的<Matlab及Java小时>一文中,我也从写 ...

  9. redis简介(keeper实时报表的基本部分)

    网上有一篇介绍Redis的文章,由浅入深地讲解了Redis:http://blog.mjrusso.com/2010/10/17/redis-from-the-ground-up.html.强烈建议对 ...

  10. Leetocde_242_Valid Anagram

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/48979767 Given two strings s an ...