【JavaWeb】JavaBean、MVC架构、Filter、Listener

一、JavaBean和ORM

1.JavaBean
JavaBean本质就是一个Java类为了规范开发,JavaBean具有如下规范:
(1)提供一个公共的无参的构造器
(2)属性私有化,并提供公共的setter/getter方法
2.ORM(Object Relational Mapping,对象关系映射)
(1)数据库的一张表对应一个JavaBean
(2)数据库的一个字段对应JavaBean的一个属性
(3)数据库的一条记录对应JavaBean的一个对象

二、MVC架构

【Spring】JavaBean、MVC软件设计模式与Java中Dao、Service、Controll三层体系
1.Model(模型)
业务处理:业务逻辑(Service层)
数据持久层:CRUD(Dao层)
2.View(视图)
展示数据,提供链接发起Servlet请求(a,form,img…)
3.Controller(控制器)
接收用户的请求:(req:请求参数、Session信息…),交给业务层处理对应的代码,控制视图的跳转
在这里插入图片描述
例如登录功能的实现
登录—>接收用户的登录请求—>处理用户的请求(获取用户登录的参数,username,password)—>交给业务层处理登录业务(判断用户名密码是否正确:事务)—>Dao层查询用户名和密码是否正确–>数据库

三、Filter过滤器

1.Filter过滤器:基本功能就是对Servlet容器调用Servlet的过程进行操作,从而在Servlet进行响应处理前后实现的一些特殊功能。如:请求和响应编码、权限检查、输出通用信息等。
在这里插入图片描述
Filter过滤器就是一个实现了javax.servlet.Filter接口的的类。
在这里插入图片描述
2.Filter链
在这里插入图片描述
3.实现过滤器的步骤
(1)编写java类实现Filter接口,重写接口中的方法
(2)在web.xml中配置Filter
4.演示将Servlet中的设置编码格式放在Filter中
Servlet

public class ShowServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        resp.setCharacterEncoding("utf-8");
//        req.setCharacterEncoding("utf-8");
//        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().print("你好,我是JavaWeb程序");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

过滤器

public class FilterServlet implements Filter {
    //tomcat启动就会初始化,随时准备过滤请求
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("FilterServlet初始化中...");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");//设置Servlet中的request编码格式
        servletResponse.setCharacterEncoding("utf-8");//设置Servlet中的response编码格式
        servletResponse.setContentType("text/html;charset=utf-8");//设置Servlet中的响应的web页面的编码格式
        System.out.println("FilterServlet执行前...");
        filterChain.doFilter(servletRequest,servletResponse);//让过滤器一直进行下去,否则就会执行一次后终止
        System.out.println("FilterServlet执行后...");
    }
    @Override
    public void destroy() {
        System.out.println("FilterServlet销毁...");
    }
}

web.xml

<!--配置servlet-->
<servlet>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>com.jd.filter.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show/servlet</url-pattern>
</servlet-mapping>
<!--过滤器-->
<filter>
    <filter-name>FilterServlet</filter-name>
    <filter-class>com.jd.filter.FilterServlet</filter-class>
</filter>
<filter-mapping>
    <filter-name>FilterServlet</filter-name>
    <!--过滤器只能过滤特定的请求,此处只能过滤/show/开头的请求-->
    <url-pattern>/show/*</url-pattern>
</filter-mapping>

将项目部署到tomcat中,启动服务,访问浏览器,可以看到尽管注释了Servlet中设置的编码,但是FIlter中的编码生效,web页面并没有出现乱码。
在这里插入图片描述
查看idea的控制台可以看到,在tomcat启动结束后就完成了,每次的请求都会交给过滤器处理
在这里插入图片描述
关闭tomcat服务,Filter也被销毁。
在这里插入图片描述

四、Listener监听器

作用:监听某个事件的发生,状态的改变。如:鼠标点击、按下键盘等
内部机制:接口回调
Servlet共有8种事件监听器

类型描述
ServletContextListener监听ServletContext对象的创建和销毁过程
HttpServletListener监听HttpSession对象的创建和销毁过程
ServletRequestlistener监听ServletRequest对象的创建和销毁过程
ServletContextAttributeListener监听SerlvetContext对象中的属性变更
HttpSesionAttributeListener监听HttpSession对象中的属性变更
ServletRequestAttributeListenerj监听ServletRequest对象中的属性变更
HttpSessionBindLIstener监听JavaBean对象绑定到HttpSession对象和从HttppSession对象解绑的事件
HttpSessionActivationListener监听HttpSession中对象活化和钝化的过程

活化:HttpSession对象从持久化的状态变为运行状态的过程称为活化。
钝化:HttpSession对象从内存中转移至硬盘的过程称为钝化。
示例:监听当前在线的人数
OnlineCount.java

public class OnlineCount implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {//当服务器会话创建时的方法
        HttpSession session = httpSessionEvent.getSession();
        ServletContext ctx = session.getServletContext();//通过httpSessionEvent来获取servletContext对象
        Integer onlineCount = (Integer) ctx.getAttribute("onlineCount");//获取servletContext中的onlineCount的值,首先是不存在的
        if (onlineCount == null) {
            onlineCount = new Integer(1);//当不存在时,往onlineCount里面存值1
        } else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count + 1);//否则当存在时,onlineCount的值就+1
        }
        ctx.setAttribute("onlineCount", onlineCount);//将改变的onlineCount值存入session中
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {//当服务器会话关闭时的方法
        HttpSession session = httpSessionEvent.getSession();
        ServletContext ctx = session.getServletContext();
        Integer onlineCount = (Integer) ctx.getAttribute("onlineCount");
        if (onlineCount == null) {
            onlineCount = new Integer(0);
        } else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count - 1);//当会话关闭时,onlineCount的值就-1
        }
        ctx.setAttribute("onlineCount", onlineCount);
    }
}

web.xml中配置监听器

<!--配置监听器-->
<listener>
    <listener-class>com.jd.filter.OnlineCount</listener-class>
</listener>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
<h1>当前人数:<%=application.getAttribute("onlineCount")%></h1>
<%=this.getServletConfig().getServletContext().getAttribute("onlineCount")%>
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智商三岁半i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值