java语言过滤器

实际上java web 中分为三种,一种是简单的servlet,还有就是过滤servlet和监听器,其中只有简单servlet是程序必须的,过滤和监听器不是必须的。
简单的servlet是继承了HttpServlet的类的形势实现的。一个普通的servlet,则在使用的时候,例如在form表单的action之中编写路径,但是过滤的操作本身就是自身自动的完成的。过滤器完成之后肯定也要进行配置的操作,但是在配置之前,先将服务器启动一下,观察没有过滤器时的操作,此时,可以正确的显示出来过滤器的文件路径。下面我们可以写出一个测试类的filterservlet,SimpleFilter.java
package org.lxh.filterdemo;
import java.io.*;
import javax.servlet.*;
public class SimpleFilter implements Filter{
public void init(FilterConfig filterConfig)throws ServletException{
//接收初始化的一个参数
String initParam = filterConfig.getInitParameter("ref");
System.out.println("过滤器的初始化,初始化的参数="+initParam);
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws java.io.IOException,ServletException{
System.out.println("执行dofilter方法。");
chain.doFilter(request,response);
System.out.println("执行dofilter方法。??????");
}
public void destroy(){
System.out.println("过滤器的销毁。");
}
}
这个java类体现出来了filter的生命周期,初始化,过滤和销毁。其中在过滤中有一行代码“chain.doFilter(request.,response);”
下面是对过滤器的配置的操作,过滤器中使用的映射是“/*”,s是对当前的虚拟目录下的所有的操作。配置完之后,只要服务器启动的话,那么过滤器就会自动的初始化。
<filter>
<filter-name>simple</filter-name>
<filter-class>org.lxh.filterdemo.SimpleFilter</filter-class>
<init-param>
<param-name>ref<param-name>
<param-value>HELLO<param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>simple<filter-name>
<url-pattern>/*<url-pattern>
</filter-mapping>
我们可以发现在程序重启之后,在界面中不断的刷新就会在频繁的出现过滤的操作,而且过滤式两次的出现的,一个过滤器只要在配置中配置好的话,一个过滤器可以对多个程序进行过滤的操作。过滤类的实现在项目中主要是有两个操作,一个是实现编码的过滤还有就是实现的登录的验证的过滤。
编写一个EncodingFilter.java
package org.lxh.filterdemo;
import java.io.*;
import javax.servlet.*;
public class EncodingFilter implements Filter{
private String charset ;
public void init(FilterConfig filterConfig)throws ServletException{
this.charset = filterConfig.getInitParameter("charset");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws java.io.IOException,ServletException{
request.setCharacterEncoding(this.charset);
chain.doFilter(request,response);
System.out.println("执行dofilter方法。??????");
}
public void destroy(){
}
}
然后进行配置,配置大代码如下所示:
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.lxh.filterdemo.EncodingFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后编写一个页面进行测试:表单的页面
<html>
<head><title>inputfilter实例</title></head>
<body>
<form action="input.jsp" method="post">
请输入姓名:<input type="text" name = "info">
<input type="submit" value = "提交">
</form>
</body>
</html>
接着是jsp接收的页面,实现代码的接收
<%@ page language="java" contentType="text/html;charset=GBK" %>
<html>
<head><title></title></head>
<body>
<%
String str = request.getParameter("info");
%>
<%=str%>
</body>
</html>
在代码执行之后我们可以发现在jsp页面中少了一行代码:request.setCharacterEncoding(GBK“);而这一行代码正是在过滤器中实现的。这样以后我们就可以实现减少这一行代码的编写了。
对于登录验证也是一个重要的内容,因为在很多情况下都是需要通过session完成登录的验证的操作,但是如果每个页面都编写重复的session属性的判断的话,那么就变得相当的复杂呢,而且维护也不方便,所以可以对一些需要限制的地方采用登录的验证操作。
先完成登录验证的过滤器:代码如下:
package org.lxh.filterdemo;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class LoginFilter implements Filter{
public void init(FilterConfig filterConfig)throws ServletException{
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws java.io.IOException,ServletException{
//session是属于http协议的范畴
HttpServletRequest req = (HttpServletRequest) request;
HttpSession ses = req.getSession();
if(ses.getAttribute("userid") !=null){
//已经登录过了,则可以访问
chain.doFilter(request,response);
}else{
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
public void destroy(){
}
}
接着进行的是配置的操作,配置代码如下所示:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>这里是标题</title></head>
<body>
<form action="login.jsp" method="post">
用户名:<input type="text" name="uname"><br>
密 码:<input type="password" name="upass"><br>
<input type="submit" value="登陆">
<input type="reset" value="重置">
</form>
<% // 直接通过一个固定的用户名和密码
String name = request.getParameter("uname") ;
String password = request.getParameter("upass") ;
if(!(name==null || "".equals(name) || password==null || "".equals(password))){
if("lixinghua".equals(name) && "mldn".equals(password)){
// 如果登陆成功,则设置session属性范围。
session.setAttribute("userid",name) ;
response.setHeader("refresh","2;URL=welcome.jsp") ;
%>
<h3>用户登陆成功,两秒后跳转到欢迎页!</h3>
<h3>如果没有跳转,请按<a href="welcome.jsp">这里</a>!</h3>
<%
} else {
%>
<h3>错误的用户名或密码!</h3>
<%
}
}
%>
</body>
</html>
接着是欢迎的页面:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>这里是标题</title></head>
<body>
<h3>欢迎<%=session.getAttribute("userid")%>光临本系统!</h3>
</body>
</html>
这就是实现的第二种的过滤器的操作类。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/586.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
