首页 > 其他分享 >MVC三层架构、Filter、监听器

MVC三层架构、Filter、监听器

时间:2022-11-20 17:11:10浏览次数:38  
标签:public Filter MVC 监听器 Integer new response onlineCount

MVC三层架构

  • 什么是MVC:Model View Controller 模型、视图、控制器

早些年

  • 用户直接访问控制层,控制层就可以直接操作数据库
servlet--CRUD--数据库
弊端:程序十分臃肿,不利于维护
servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码

架构:没有什么是加一层解决不了的!如果不够再加一层
程序员调用
|
JDBC
|
Mysql Oracle SqlServer...

MVC三层架构

  • Model
    • 业务处理:业务逻辑(Service)
    • 数据持久层:CRUD(Dao)
  • View
    • 展示数据
    • 提供链接发起Servlet请求(a,form,img...)
      -Controller(Servlet)
    • 接收用户的请求:(req:请求参数、Session信息...)
    • 交给业务层处理对应的代码
    • 控制视图的跳转
      登录-->接受用户的登录请求-->处理用户的请求(获取用户登录的参数,username,password)-->交给业务层处理登录业务(判断用户名密码是否正确:事务)-->Dao层查询用户名和密码是否正确-->数据库

Filter(重点)

  • Filter:过滤器,用来过滤网站的数据
    • 处理中文乱码
    • 登录验证...
  • Filter开发步骤:
    • 1.导包
    • 2.编写过滤器
      • 导包不要错
      • 实现Filter接口,重写对应的方法即可
public class CharacterEncodingFilter implements Filter {

    //初始化:web服务器启动,就已经初始化了,随时等待过滤对象出现!
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("CharacterEncodingFilter初始化");
    }

    //Chain:链
    /*
    1.过滤中的所有代码,在过滤特定请求的时候都会执行
    2.必须要让过滤器继续同行
    chain.doFilter(request,response);

    */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-16");
        response.setCharacterEncoding("utf-16");
        response.setContentType("text/html;charset=utf-16");

        System.out.println("CharacterEncodingFilter执行前...");
        chain.doFilter(request,response);//让我们的请求继续走,如果不写,程序到这就被拦截停止了
        System.out.println("CharacterEncodingFilter执行后...");
    }

    //销毁
    public void destroy() {
        System.out.println("CharacterEncodingFilter销毁");
    }
}
  • 3.在web.xml中配置Filter
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>com.song.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <!--只要是/servlet的任何请求,都会经过这个过滤器-->
    <url-pattern>/servlet/*</url-pattern>
</filter-mapping>

监听器

  • 实现一个监听器的接口;(有N种)
  • 1.编写一个监听器
    • 实现监听器的接口
//统计网站在线人数:统计session
public class OnlineCountListener implements HttpSessionListener {

    //创建session监听
    //一旦创建一个session就会触发一次这个事件!
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext ctx = se.getSession().getServletContext();

        System.out.println(se.getSession().getId());

        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");

        if (onlineCount==null){
            onlineCount = new Integer(1);
        }else{
            int count = onlineCount.intValue();

            onlineCount = new Integer(count+1);
        }
        ctx.setAttribute("OnlineCount",onlineCount);
    }

    //销毁session监听
    //一旦销毁一个session就会触发一次这个事件!
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext ctx = se.getSession().getServletContext();

        Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");

        if (onlineCount==null){
            onlineCount = new Integer(0);
        }else{
            int count = onlineCount.intValue();

            onlineCount = new Integer(count-1);
        }
        ctx.setAttribute("OnlineCount",onlineCount);
    }
    /*
    Session销毁:
    1.手动销毁 getSession().invalidate();
    2.自动销毁
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>
    */
}
  • 2.web.xml注册监听器
<!--注册监听器-->
<listener>
    <listener-class>com.song.listener.OnlineCountListener</listener-class>
</listener>
  • 3.看情况是否使用!

过滤器、监听器常见应用

  • 监听器:GUI编程中经常使用
public class TestPanel {
    public static void main(String[] args) {
        Frame frame = new Frame("中秋节快乐!");//新建一个窗体
        Panel panel = new Panel(null);//面板
        frame.setLayout(null);//设置窗体的布局
        
        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(0,0,255));
        
        panel.setBounds(50,50,300,300);
        panel.setBackground(new Color(0,255,0));
        
        frame.add(panel);
        frame.setVisible(true);
        
        //监听事件,监听关闭事件
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                super.windowClosing(e);
            }
        });
    }
}
  • 用户登录之后才能进入主页!用户注销后就不能进入主页了!
    • 1.用户登录之后,向Session中放入用户的数据
    • 2.进入主页的时候要判断用户是否已经登录
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;

Object user_session = request.getSession().getAttribute("USER_SESSION");

if (request.getSession().getAttribute("USER_SESSION")==null){
    response.sendRedirect("/erroe.jsp");
}

chain.doFilter(request,response);

标签:public,Filter,MVC,监听器,Integer,new,response,onlineCount
From: https://www.cnblogs.com/song-hua/p/16908936.html

相关文章

  • 【Unity3D】Unity 组件 ① ( 组件 Component 概念 | Transform 组件和 Light 组件 | M
    文章目录​​一、组件Component概念​​​​二、Transform组件和Light组件​​​​三、MeshFilter组件和MeshRenderer组件​​一、组件Component概念组件Comp......
  • SpringMVC - 初识Springmvc
    一、SpringMVC案例在springmvc配置文件中配置扫描器<!--base-package:表示扫描路径--!><context:component-scanbase-package="com.xin"></context:component-scan>创......
  • SpringMVC - 环境搭建
    一、MVC介绍M(model): 数据层。有两种数据,第一种java实体类,第二种daoV(view):视图层。HTML,jsp页面等。C(Controller):控制层。二、SpringMVC的环境搭建1.创建maven......
  • springmvc九yxf学RequestParam
    源码可以看出RequestParam是用在参数上的,再看,这个注解的源码比较少。required,这是设置是否必须有这个参数。defaultValue,是可以省略的意思,就是这个参数......
  • 第4章SpringMVC核心技术-一个或者多个拦截器拦截器,
    第4章SpringMVC核心技术.拦截器拦截器SpringMVC中的Interceptor拦截器是非常重要和相当有用的,它的主要作用是拦截指定Java框架SpringMVC5的用户请求,并进行相应的预......
  • 第4章SpringMVC核心技术2异常处理
    第4章SpringMVC核心技术2异常处理SpringMVC框架处理异常的常用方式:使用@ExceptionHandler注解处理异常。项目结构如下:2.1@ExceptionHandler注解使用注解@Exce......
  • SpringMVC-拦截器
    一、拦截器SpringMVC提供了拦截器在处理请求之前,之后,渲染视图后执行逻辑处理。接口是HandlerInterceptor。preHandle方法在处理请求之前执行,postHandle方法是在处理请求后......
  • 第4章SpringMVC核心技术-请求转发和重定向
    第4章SpringMVC核心技术-请求转发和重定向1请求重定向和转发概念当处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式:请求转发与重定向。而根据所要跳转......
  • 自定义web3.py ETH filter
    #Event_Filters[Contract_Heromint_Address]={#'contract':Contract_NFT,#'events':{#'HeroCreated':{'filter':None,'polled':False},#......
  • SpringMVC-处理异常
    DispatcherServlet.doDispatchprotectedvoiddoDispatch(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{ HttpServletRequestprocess......