首页 > 其他分享 >MVC三层架构,过滤器、监听器及常见应用

MVC三层架构,过滤器、监听器及常见应用

时间:2023-07-15 18:36:03浏览次数:29  
标签:void onlineCount Override MVC 监听器 WindowEvent 过滤器 public

MVC三层架构

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

10.1早些年

控制器Controller Servlet:

  • 接收用户的请求
  • 响应给客户端内容
  • 重定向或者转发

视图层View JSP:

  • 展示数据
  • 提供可以供我们操作的请求

Servlet和JSP都可以写JAVA代码;为了易于维护和使用;Servlet专注于请求处理,以及控制视图跳转;JSP专注于显示数据。

用户直接访问控制层,控制层可以直接操作数据库。

servlet--CRUD-->数据库
弊端:程序十分臃肿,不利于维护 
servlet的代码中:处理请求,响应,视图跳转,处理JDBC,处理业务代码,处理逻辑代码
架构:没有什么是加一层解决不了的!
 程序员调用
  |
 JDBC
  |
 Mysql Oracle SqlServlet

10.2MVC三层架构

控制器Controller Servlet:

  • 接收用户的请求
  • 交给业务层去做
  • 视图跳转

视图层View JSP:

  • 展示数据
  • 提供用户操作

控制器向视图层转发或者重定向;

视图层向控制器操作。

Model

  • 业务处理:业务逻辑(Service)
  • 数据持久层:CRUD(Dao)

View

  • 展示数据
  • 提供链接发起Servlet请求(a,form,img...)

Controller(Servlet)

  • 接收用户请求:(req:请求参数,Session信息...)

  • 交给业务层处理对应的代码

  • 控制视图的跳转

    登录--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数:username,password)-->交给业务层处理登录业务(判断用户名密码是否正确,事务)--->Dao层查询用户名和密码是否正确-->数据库
    

Filter

Filter:过滤器,用来过滤网站的数据。

  • 处理中文乱码
  • 登录验证

Filter开发步骤

  1. 导包不要错,一定要导到import java.servlet.Filter;包
  2. 编写过滤器
  • 过滤中的所有代码,在过滤器特定的请求的时候都会执行

  • 必须要让过滤器继续同行

  • 实现Filter接口,重写对应的方法即可

  • 在web.xml中配置Filter

监听器

实现一个监听器的接口;(有N种)

  1. 编写一个监听器

    实现监听器的接口

    package listener;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListene;
    //统计网站在线人数,统计session
    public class OnlineCountListener implements HttpSessionListener{
        //创建session监听:看你的一举一动
        //一旦创建Session就会触发这个事件
        public void sessionCreated(HttpSessionEvent se){
        ServletContext ctx=se.getSession().serServletContext();
        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就会触发一次这个事件
        public void sessionDestroyed(HttpSessionEvent se){
            ServletContext ctx=se.getSession().serServletContext();
            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销毁的两种情况
        * 1. 手动销毁
        * 2. 自动销毁
        * */
    }
    
  2. web.xml中注册监听器

    <listener>
            <listener-class>com.OnlineCountListener</listener-class>
        </listener>
    
  3. 看情况是否使用。

过滤器、监听器的常见应用

监听器:GUI编程中经常使用

package listener;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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);
        frame.setBackground(new Color(0,255,0));
        frame.add(panel);
        frame.setVisible(true);
        //监听事件,监听关闭事件
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowOpened(WindowEvent e) {
                System.out.println("打开");
            }

            @Override
            public void windowClosing(WindowEvent e) {
                System.out.println("关闭ing");
            }

            @Override
            public void windowClosed(WindowEvent e) {
                System.out.println("打开ed");
            }

            @Override
            public void windowIconified(WindowEvent e) {
                super.windowIconified(e);
            }

            @Override
            public void windowDeiconified(WindowEvent e) {
                super.windowDeiconified(e);
            }

            @Override
            public void windowActivated(WindowEvent e) {
                System.out.println("激活");;
            }

            @Override
            public void windowDeactivated(WindowEvent e) {
                System.out.println("未激活");
            }

            @Override
            public void windowStateChanged(WindowEvent e) {
                super.windowStateChanged(e);
            }

            @Override
            public void windowGainedFocus(WindowEvent e) {
                super.windowGainedFocus(e);
            }

            @Override
            public void windowLostFocus(WindowEvent e) {
                super.windowLostFocus(e);
            }
        });
    }
}

用户登录之后才能进入主页,注销之后就不能进入主页了。

  1. 用户登录之后,向session中放入用户的数据。

  2. 进入主页的时候要判断用户是否已经登录;要求:在过滤器中实现。

    HttpServletRequest request=(HttpServletRequest) req;
    HttpServletResponse response=(HttpServletResponse) resp;
    if(request.getSession().getAttribute(Constant.USER_SESSION)==null){
        response.sendRedirect("/reeor.jsp");
    }
    chain.doFilter(request,response);
    

标签:void,onlineCount,Override,MVC,监听器,WindowEvent,过滤器,public
From: https://www.cnblogs.com/sx-xiaoL/p/17556652.html

相关文章

  • 创建Spring Boot+Spring MVC+Mybatis Demo项目
    参考资料IDEA搭建Springboot+SpringMVC+Mybatis+Mysql(详细、易懂)创建项目创建多个目录把application.properties改成yml格式并补充配置mysql中创建数据库和表createdatabasedb1;usedb1;createtable`user`( `id`INTUNSIGNEDAUTO_INCREMENT, `name`VARCHAR(......
  • java过滤器塞不进去参数原因
    Java过滤器塞不进去参数原因解决方法作为一名经验丰富的开发者,我将为你解释在Java中为什么过滤器无法将参数传递,并提供解决方法。首先,让我们看一下整个过程的步骤:步骤操作1在Web.xml中配置过滤器2创建过滤器类3在过滤器类中获取和处理参数步骤1:在Web.xml中......
  • ASP.NET MVC4 WEB API跨域
    ASP.NETMVC4WEBAPI跨域web.config文件里加些东西即可 <system.webServer> <httpProtocol> <customHeaders> <addname="Access-Control-Allow-Origin"value="*"/> <addname="Access-Control-Allow-H......
  • springmvc自动配置原理
    Springboot这个工具中集成了很多框架,每个框架都有一个xxxAutoConfiguration。在自动配置jar包中的Spring.facroties中有很多xxxAutoConfiguration对应的就是,每个xxxAutoConfiguration都对应了一个框架的自动配置。以springmvc框架为例,springmvc框架他对应了一个WebMvcAutoConfi......
  • .Net Core Mvc Razor 组件
    目录前言调用页面index.cshtmlPartialUserViewComponent.csIUserServices.csPartialUserView.cshtml注意前言视图组件与分部视图类似,但它们的功能更加强大。视图组件不使用模型绑定,它们依赖于调用视图组件时传递的数据。本文是使用控制器和视图编写的,但视图组件适用于Razo......
  • SpringMVC入门案例
                ......
  • SpringMVC简介
          ......
  • MVC 模式和三层架构
    MVC模式MVC是一种分层开发的模式,其中:M:Model,业务模型,处理业务V:View,视图,界面展示C:Controller,控制器,处理请求,调用模型和视图控制器(serlvlet)用来接收浏览器发送过来的请求,控制器调用模型(JavaBean)来获取数据,比如从数据库查询数据;控制器获取到数据后再交由视图(JSP)进行数......
  • Spring AOP、拦截器、过滤器的区别
    一:区别与概念   Filter过滤器:拦截web访问url地址。   Interceptor拦截器:拦截以.action结尾的url,拦截Action的访问 (控制层Controller)。   Spring AOP拦截器:只能拦截Spring管理Bean的访问(业务层Service)。   概念:   SpringAOP:   SpringAOP,......
  • ssm框架使springmvc放行资源(java配置类)
    在springmvc中,如果配置了拦截所有请求交给springmvc处理,会出现一些静态web资源加载不出来的情况,或者想放行指定web资源可以通过修改通过修改配置达到相应目的,这里使用覆写WebMvcConfigurationSupport中的方法作介绍。@ConfigurationpublicclassSpringMvcSupportextendsWeb......