过滤器、监听器和Linux常用命令

一、Filter

        1、基本概念:Filter本意为”过滤“的含义,是JavaWeb的三大组件之一,三大组件为:Servlet、Filter、 Listener。 过滤器是向 Web 应用程序的请求和响应处理添加功能的 Web 服务组件。 过滤器相当于浏览器与Web资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求 进行修改、判断以及拦截等,也可以对响应进行修改、判断以及拦截等。

        2、工作方式:

        3、代码实现

        FilterLogin:
package student.filter;

import student.bean.User;
import student.service.UserService;
import student.service.com.student.service.impl.UserServiceImpl;
import student.utils.CookieUtils;

import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class FilterLogin implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 实现对用户访问主页面的过滤操作,也就是只有用户登录后才能访问主页面,否则一律拦截
        // 判断session中是否已有用户名信息,若没有则进行拦截,否则放行
        HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
        User existUser= (User) httpServletRequest.getSession().getAttribute("existUser");
        if (existUser!=null){
            filterChain.doFilter(servletRequest,servletResponse);
        }else {
            Cookie[] cookies=httpServletRequest.getCookies();
            Cookie cookie = CookieUtils.getCookie(cookies, "autoLogin");
            if (cookie!=null){
                String value=cookie.getValue();//usename+#lagou#+password
                String[] strs = value.split("#lagou#");
                UserService userService=new UserServiceImpl();
                User user=userService.findByUsername(strs[0]);
                if(user!=null){//说明存在此用户
                    if(strs[1].equals(user.getPassword())){//当cookie中的密码等于数据库中根据用户名查到的密码
                        //数据吻合,放行
                        httpServletRequest.getSession().setAttribute("existUser", user);
                        filterChain.doFilter(servletRequest,servletResponse);
                    }else{
                        // 登录失败,转到登录页面
                        filterChain.doFilter(servletRequest,servletResponse);
                        servletRequest.getRequestDispatcher("index.jsp").forward(servletRequest, servletResponse);
                    }
                }else{
                    //cookie里的用户与数据库用户不匹配
                    filterChain.doFilter(servletRequest,servletResponse);
                    servletRequest.getRequestDispatcher("index.jsp").forward(servletRequest, servletResponse);
                }
            }else {
                //没有该cookie
                filterChain.doFilter(servletRequest,servletResponse);
                servletRequest.getRequestDispatcher("index.jsp").forward(servletRequest, servletResponse);
            }
        }





    }

    @Override
    public void destroy() {

    }
}

                 配置文件:

 <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>student.filter.FilterLogin</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

        4、Filter接口

                ①、概念:javax.servlet.Filter接口主要用于描述过滤器对象,可以对资源的请求和资源的响应操作进行筛选 操作。

                ②、常用方法:

        5、FilterConfig接口

                ①、概念:javax.servlet.FilterConfig接口主要用于描述过滤器的配置信息。

                ②、常用方法:

         6、过滤器链

                ①、概念:过滤器链指的是 一组过滤器对某些WEB资源进行过滤,那么这组过滤器称为是过滤器链。

                ②、工作方式:

                如果有多个过滤器都满足过滤的条件,则容器依据映射的先后顺序来调用各个过滤器。

         7、Filter的生命周期:

                ①、服务器启动的时候,服务器创建一个代表过滤器对象,过滤器中init方法就会执行了;

                ②、当过滤器过滤到要进行拦截的资源的路径的时候,doFilter方法就会执行;

                ③、当服务器关闭的时候.销毁过滤器对象.destroy方法就会执行。

        8、过滤器的优点:实现代码的“可插拔性”,即增加或减少某个功能模块,不会影响程序的正常执行。 可以将多个相同处理逻辑的模块集中写在过滤器里面,可实现重复利用、也方便代码的维护。

二、listener

        1、基本概念:Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理。 容器产生的事件分类如下: 生命周期相关的事件。 属性状态相关的事件。 存值状态相关的事件。 底层原理是采用接口回调的方式实现。

        2、基本分类:

         3、监听器常用方法

                ①、ServletRequestListener监听器

                 ②、ServletRequestAttributeListener监听器

                 ③、HttpSessionListener监听器

                 ④、HttpSessionAttributeListener监听器

                 ⑤、ServletContextListener监听器

                 ⑥、ServletContextAttributeListener监听器

                 ⑦、HttpSessionBindingListener监听器

                 ⑧、HttpSessionActivationListener监听器

         4、代码实现:                

        OnlineUserListener:
package student.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class OnlineUserListener implements HttpSessionListener, ServletContextListener {
    private ServletContext servletContext = null;
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        servletContext = servletContextEvent.getServletContext();
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        servletContext = null;
    }

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("有新用户上线了...");
        Object count = servletContext.getAttribute("count");
        // 若当前用户为第一个用户,则将全局对象中的属性值设置为1即可
        if (null == count) {
            servletContext.setAttribute("count", 1);
        }
        // 若当前用户不是第一个用户,则将全局对象中原有的数据取出来加1后再设置进去
        else {
            Integer integer = (Integer)count;
            integer++;
            servletContext.setAttribute("count", integer);
        }
        System.out.println("当前在线用户数量为:" + servletContext.getAttribute("count"));
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("有用户已下线...");
    }
}

                 配置文件:

<listener>
        <listener-class>student.listener.OnlineUserListener</listener-class>
    </listener>

三、Linux常用命令 

        1、查看目录下文件/目录

        2、 目录切换

         3、查看完整路径

         4、查看当前用户

         5、用户切换

         6、管理用户

         7、查看命令的所在目录

         8、文件操作

         9、目录操作

         10、查找操作

         11、权限管理

         12、进程管理

        13、 其它命令

 四、vi工具的使用

        1、命令模式的编辑命令

i:在当前位置之前插入
a:在当前位置之后插入
o:在当前行下插入

         2、命令行模式的删除命令

x 删除一个字符
dw 删除当前词
3dw 删除三个词
dd 删除当前行
5dd 删除五行

         3、命令行模式的修改命令

r 替换一个字符
cw 替换一个单词
cc 替换一行
C 替换从光标至行尾

        4、命令行模式的拷贝命令

yw 拷贝词
yy 拷贝行(或Y)
dd 剪切行
p 当前行下粘贴
u 撤销
ctrl+r 取消撤销

        5、底行模式的命令

:w 存盘
:w newfile 存成新文件
:wq 存盘退出Vi(或ZZ,或:x)
:q! 强行退出不存盘
:1,2co3 拷贝行1,行2在行3之后
:4,5mo6 移动行4,行5在行6之后
:%s /源字符串/目标字符串
:%s /源字符串/目标字符串/g 替换每一行中的所有

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值