1.MVC:(Model-View-Controller)操作流程

显示层View:主要负责接收Servlet传递的内容,并调用JavaBean把内容显示给用户。

控制层Controller:负责所有的用户请求参数,判断请求参数是否合法,根据请求方式调用JavaBean进行处理,把结果返给显示层进行显示。

模型层Model:完成一个独立的业务操作组件。一般以JavaBean或者EJB(分布式组件技术)来定义的。

最关键的是RequestDispatcher接口:因为内容是通过该接口保存到JSP页面技能型显示的。

                  page、request、session、application

在MCV设计模式中,所有的属性传递以request方式(因为:保存范围越大占用的内存越多)进行传递,可以提升代码的操作性能。

 简洁、清晰的JSP页面应包含的内容:  在JSP页面中唯一允许导入的包是java.util。

1.接收属性:接收来至Servlet传递过来的属性。

2.判断语句:判断传递到JSP中的属性是否存在。

3.输出语句:使用迭代输出或者JavaBean输出。

 

2.过滤器Filter

实现过滤器功能:实现javax.servlet.Filter接口

应用一:编码过滤

在每个JSP页面或者Servlet中,设置字符编码格式request.setCharacterEncoding("UTF-8");可使用Filter进行设置

import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class EncodingFilter implements Filter {private String charSet;//字符编码
@Overridepublic void destroy() {System.out.println("过滤器已销毁...");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,ServletException {// 执行过滤System.out.println("执行过滤之前:doFilter()");req.setCharacterEncoding(this.charSet); //统一设置编码
chain.doFilter(req, resp);//请求继续传递System.out.println("执行过滤之后:doFilter()");}/*** 在容器启动的时候自动加载,通过getInitParameter()获取配置的初始化参数,只初始化一次。*/@Overridepublic void init(FilterConfig config) throws ServletException {String initParam = config.getInitParameter("encoding");//获取初始化参数this.sharSet = initParam ;System.out.println("过滤器初始化,初始化参数是:" + initParam);}
}

web.xml中的配置

<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/jsp/*</url-pattern>
</filter-mapping>

  

<url-pattern>:表示一个过滤器的过滤位置:/*表示对于根目录下的一切操作都进行过滤;若只过滤某一个或者某个目录,则必须明确写出对应的目录.

应用二:登录验证

import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;public class LoginFilter implements Filter {@Overridepublic void destroy() {}/*** session本身属于HTTP协议的范畴,doFilter()定义的是ServletRequest,* 要想获取session,必须进行向下转型:ServletRequest改成HttpServletRequest,才能使用getSession()获取session对象。*/@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException,ServletException {HttpServletRequest hsp = (HttpServletRequest)req;//向下转型HttpSession ss = hsp.getSession();if(ss.getAttribute("userId") != null){ //判断用户是否登录
      chain.doFilter(req, resp);}else{req.getRequestDispatcher("login.jsp").forward(req, resp); //跳转到登录页面
    }}@Overridepublic void init(FilterConfig arg0) throws ServletException {}
}

3.监听器Filter

应用1:对application的监听

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;//对上下文状态的监听public class ServletContextListenner implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent event) {//上下文销毁触发System.out.println("容器销毁" + event.getServletContext().getContextPath());}@Overridepublic void contextInitialized(ServletContextEvent event) {//上下文初始化触发System.out.println("容器初始化"+ event.getServletContext().getContextPath());}
}

web.xml配置

<listener><listener-class>com.mxzer.common.listener.ServletContextListenner</listener-class>
</listener>

所有Servlet程序必须在web.xml进行配置,配饰顺序如下:

1.先配置过滤器:<filter>、<filter-mapping>

2.再配置监听器:<listener>

3.最后配置Servlet:<servlet> 、<servlet-mapping>

应用2:对Servlet上下文属性的监听,要实现ServletContextAttributeListener接口

应用3:对session的监听

3.1实现HttpSessionListener接口

   session销毁的方式:

(1)调用HttpSession中的invalidate()方法

(2)在web.xml中配置session的超时时间

    <!-- session 失效时间 单位30分钟 --><session-config><session-timeout>30</session-timeout></session-config>

3.2对session属性的监听,要实现HttpSessionAttributeListener接口,需要在web.xml配置

方式二:使用HttpSessionBindingListener接口

/**
* 使用HttpSessionBindingListener
* session属性监听:不需要在web.xml中配置
*
*/
public class ServletContextListenner implements HttpSessionBindingListener {private String loginName; //登录名public ServletContextListenner(String loginName) {this.loginName = loginName;}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}@Overridepublic void valueBound(HttpSessionBindingEvent event) {System.out.println("在session中保存登录对象" + this.getLoginName()+"session ID:"+event.getSession().getId());}@Overridepublic void valueUnbound(HttpSessionBindingEvent event) {System.out.println("在session中移除登录对象" + this.getLoginName()+"session ID:"+event.getSession().getId());}}

 3.4对request监听

请求状态的监听:实现ServletRequestListenner接口

    System.out.println("request请求初始化" +"http://"+ event.getServletRequest().getRomoteAddr());System.out.println("request请求初始化" +"http://"+ event.getServletContext().getContextPath());

属性的监听:实现ServletRequestAttributeListener

System.out.println(event.getNmae() + event.getValue());

转载于:https://www.cnblogs.com/mxzer/p/6437338.html

Web开发模式(MVC设计模式)相关推荐

  1. web开发模式+三层架构与MVC

    一.MCV模式与三层架构 三层架构包括UI.BLL.DAL三层,MVC三层指的是model.view.controller,这两个是有区别的. 三层架构主要注重数据的处理流程,DAL中数据获取与存储, ...

  2. Web开发模式【Mode I 和Mode II的介绍、应用案例】

    开发模式的介绍 在Web开发模式中,有两个主要的开发结构,称为模式一(Mode I)和模式二(Mode II) 首先我们来理清一些概念吧: DAO(Data Access Object):主要对数据的 ...

  3. 用框架名唬人谁都会,那你知道Web开发模式吗?——莫问前程莫装逼

    前言:这两天总结了一些Servlet和JSP里面的知识,写了几篇博客,果然有种"温故而知新"的感觉,学完这些,继续前行,开始整合框架里的知识,框架虽好,可底层原理该掌握的也得掌握, ...

  4. Web开发模式的探讨

    Web开发模式有俩种: 基于服务器端渲染的传统Web开发模式 基于前后端分离的Web开发模式 想必我们都不陌生这俩个概念,前后端分离的开发模式也是非常的火爆,我们今天来探讨一下,这俩个开发模式各自的缺 ...

  5. Web 开发选 MVC 还是 DDD?

    距离上次更新已经有 7 天了,只要停下来一天,就会有第二天,第三天,越是不写,就越不知道写什么.这就是惯性的力量,无论是勤劳还是懒惰,都会产生惯性,于是勤劳者越来越勤劳,懒惰者越来越懒惰,学霸越来越霸 ...

  6. App原生、混合、纯WEB开发模式的优劣分析

    什么叫做原生App? 什么是混合app? 什么是Web App开发? Native App开发即我们所称的传统APP开发模式(原生APP开发模式),该开发针对IOS.Android等不同的手机操作系统 ...

  7. HTML5 将改变Web开发模式

    HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML5 技术.HTML 5有两大特点 ...

  8. Java——Web开发之MVC设计模式的学生信息管理系统(二)

    为什么这个标题为"(二)",其实是对于上一个特别简单学生信息管理系统里功能的完善. 所谓的"(一)"在这:学生信息管理系统(一) 系统实现的功能: 实现添加学生 ...

  9. java servlet jsp javabean关系图_Servlet+JSP+JavaBean开发模式(MVC)介绍

    好伤心...写登陆注册之前看见一篇很好的博文,没有收藏,然后找不到了. 前几天在知乎上看见一个问题,什么时候感觉最无力. 前两天一直想回答:尝试过google到的所有solve case,结果bug依 ...

最新文章

  1. 美国政府机构成为接受比特币和比特现金支付税金的政府机构
  2. PMP-【第11章 项目风险管理】-2021-2-16(220页-251页)
  3. glibc-2.23学习笔记(一)—— malloc部分源码分析
  4. 洛谷 P1598 垂直柱状图【字符串】
  5. mysql 字段加comments_Mysql添加注释(comment)(转)
  6. R开发(part12)--基于RC的面向对象编程
  7. Linux的实际操作:文件目录类的实用指令(echo head tail)
  8. 【训练过程】2) Train the VAEs of domain A and domain B respectively(分别训练域A和域B的VAE)
  9. [毕业生的商业软件开发之路]系列文章目录规划
  10. python装饰器使用
  11. 工业机器人综合教学实训平台
  12. DBeaver——一款替代Navicat的数据库可视化工具
  13. Error writing to registry key: RegSetValueEx failed; code 5
  14. 王阳明:心力是克服万难的本源(附提升心力的12种方法)
  15. HP台式机清灰后无法启动的解决办法
  16. 企业邮箱收发信息服务器怎么设置,企业邮箱服务器如何配置POP3和SMTP?
  17. 低价云 主机虚拟云服务器,低价云 主机虚拟云服务器
  18. java 文本换行_java写入Excel文本换行
  19. 1.1统计学的发展史
  20. Java远程调用BPS流程实现流程运行简单示例

热门文章

  1. 南加州大学机器视觉实验室_机器学习带动南加州爱迪生的变革
  2. C语言高级编程:char、signed char 和 unsigned char的使用区别
  3. 《长调》 :寻找我们共同失去的天堂
  4. 《誓鸟》是什么小说?
  5. 在辉腾锡勒我见到了狼
  6. J-LINK segger 驱动,MDK5.15版本,用于解决**JLink Warning: Mis-aligned memory write: Address: 0x20000000......
  7. python 双向链表_Python实现双向链表
  8. caj文件浏览器_caj文件怎么转换成pdf文件?试试这样操作,3步成功转换
  9. 关于slot、slot-scope的指令的一些操作记录
  10. 中英翻译(基于百度翻译)