java之web开发过滤器
我们通常上网的时候都会遇到一个问题,看到一个视频之类的,想要点开观看,点击之后,网页
提醒你:您尚未登录,是否要登录?然后巴拉巴拉跑去输账号密码。
那么这就是一个过滤器的功能,当你要访问一个资源的时候(通常理解为链接),服务器会进行
分析,当前的访问者是否符合一定条件(通常就是检测一下是不是会员,是否已经登录),符合
条件的话,服务器会跳转到指定链接,不满足的话也会友情提醒:您不是会员,您尚未登录等等。
如何实现呢,还是以用户登录为例子吧,看下面~~~
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开发过滤器的更多相关文章
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
- 转: 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
from: https://github.com/RubyLouvre/agate/issues/8 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以 ...
- 在做java 的web开发,为什么要使用框架
现在做项目都会使用框架,现在很常见的框架就是SSH(Struts+SpringMVC+spring+hibernate),SSM(Struts/springMVC+Spring+Hibernate), ...
- Java在Web开发语言上败给了PHP
PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...
- Java在Web开发语言上败给了PHP(转)
PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...
- PHP开发人员对JAVA的WEB开发入门(初版-已废弃)
最近准备对其他部门PHP开发的童鞋做一个对JAVA的培训.知己知彼,百战不殆,我要先了解点PHP,才能确认他们的基础,达到好的授课效果. PHP(原始为Personal Home Page的缩写,后正 ...
- PHP开发人员对JAVA的WEB开发入门(初版-基础知识)
最近准备对其他部门PHP开发的童鞋做一个对JAVA的培训.知己知彼,百战不殆,我要先了解点PHP,才能确认他们的基础,达到好的授课效果. PHP(原始为Personal Home Page的缩写,后正 ...
- 我来谈谈PHP和JAVA在web开发上的的区别
这里的标题写的是谈谈PHP和JAVA的区别,其实是委婉的说法,其实别人是想听PHP好还是JAVA好!!! 从而从中找到存在感!!! 因为由于我是从多年的php开发转到java开发的.所以最,不时的有好 ...
- 为什么java的web开发中URLEncoder.encode方法要为什么要调用两次
一: 我们先看2个编码的情况 String name=java.net.URLEncoder.encode("测试", "UTF-8"); System.out ...
随机推荐
- UI设计——最后一根稻草
WindowsLive提供的本地地图服务看起来挺简单的,但其实非常难用: 跟其他人一样,每当我接触到一个新的地图服务,我做的第一件事总是拿当前的地址去试一试.我在上面输入的是我工作的地方.但是,当我敲 ...
- 总账:日记账导入流程(文档 ID 1591640.1)
文档内容 概要 历史记录 详细信息 GL_INTERFACE_CONTROL GL_INTERFACE_HISTORY GL_IMPORT_REFERENCES 摘要 ...
- 通过一个tomcat端口访问多个tomcat项目 tomcat转发
需求是这样的,有一个tomcat,是80端口,现在我要通过这个tomcat转发到服务器其他tomcat,其他tomcat的端口不是80.这样做就可以避免这样www.baidu.com:8081的情况. ...
- Android ViewManger解析 从ViewRoot 源码分析invalidate
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/48443429,作者:skay 通过学习了AndroidUI之绘图机基础知道 ...
- Ext JS 5初探(二) ——Bootstrap.js
在Bootstrap.js文件中,总共有1500行(包含注释和空行),使用编辑器的代码折叠功能就如下图可以一窥全貌了. 从代码可以看到,这里主要定义了Ext.Boot.Ext.globalEval.E ...
- Java 反射之Class用法
下面示范如果通过Class对象获取对应类的信息: package com.reflect; import java.lang.annotation.Annotation; import java.la ...
- 《java入门第一季》之面向对象多态面试题(多态收尾)
/* 看程序写结果:先判断有没有问题,如果没有,写出结果 */ class A { public void show() { show2(); } public void show2() { Syst ...
- android 常用方法集合
private static Contextcontext; privatestatic Displaydisplay; private static String TAG = "MyToo ...
- 【Qt编程】QWT在QtCreator中的安装与使用
由于导师项目的需要,需要画图,二维+三维.三维图我用的是Qt+opengl,二维图我决定使用qwt工具库来加快我的项目进展,毕竟还有期末考试.关于Qt+opengl的使用有时间的话以后再介绍. ...
- Ubuntu ROS Arduino Gazebo学习镜像iso说明(indigo版)
ROS机器人程序设计(原书第2版)学习镜像分享及使用说明 新版已经发布,请参考: http://blog.csdn.net/zhangrelay/article/details/53324759 Ub ...