第一:概念
1.过滤器:放在客户端和服务器之间,客户端发送的请求先通过过滤器,当然在服务器响应给客户端的时候也需要先通过过滤器到达客户端。
因此,过滤器可以获取请求数据和响应的数据。在过滤器里还可以做中文乱码处理等(只需要做一次,因为所有的请求和响应都要通过过滤器)
2.由于情求和响应都要由过滤器处理,因此过滤器里有request对象和response对象
2.过滤器的作用(拦截请求,并判断,通过的之后把请求向下传递):
---1.可以做中文乱码处理,2,可以做访问控制。3,响应数据的压缩
3.在comm中创建一个类,并继承Filter接口。要想用它里面的request和response就要向下转型,因为Filter是抽象类,因此要用他的实现类。
chain是过滤器链,chain.dofilter()方法用于把请求向下传递。
filterConfing是过滤器的配置,用于在init方法中接收web.xml中配置的参数值。
4.写完过滤器类之后,就在配置文件里配置过滤器。在配置文件中写servlet是配置一个路径,在配置文件中配置filter是配置很多路径
5.过滤器的实例化和初始化的方法是在启动服务器的时候就开始执行的。
6.步骤:1.把不需要过滤的路径放在集合中,首先进行判断是不是不需要过滤的路径。如果该路径不需要过滤,就使用chain链向下传递请求
2.如果是需要过滤的路径,就使用session判断(session的访问控制)
7.注意:如果不使用集合进行封装不需要过滤的路径,那就表示所有路径都要过滤,因此重定向的之后客户端再次发送请求的路径又会进入过滤器方法,导致死循环。
第二:相关代码
package com.comm;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class RequestFilter implements Filter {
String charset=null;
public RequestFilter()
{
System.out.println("============RequestFilter");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
//中文乱码处理
request.setCharacterEncoding(charset);
HttpSession session = request.getSession();
Object obj = session.getAttribute("u");
System.out.println("----------请求传递之前");
//不用进行访问控制的路径
List<String> path=new ArrayList<String>();
path.add("/userLogin.html");
path.add("/userServlet");
String p=request.getServletPath();
System.out.println(p);
if(path.contains(p))
{
//将请求向下传递
chain.doFilter(request, response);
}
else
{
//判断用户是否登录
if(obj!=null)
{
//将请求向下传递
chain.doFilter(request, response);
}
else
{
response.sendRedirect("userLogin.html");
}
}
System.out.println("----------请求传递之后");
}
@Override
public void init(FilterConfig fc) throws ServletException {
// TODO Auto-generated method stub
charset=fc.getInitParameter("charset");
System.out.println("============ init(FilterConfig fc) "+charset);
}
}
相关推荐
在"j2ee20:servlet04监听器(监听四大web域)"中,四大Web域指的是请求域、会话域、应用域和上下文域。这四个域提供了在Web应用程序中存储和检索对象的方法: 1. 请求域:`HttpServletRequest`对象的属性,仅在当前...
3. **Servlet配置**:Servlet需要在Web应用的部署描述符(web.xml)中进行声明和配置。配置包括Servlet的类名、URL映射、初始化参数等。例如: ```xml <servlet> <servlet-name>MyServlet</servlet-name> ...
标题 "j2ee:servlet练习短信项目,包含过滤器的使用、EL表达式和JSTL标准标签库的使用" 描述了一个基于J2EE平台的短信服务项目的实践,其中涵盖了多个关键的Java Web开发技术。这个项目不仅涉及到Servlet的编程,还...
2. **Servlet**:Servlet是Java Web开发中处理HTTP请求的组件,它可以接收来自浏览器的请求,处理数据,然后返回响应。Servlet生命周期包括加载、初始化、服务、销毁四个阶段,广泛应用于动态网站开发。 3. **JS...
资源名称:j2ee视频servlet视频教程资源目录:【】j2ee视频servlet第0讲开山【】j2ee视频实战教程servlet第1讲初识【】j2ee视频实战教程servlet第2讲(上集)【】j2ee视频实战教程servlet第2讲(下集)【】j2ee视频实战...
1. **Servlet 2.4规范**:进一步优化了过滤器和监听器,增强了安全性。 2. **JSP 2.0和EL 1.0**:提升了JSP的开发效率,EL可以与JSF(JavaServer Faces)结合使用。 3. **EJB 2.1**:引入了Session Bean的无状态会话...
6. **MVC架构**:模型-视图-控制器架构是Web应用设计的常用模式。模型负责业务逻辑,视图负责显示,控制器接收用户请求并协调模型和视图。电子商城系统会按照这一架构组织代码,提高代码的可维护性和扩展性。 7. **...
2. **Servlet配置**:Servlet可以通过在web.xml文件中声明来配置,包括设置Servlet的映射路径、初始化参数等。 3. **请求与响应**:Servlet通过`HttpServletRequest`和`HttpServletResponse`对象来获取和处理HTTP...
6. **Filter和FilterChain**:Servlet 2.5引入了过滤器的概念,允许在请求到达Servlet之前对其进行拦截和修改,以及在响应离开Servlet之后进行处理。FilterChain则用于按顺序调用多个过滤器。 7. **Listener**:...
Servlet 2.4 API帮助文档 chm英文版 是本人根据sun官方j2eeri-1_4-doc-api制作而成!欢迎各位下载使用.如有任何意见和建议请联系我... Java Servlet Development Kit 2.4 DocumenTation by Cn.zwj186.chm
标题中的“j2ee22:json”暗示了我们正在探讨的是J2EE(Java 2 Platform, Enterprise Edition)框架的第22个主题,主要关注JSON(JavaScript Object Notation)技术的应用。JSON是一种轻量级的数据交换格式,广泛用于...
7. **过滤器和监听器**:Servlet 2.5引入了过滤器(Filter)和监听器(Listener)的概念,过滤器可以拦截请求和响应,实现数据转换、权限验证等功能;监听器则可以监听特定的事件,如会话的创建和销毁,以便进行相应...
【Servlet】:Servlet是Java Web开发中的核心组件,用于扩展Web服务器的功能。在本系统中,Servlet作为控制器接收HTTP请求,解析请求参数,调用相应的业务方法,并将结果以HTTP响应的形式返回给客户端。Servlet通过...
1. **Servlet基础**:Servlet是Java Web应用程序的一部分,它是一个Java类,由Web服务器调用以响应HTTP请求。Servlet生命周期包括加载、初始化、服务、销毁等阶段。 2. **部署描述符**:在J2EE环境中,`web.xml`是...
1. **Servlet接口**:Servlet接口是所有Servlet类的基础,它定义了生命周期方法,如`init()`, `service()`, `destroy()`和`getServletConfig()`。这些方法允许Servlet进行初始化、处理请求、销毁资源以及获取配置...
用 J2EE 开发企业应用程序时,它向人们提供了众多选项 — 使得为基础...在本文,也就是该系列的第 1 部分中,LearningPatterns 的高级顾问 Kyle Gabhart 比较了两种用于无状态网络的 J2EE 技术:servlet 和 EJB 技术
【标题】"j2ee博客系统开发:Servlet、Hibernate与JSP深度应用" 【内容】在IT行业中,Java EE(以前称为J2EE)是一个广泛使用的服务器端开发平台,用于构建分布式、多层的企业级应用程序。在这个特定的“j2ee博客”...