JavaWeb学习Day04(狂神说Java)

10.MVC三层架构

什么是MVC:Model(模型),View(视图),Controller(控制器)

10.1 早些年

在这里插入图片描述

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

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

10.2 MVC三层架构

在这里插入图片描述

Model模型:

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

view:

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

Controller(Servlet):

  • 接受用户的请求:(req:请求参数,Session信息……)
  • 交给业务层处理对应的代码
  • 控制视图的跳转
登录-->接受用户的登录请求-->处理用户的请求(获取用户的参数:username,password)-->交给业务层处理登陆业务(判断用户名密码是否正确:事务)-->Dao层查询用户名和密码是否正确-->数据库

11.Filter(重点)

filter:过滤器,用来过滤网站的数据;

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

在这里插入图片描述

Filter开发步骤:

  1. 导包
  2. 编写过滤器
    • 导包不要错

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

package com.kuang.filter;

import javax.servlet.*;
import java.io.IOException;

public class CharacterEncodingFilter implements Filter {
   
    //初始化 web服务器启动了,就以及初始化了,随时等待过滤对象出现
    public void init(FilterConfig filterConfig) throws ServletException {
   
        System.out.println("CharacterEncodingFilter初始化");
    }
    //链chain:
    /*
     * 过滤中的所有代码,在过滤特定请求的时候都会执行
     * 必须要让过滤器继续执行
     * chain.doFilter(request,response)
     * */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        System.out.println("characterEncodingFilter执行前……");
        chain.doFilter(request,response);//让我们的请求继续走,如果不写,程序到这里就被拦截停止了
        System.out.println("characterEncodingFilter执行后……");
    }
    //销毁:web服务器关闭的时候过滤会销毁
    public void destroy() {
   

    }
}
  1. 在web.xml中配置Filter
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <!--    只要是/servlet的任何请求,会经过这个过滤器-->
    <url-pattern>/servlet/*</url-pattern>
  </filter-mapping>

12.监听器

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

1.编写一个监听器

实现监听器的接口

package com.kuang.listener;

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

//统计网站在线人数:统计session
public class OnlineCountListener implements HttpSessionListener {
   
    //创建session监听:看你的一举一动
    //一旦创建session就会触发一次这个事件
    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("online",onlineCount);
    }
    //销毁session监听
    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("online",onlineCount);
    }
//    session销毁:手动销毁,自动销毁
}

2.web.xml中注册监听器

<!--  注册监听器-->
  <listener>
    <listener-class>com.kuang.listener.OnlineCountListener</listener-class>
  </listener>

3.看情况是否使用

13.过滤器,监听器常见应用

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

package com.kuang.listener;

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值