频道澳门葡京手机版网址
登录注册
澳门葡京手机版网址 > 澳门葡京手机版网址 > App开发 > 其他 > 正文
Java语言之jsp页面过滤器Filter
2018-08-15 10:49:15           
收藏   我要投稿

过滤器:
1、概念:
过滤器是服务端的组件,可以截取客户端的请求和服务器端的响应,并对这些信息进行过滤。
2、过滤器的工作原理:
filter
3、过滤器的生命周期:
实例化、初始化、过滤、销毁
1)实例化:在XML文件中生命一个过滤器,声明之后,web容器会创建一个过滤器的实例
2)初始化:即调用init()方法
3)过滤:即调用dofile()方法
4)销毁:即调用destroy()方法
init()方法:读取web.xml中为过滤器定义的一些参数和方法
dofilter()方法:当用户访问与过滤器关联的URL时,Web容器会先调用过滤器的doFilter方法进行过滤。
destory()方法:销毁过滤器实例前调用的方法,用来释放过滤器的资源

5)filter实行原理:

一个过滤器的实行过程:

\

多个过滤器的实行过程:

\
4、代码举例:

该过滤器的作用是使得程序在运行时,必须先经过过滤器的过滤,即登录后才会将请求发送给服务器端,而服务器端的响应也必须经过过滤器的过滤才能将响应发送给客户端。

过滤器需要在web.xml文件中进行配置后方可使用

这是过滤器页面代码:

package com.westos.Filter;

import org.apache.commons.lang3.StringUtils;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class filterFilter implements Filter {
 public void destroy() {
 }

 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
  req.setCharacterEncoding("utf-8");
  resp.setCharacterEncoding("utf-8");
  resp.setContentType("text/html;charset=UTF-8");
  //检查用户是否登录
  //获取session对象并检查session对象中是否存在username属性值
  if (((HttpServletRequest)req).getSession().getAttribute("username")!=null) {
//若用户已登录进行下一步的操作,过滤器将request发送给服务器端
chain.doFilter(req, resp);
  }else{
//login.html除外
String url = ((HttpServletRequest) req).getRequestURI();
//继续发起请求
if (StringUtils.endsWith(url,"login.html")){
 chain.doFilter(req, resp);
}else{
 //跳转回登录页面
 ((HttpServletResponse)resp).sendRedirect(((HttpServletRequest)req).getContextPath()+"login.html");
}
  }
 }

 public void init(FilterConfig config) throws ServletException {

 }

}

这是login.html页面的代码:


账户名:

密  码   :

JavaScript:onchang()">换一张

所调用的验证码代码如下:

package com.westes.Servlet;

import org.apache.commons.lang3.RandomUtils;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;

@WebServlet(name = "YZMServlet")
public class YZMServlet extends HttpServlet {
 private static final int width = 40;
 private static final int height = 100;

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doGet(request, response);
 }

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  //设定编码格式
//  response.setCharacterEncoding("utf-8");
//  response.setContentType("text/html;charset=utf-8");
//  request.setCharacterEncoding("utf-8");
  //设定图片格式
  response.setContentType("image/jpg");
  //客户端获取session
  HttpSession session = request.getSession();
  //产生一张照片
  BufferedImage img = new BufferedImage(height, width, BufferedImage.TYPE_INT_RGB);
  //设置背景色
  Graphics g = img.getGraphics();
  g.setColor(Color.white);
  //填充背景色
  g.fillRect(0, 0, width, height);
  //设置前景色
  g.setColor(Color.green);
  //设置字体Font.BOLD:粗体
  Font font = new Font("华文仿宋", Font.BOLD, 20);
  g.setFont(font);
  //设置验证码的内容
  //字体个数
  String str = Randomnumber(5);
  session.setAttribute("Y", str);
  g.drawString(str, 20, 30);
  for (int i = 0; i < 20; i++) {
int x1 = RandomUtils.nextInt(0, width);
int x2 = RandomUtils.nextInt(0, width);
int y1 = RandomUtils.nextInt(0, height);
int y2 = RandomUtils.nextInt(0, height);
Color color = new Color(RandomUtils.nextInt(0, 255), RandomUtils.nextInt(0, 255), RandomUtils.nextInt(0, 255));
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
  }
  //cookie的操作
  //写cookie
  Cookie cookie = new Cookie("name", "westos");
  //过期时间
  cookie.setMaxAge(1000);
  //只允许服务端读取
  cookie.setHttpOnly(true);
  response.addCookie(cookie);

  //读取cookie
  Cookie[] cookies = request.getCookies();
  for (Cookie ck : cookies) {
System.out.println(ck.getName() + "=" + ck.getValue());
  }
  //输出图片
  ImageIO.write(img, "jpg", response.getOutputStream());
 }

 //获取随机数
 private String Randomnumber(int i) {
  String result = "";
  //获取i个随机数
  for (int j = 0; j < i; j++) {
char c = (char) RandomUtils.nextInt(65, 91);
result = result + c;
  }
  return result;
 }
}

web.xml配置文件:

 
  filterFilter
  com.westos.Filter.filterFilter
 
 
  filterFilter
  /login.html
  /*.jsp
 
点击复制链接 与好友分享!回澳门葡京手机版网址澳门葡京手机版网址
上一篇:SpringMVC 如何将请求找到匹配的处理方法
下一篇:异常体系Throwable教程
相关文章
图文推荐
点击排行

关于大家 | 联系大家 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 澳门葡京手机版网址_澳门新莆京娱乐_www.88807.com - 点此进入--致力于做实用的IT技术学习网站

XML 地图 | Sitemap 地图