JavaWeb之Filter、Listener

JavaWeb中的Filter过滤器和Listener监听器 观察者模式是二十三中设计模式之一,它是指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式观察者:监控『被观察者』的行为,一旦发现『被观察者』触发了事件,就会调用事先准备好的方法执行操作。被观察者:『被观察者』一旦触发了被监控的事件,就会被『观察者』发现。监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。Servlet监听器。 阅读详情

今天给大家讲解的是Filter和Listener的用法。

一、Listenner监听器

1.1、定义

Javaweb中的监听器是用于监听web常见对象HttpServletRequest,HttpSession,ServletContext。

1.2、监听器的作用

监听web对象创建与销毁.

监听web对象的属性变化

监听session绑定javaBean操作.

1.3、监听机制中的概念

事件----一件事情

事件源---产生这件事情的源头

注册监听---将监听器与事件绑定,当事件产生时,监听器可以知道,并进行处理。

监听器---对某件事情进行处理监听的一个对象

二、JavaWeb中常见的监听器

2.1、创建一个监听器的步骤

创建一个类,实现需要监听器的接口

重写接口中的方法

在web.xml中配置注册该监听器

2.2、监听域对象的创建与销毁

监听ServletContext创建与销毁 ServletContextListener

监听HttpSession创建与销毁 HttpSessionListener

监听HttpServletRequest创建与销毁 ServletRequestListener

下面为大家展示的实例,首先我们的实例在jsp中进行的话,我们要明确这三个域对象什么时候被jsp创建什么时候又被销毁呢。

在ServletContext中是服务器开启的时候就被创建,当服务器关闭的时候就被销毁

在session中,jsp里的page指令中可以配置默认是ture的,所以当你加载这个jsp页面的时候session就被创建了,而销毁的话就有

四种方法: 默认超时   30 分钟、 关闭服务器、 invalidate() 方法、 setMaxInactiveInterval(int interval) 可以设置超时时间,在servlet中

需要通过request.getSseeion()来创建session。

在request中,发送请求服务器就会创建它,当响应产生时,request对象就会销毁。在jsp页面的话,你加载开始创建,加载完就销毁了。

2.2.1、实例:监听域对象的创建与销毁

这里只演示一个,其他的两个同理都是这样子操作的。

HttpServletListener监听器

a.创建类,实现HttpServletListener接口,并重写方法

package test;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyHttpSessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        System.out.println("session被创建了");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        System.out.println("session被销毁了");
    }

}

View Code

b.在web.xml中的配置

c.在newFile.jsp中测试

注:在jsp中我添加了invalidate方法来测试销毁

d.结果

2.3、监听域对象的属性变化

监听ServletContext属性变化 ServletContextAttributeListener

监听HttpSession属性变化 HttpSessionAttributeListener

监听HttpServletRequest属性变化 ServletRequestAttributeListener

2.3.1、实例:监听域对象的实例变化

a.创建一个MyServletRequest类继承ServletRequestAttributeListener接口,并实现改接口方法

package test;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;

public class MyServletRequest implements ServletRequestAttributeListener{

    @Override
    public void attributeAdded(ServletRequestAttributeEvent arg0) {
        System.out.println("requestAttribute添加了属性");
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("requestAttribute被移除了");
        
    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("requestAttribute被替换了");
        System.out.println(arg0.getName()+arg0.getValue());
        
    }

}

View Code

b.在web.xml中注册该监听器

<listener>

<listener-class>test.MyServletRequest</listener-class>

</listener>

c.在jsp测试一下

结果:

当我们在添加一个removeAttribute()方法时

2.4、监听session绑定javabean

2.4.1、HttpSessionBindingListener (这个是用javabean去实现的,所以不需要去注册)

用于监听javaBean对象是否绑定到了session域

创建一个User去实现HttpSessionBindingListener接口

package test;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class User implements HttpSessionBindingListener {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public void valueBound(HttpSessionBindingEvent arg0) {
        System.out.println("User对象被session绑定了!");
    }
    @Override
    public void valueUnbound(HttpSessionBindingEvent arg0) {
        System.out.println("User对象解除session绑定了!");
    }
}

View Code

在jsp页面中测试

结果:

注意:不需要再web.xml中去配置该监听器,在执行setAttrubute()方法的时候自动去识别该监听器

2.4.2.HttpSessionActivationListener

用于监听javaBean对象的活化与钝化。

HttpSessionActivationListener如果javaBean实现了这个接口,那么当我们正常关闭服务器时,session中的javaBean对象就会被钝化到我们指定的文件中。

当下一次在启动服务器,因为我们已经将对象写入到文件中,这时就会自动将javaBean对象活化到session中。

首先我们要明白什么是活化与钝化等下单独写一篇文章介绍活化与钝化

我们还需要个 context.xml 文件来配置钝化时存储的文件

<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="it315"/>
</Manager>
</Context>

三、Filter

接下来为大家讲解的是Filter,这个相对于Listener来说就重要的多了,它的应用非常的广泛,主要是起到一个过滤、拦截的作用。

3.1、Filter的定义

Javaweb 中的过滤器可以拦截所有访问 web 资源的请求或响应操作。执行过滤任务的对象,这些任务是针对对某一资源(servlet 或静态内容)的请求或来自某一资源的响应执行的,抑或同时针对这两者执行。

3.2、怎么创建一个过滤器

创建一个类实现Filter接口

重写接口中方法 doFilter方法是真正过滤的

在web.xml文件中配置

注意: 在 Filter 的 doFilter 方法内如果没有执行 chain.doFilter(request,response)那么资源是不会被访问到的。

3.3、实例

首先我创建了一个MyFilter.java实现Filter接口

package com.jxlg.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter implements Filter{

    @Override
    public void destroy() {
        
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("doFilter执行了");
        chain.doFilter(req, res);    //放行
        System.out.println("执行完返回到客户端");
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        
    }
    

}

View Code

在web.xml中配置过滤器

<filter>
      <filter-name>MyFilter</filter-name>
      <filter-class>com.jxlg.filter.MyFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>MyFilter</filter-name>
      <url-pattern>/demo1</url-pattern>
  </filter-mapping>

View Code

写一个servlet让MyFilter进行过滤

结果

3.4、FilterChain

FilterChain 是 servlet 容器为开发人员提供的对象,它提供了对某一资源的已过滤请求调用链的视图。过滤器使用 FilterChain 调用链中的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。

问题:怎样可以形成一个Filter链?

只要多个Filter对同一个资源进行拦截就可以形成Filter链

问题:怎样确定Filter的执行顺序?

由<filter-mapping>来确定,在web.xml文件中哪一个过滤器的<filter-mapping>放到了前面谁就先执行。

3.5、Filter的生命周期

Servlet 生命周期:

实例化 -- 》 初始化 -- 》 服务 -- 》 销毁

当服务器 启动 ,会创建 Filter 对象,并调用 init 方法,只调用一次 .

当访问资源时,路径与 Filter 的拦截路径匹配,会执行 Filter 中的 doFilter 方法,这个方法是真正拦截操作的方法 .

当服务器关闭时,会调用 Filter 的 destroy 方法来进行销毁操作 .

3.6、FilterConfig

在Filter的init方法上有一个参数,类型就是FilterConfig.

FilterConfig它是Filter的配置对象,它可以完成下列功能

1.获取Filtr名称

2.获取Filter初始化参数

3.获取ServletContext对象。

怎么获取到一个filterConfig对象

fiterConfig中的方法

实例:获取web.xml文件中的字符编码,用来过滤,告知服务器请求用的是什么编码。

package com.jxlg.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilterConfig implements Filter {

    private FilterConfig filterConfig;

    @Override
    public void destroy() {
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //通过filterConfig来获取配置信息中的初始化参数
        String encoding = filterConfig.getInitParameter("encoding");
        request.setCharacterEncoding(encoding);
        chain.doFilter(request, response);//放行
        
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

}

View Code

web.xml中的配置信息

<filter>
      <filter-name>MyFilterConfig</filter-name>
      <filter-class>com.jxlg.filter.MyFilterConfig</filter-class>
      <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>MyFilterConfig</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

View Code

3.7、Filter配置

基本配置

<filter>

<filter-name>filter名称</filter-name>

<filter-class>Filter类的包名.类名</filter-class>

</filter>

<filter-mapping>

<filter-name>filter名称</filter-name>

<url-pattern>路径</url-pattern>

</filter-mapping>

关于其它配置

1.<url-pattern>

完全匹配 以”/demo1”开始,不包含通配符*

目录匹配 以”/”开始 以*结束

扩展名匹配 *.xxx 不能写成/*.xxx

2.<servlet-name>

它是对指定的servlet名称的servlet进行拦截的。

3.<dispatcher>

可以取的值有 REQUEST FORWARD ERROR INCLUDE

它的作用是:当以什么方式去访问web资源时,进行拦截操作.

1.REQUEST 当是从浏览器直接访问资源,或是重定向到某个资源时进行拦截方式配置的 它也是默认值

2.FORWARD 它描述的是请求转发的拦截方式配置

3.ERROR 如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

4.INCLUDE 如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

四、使用Fliter实现自动登录

这个例子就是一个简单的登录验证与数据库交互,我们使用Fliter来实现自动登录。

思路分析:

login.jsp

${msg}
    <form action="${pageContext.request.contextPath }/servlet/findUserServlet" action="post">
        用户名:<input type="text" name="username" /></br>
        密码:<input type="password" name="password" /></br>
        <input type="checkbox" name="autoLogin" />自动登陆</br>
        <input type="submit" value="提交"/>
    </form>

View Code

FindUserServlet.java

这里获取了表单提交的数据,然后如果按了自动登录,我们就会把用户名和密码保存到cooki中去

package com.jxlg.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jxlg.web.domain.User;
import com.jxlg.web.service.UserService;

public class FindUserServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取表单数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //处理业务逻辑
        UserService us = new UserService();
        User user = us.findUser(username,password);
        if(user!=null){
            String autoLogin = request.getParameter("autoLogin");
            Cookie cookie = new Cookie("user",user.getUsername()+"&"+user.getPassword());
            cookie.setPath("/");
            if(autoLogin!=null){//将用户名和密码保存到cookie中
                cookie.setMaxAge(60*60*24*7);
            }else{//清除cookie
                cookie.setMaxAge(0);
            }
            response.addCookie(cookie);    //把cookie保存到客户端
            request.getSession().setAttribute("u", user);
            request.getRequestDispatcher("/home.jsp").forward(request, response);
        }else{
            request.setAttribute("msg", "用户名或密码输入错误,请重新登陆");
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }

    }

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

}

View Code

UserService

这里是service业务层代码

ackage com.jxlg.web.service;

import java.sql.SQLException;

import com.jxlg.Dao.UserDao;
import com.jxlg.web.domain.User;

public class UserService {
    UserDao ud = new UserDao();
    public User findUser(String username, String password) {
        try {
            return ud.findUser(username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

}

View Code

UserDao

这里是DAO实现类,与数据库交互,我这里是用的是C3P0连接池,和dbUtils与数据库交互

package com.jxlg.Dao;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import com.jxlg.util.C3P0Util;
import com.jxlg.web.domain.User;

public class UserDao {

    public User findUser(String username, String password) throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Util.getDateSource());
        return qr.query("select * from user where username=? and password=?", new BeanHandler<User>(User.class),username,password);
    }

}

View Code

home.jsp

登录成功跳转的界面

<body>
    欢迎你:${u.username }
</body>

View Code

MyFilter

这是一个过滤器,记住一定要去web.xml配置,如果我们在longin.jsp中选择了自动登录的话,我们可以直接访问home.jsp实现自动登录。

package com.jxlg.web.domain;

import java.io.IOException;

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.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jxlg.web.service.UserService;

public class MyFilter implements Filter{

    @Override
    public void destroy() {
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain Chain) throws IOException, ServletException {
        //转化两个对象
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse res = (HttpServletResponse) response;
        String uri = req.getRequestURI();
//        System.out.println(uri);    ///StudentLogin/login.jsp    
        String path = req.getContextPath();
        path = uri.substring(path.length());
//        System.out.println(path);    ///login.jsp
        if("/login.jsp".equals(path)||"/servlet/findUserServlet".equals(path)){
            User user = (User) req.getSession().getAttribute("u");
            //如果用户没有登录过,我们就执行登录操作。
            if(user==null){
        //得到cookies数组
        Cookie[] cookies = req.getCookies();
        String username="";
        String password="";
        //从cookie中找到想要的user对象
        for(int i=0;cookies!=null&&i<cookies.length;i++){
            if("user".equals(cookies[i].getName())){
                String value = cookies[i].getValue();    //tom&123
                String[] values = value.split("&");
                username = values[0];
                password = values[1];
            }
        }
        //执行登录操作
        UserService us = new UserService();
        User  u = us.findUser(username, password);
        
        //如果登录成功,把user保存到session中
        if(user!=null){
        req.getSession().setAttribute("u", u);
        }
        }
        }
        //放行
        Chain.doFilter(request, response);
    }

View Code

开发中遇到的问题

1.在写MyFilter中,在遍历保存在客户端的cookie的时候,我没有家伙写cookies!=null,这样会导致空指针异常

2.在使用HttpServletRequest时,记住在Filter中一定要记住,进行转化,因为在Filter中是ServletRequest对象。

3.因为我在Filter中web.xml文件中配置的url-pattern是当前应用的所有url,所以当我们请求的每一个资源都会调用Filter进行过滤,但是我们并不需要在login.jsp等也自动登录,所以就记得要排除掉这些。

提供源码,收好不谢:

链接:http://pan.baidu.com/s/1c1K6UJ2 密码:mewe

五、全局编码的过滤器

前言:

使用过滤器对post请求的乱码进行过滤,测试之后是没有问题的,但是当我们是get请求的时候,我们该怎么去处理呢?

怎样可以做成一个通用的,可以处理post,get所有的请求的?

在java中怎样可以对一个方法进行功能增强?

1.继承

2.装饰设计模式

1.创建一个类让它与被装饰类实现同一个接口或继承同一个父类

2.在装饰类中持有一个被装饰类的引用

3.重写要增强的方法

分析:我们获取请求参数无非就三种方式:getParameter、getParameterValues、getParameterMap.

我们知道getParameter与getParameterValue方法可以依赖于getParamterMap方法来实现。

login.jsp

<body>
    <form action="${pageContext.request.contextPath }/servlet/loginServlet" method="get">
        username:<input type="text" name="username"/><br/>
        username:<input type="text" name="username1"/><br/>
        <input type="submit" value="登录" /><br/>
    </form>
</body>

View Code

LoginServlet

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    
        String name1 = request.getParameter("username1");
        String name = request.getParameterValues("username")[0];
        System.out.println(name);
        System.out.println(name1);
        
    }

View Code

MyFilter

package com.itheima.filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;

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.HttpServletRequestWrapper;

public class MyFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        // 解决post方式
        // req.setCharacterEncoding("UTF-8");
        req = new MyRequest(req);

        chain.doFilter(req, response);
    }

    public void destroy() {
    }
}

// 实现与被包装对象相同的接口
// 定义一个与被包装类相对象的引用
// 定义一个构造方法,把被包装对象传过来
// 对于不需要改写方法,直接调用
// 对于无需要改写方法,写自己的方法体
class MyRequest extends HttpServletRequestWrapper {
    HttpServletRequest request;    // 是用于接收外部传递的原始的request

    public MyRequest(HttpServletRequest request) {
        super(request);// 是因为父类没有无参数构造
        this.request = request;
    }

    /*
     * @Override public String getParameter(String name) { name =
     * request.getParameter(name);//乱码 try { return new
     * String(name.getBytes("iso-8859-1"),"UTF-8"); } catch
     * (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }
     */

    @Override
    public String getParameter(String name) {
        Map<String, String[]> map = getParameterMap();
        return map.get(name)[0];
    }

    @Override
    public String[] getParameterValues(String name) {
        Map<String, String[]> map = getParameterMap();
        return map.get(name);
    }

    private boolean flag = true;

    @Override
    public Map<String, String[]> getParameterMap() {
        Map<String, String[]> map = request.getParameterMap();// 乱码
        if (flag) {
            for (Map.Entry<String, String[]> m : map.entrySet()) {
                String[] values = m.getValue();
                for (int i = 0; i < values.length; i++) {
                    try {
                        values[i] = new String(
                                values[i].getBytes("iso-8859-1"), "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }

            }
            flag = false;
        }
        return map;

    }

}

View Code
JavaWeb三大组件   Servlet,Filter,Listener JavaWeb三大组件: Servlet,Filter,Listener 1 Servlet 在Java web b/s架构中,servlet扮演了重要的角色,作为一个中转处理的容器,他连接了客户端和服务器端的信息交互和处理。简单来说,客户端发送请求,传递到servlet容器,而servlet将数据转换成服务器端可以处理的数据再发送给服务器端,再数据处理之后,再传递到servlet容器,servlet再转译到客户端,完成了一次客户端和服务器端的信息交互。   Servlet是通过Java编写的,因为他也具备 阅读详情

相关推荐

BEVFusion(mit)最强环境安装,部署复现

BEVFusion作为一项经典的工作,值得深入探索。然而由于配置环境比较麻烦,耽误了一些时间。经过几次成功配置之后,有了一些总结,在这里记录下来,供大家参考避坑,也方便自己下次查阅。

qq_45783225的博客 1万+

Filter&Listener(过滤器和监听器)

Java中的过滤器(Filter)和监听器(Listener)是两种不同的概念。 过滤器(Filter)是在Java Web应用程序中,用来拦截和修改进入或离开web应用程序的请求和响应的对象。监听器(Listener)是一种用于监听和响应特定事件的Java对象。

小林的博客 1272

PT32F030与MT6826S SPI通讯实战:从硬件连接到数据交互全流程解析

本文详细解析了PT32F030与MT6826S通过SPI通讯的全流程,包括硬件连接、电路设计、SPI外设初始化配置以及数据交互协议实现。通过实战案例和代码示例,帮助开发者快速掌握PT32F030与MT6826S的SPI通讯技术,实现精准的角度和速度数据采集。

weixin_29189373的博客 420

Web-listener与filter

1、Listener的定义与作用   监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。   Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。 2、Listener的分类与使用   主要有以下三类:   1、ServletContext监听   Serv

马万明的专栏 1139

SAP PS模块实战指南:从项目启动到结算的全流程解析

本文详细解析SAP PS模块在项目管理中的全流程应用,从项目启动到结算的关键操作与实战技巧。通过WBS设计、预算控制和资源调配等核心功能,帮助管理者高效协调项目进度与成本,特别适用于交付型和成本型项目管理。掌握PS模块能显著提升项目管理效率与精准度。

weixin_42553471的博客 448

naca翼型_STARCCM+计算二维翼型气动性能

STAR-CCM+计算二维翼型气动性能一算例背景机翼理论主要研究翼型在流体中运动时的力学特性。在工程领域中,机翼以升力面、控制面、叶片或桨叶等形式出现。舰船上的舵、水翼、减摇鳍等都是机翼,螺旋桨、汽轮机叶片和压缩机叶片也都是利用机翼原理工作的,而在研究船舶操纵性时,甚至还可把船体的水下部分看作一个巨大的机翼。随着航空科学的发展,世界各主要航空发达的国家建立了各种翼型系列。美国有NACA系...

weixin_39863741的博客 1万+

Ajax的使用

概念(Asynchronous JavaScript And XML):AJAX:异步的JavaScript和xml编写AjaxServlet,并使用response输出字符串 创建 XMLHttpRequest 对象:用于和服务器交换数据 向服务器发送请求 获取服务器响应数据 异步请求的好处?Ajax开发分哪2个部分后台获取参数,request.getReader(); request.getParameter(“”)封装参数, JSON.parseObject()调用service,

MRhan6的博客 244

缠论 公式 自动画线 画笔 中枢 买卖点 源代码

【代码】缠论 公式 自动画线 画笔 中枢 买卖点 源代码。

weixin_40835859的博客 2万+

JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用

JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param--&gt;listener--&gt;filter--&gt;servlet; 而拦截器是在Spring MVC中配置的,如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param--&gt;listener-...

lncsdn_123的博客 573

Open3D 可视化(1)——简单可视化【2026最新版】

简单可视化,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 5685

财务数智化——解读224页 2025年数智技术业财融合应用蓝皮书【附全文阅读】

《数智技术赋能业财融合蓝皮书》面向企业管理者及数字化转型从业者,系统阐述数智技术在业财融合中的应用。全书围绕技术基础(定义、分类、发展趋势)、融合框架(三阶段路径与三层价值)、七大行业应用场景(涵盖核算自动化、智能收款、项目管控等)、关键技术(AI、大数据等)及实施要点(组织协同、数据治理等),通过典型案例为企业提供从技术到实践的全面指导,助力实现数据贯通与价值创造。

cdfunlove的博客 1747

web.xml 中的过滤器(拦截器)Filter与监听器Listener的作用和区别?

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是

3万+

《PLECS仿真与实战:从建模到高端应用》-专栏文件目录

《PLECS仿真与实战:从建模到高端应用》是一本系统介绍PLECS电力电子仿真软件的实用指南。全书共10章,首先介绍软件安装与基础操作,包括RC电路仿真等入门内容;随后深入讲解各类电力电子电路的建模与仿真,涵盖整流、交交变换、直流变换、逆变等电路;最后探讨PWM控制建模和直流调速系统等高端应用。书中配有丰富的示例程序和波形分析方法,附录还包含电力电子器件、代码生成等实用资料。该书适合电力电子领域工程师和学生系统学习电路仿真技术。

542

JavaWeb之Filter和Listener

本文主要讲解JavaWeb三大组件之二,Filter和Listener。过滤器相当于浏览器与 Web 资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求进行修改、判断以及拦截等,也可以对响应进行修改、判断以及拦截等。监听器:用来监听 Servlet 容器产生的事件并进行相应的处理。

小小张自由—>张有博 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JavaWeb的三大组件 —— Servlet、Filter和Listener

JavaWeb的三大组件Servlet、Filter和Listener各自具有独特的功能和生命周期,它们共同构成了JavaWeb应用程序的基础架构。Servlet用于处理HTTP请求和响应,Filter用于在请求和响应之间执行通用操作,Listener用于监听Web应用程序中的事件。通过合理使用这三大组件,可以开发出功能丰富、性能优良的Web应用程序。

Q_Boom的博客 805

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JavaWeb08-Filter和Listener

Filter 表示过滤器,是JavaWeb 三大组件(Servlet、Filter、Listener)之一Listener 表示监听器,是JavaWeb 三大组件(Servlet、Filter、Listener)之一。

qq_33627452的博客 792

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JavaWeb Listener、Filter 、Interceptor 和servlet总结

JavaWeb Listener、Filter 和Interceptor servlet总结 web.xml的加载顺序是:【Context-Param】->【Listener】->【Filter】->【Servlet】,而同个类型之间的实际程序调用的时候的顺序是根据对应的Mapping的顺序进行调用。 servlet、filter、listener是配置到web.xml中,i...

tour9566的博客 326

JavaWeb三大组件【Servlet】【Filter】【Listener】学习笔记

本文主要详细讲解JavaWeb的三大组件:Servlet、Filter、Listener。内容包括三者的基本语法、用法,同时包含一个三者的综合案例,同时案例富有详细的解说

热爱编程、热爱生活、热爱探索 3179

JavaWeb笔记(会话跟踪、Filter、Listener)

JavaWeb笔记(会话跟踪、Filter、Listener)

LLM | Agent | RAG | Java 1974

JavaWeb三大组件【Servlet、Filter、Listener】

目录 引言 Filter Listener 引言 JavaWeb三大组件指的是:Servlet、Filter、Listener,这三个组件在JavaWeb开发中分别提供不同的功能。Servlet 是 JavaWeb 的三大组件之一,它属于动态资源,前面文章有写到(请参考):web阶段~Servlet学习_乔巴菌儿的博客-优快云博客 今天,我们将进行Filter(过滤器)与Listener(监听器)的学习。 Filter 【概念】 web中的过滤器:当访问服务器的资源时,过滤器可以将.

乔巴俊儿~~的博客 2674

Javaweb之Filter和Listener

Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。Servlet 我们之前都已经学习过了,Filter和Listener 我们今天都会进行学习。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。如下图所示,浏览器可以访问服务器上的所有的资源(servlet、jsp、html等)而在访问到这些资源之前可以使过滤器拦截来下,也就是说在访问资源之前会先经过 Filter,如下图。

lpblog的博客 362

JavaWeb快速入门: Filter与Listener核心详解

本文介绍了JavaWeb中的Filter和Listener两大组件。Filter用于拦截请求/响应,实现统一处理逻辑(如登录验证、编码设置),执行流程为"放行前→目标资源→放行后"。可通过@WebFilter配置拦截路径,多个过滤器形成链式调用,按类名顺序执行。Listener用于监听Web应用事件(如ServletContext生命周期)。两者结合可实现通用功能的解耦,提升代码复用性。

Wang的专栏 528

11分钟学习JavaWeb中Listener和Filter

本人博客: https://blog.onfree.cn (●ˇ∀ˇ●) 11分钟学习JavaWeb中Listener和Filter 别迷惘,别烦恼,加速吧,只要行动就好,别停下,迷惘什么的一点都不像你,像那样纵身轻跃,拾级而上,就像那一天一样,让我再次追逐你的身影,我的英雄 一、Listener 监听器 能做什么事? 监听某一个事件的发生和状态的改变。 监听器的内部机...

Athink_ 334

JavaWeb——Filter and Listener

JavaWeb三大组件:Servlet、Filter、Listener 1.Filter(过滤器) 1.1.概念 Web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截,完成一些特殊的功能 1.2.过滤器的作用 一般用于完成通用的操作,如登陆验证、统一编码处理、敏感字符过滤等 1.3.过滤器快速入门 步骤: 1.定义一个类,实现接口Filter 2.覆写方法 3.配置拦截路径 ...

LiLiLiLaLa的博客 480

Javaweb的三大组件:servlet、filter、listener

Servlet翻译过来是小服务程序,所以呢,在javaweb中Servlet是用来处理客户端请求的动态资源,一般表示小程序,在实际开发javaweb的过程中使用的比较多一些,通常的使用方法是根据具体的业务需求来继承HttpServlet,最后创建Servlet。Servlet的生命周期是,初始化Servlet调用init()方法——调用服务service()方法进行处理doGet和doPost()方法—最后关闭容器调用destroy()销毁方法。

weixin_58545784的博客 263
上一篇: Class文件解析实战
下一篇: 2020年6月最新一线互联网大厂Java工程师面试真题分享
无聊的狗子
博客等级 码龄6年 20粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值