MVC模式

目录

一、MVC模式介绍

二、JSP中的MVC模式

三、模型的生命周期与视图更新

1、request bean

①bean的创建

②视图更新

2、session bean

①bean的创建

②视图更新

3、application bean

①bean的创建

②视图更新


MVC模式的核心思想是将“模型”“视图”和“控制器”进行有效组合。

一、MVC模式介绍

        模型-视图-控制器(Model-View-Controller),简称为MVC。MVC已经成为软件设计者必须熟练使用的开发者模式。

        MVC是一种通过三部分构造一个软件或组件的理想办法。

        · 模型(model):用于存储数据的对象。

        · 视图(view):向控制器提交所需数据,显示模型中的数据。

        ·控制器(controller):负责具体的业务逻辑操作,即控制器根据视图提出的要求对数据做出(商业)处理,将有关结果存储到模型中,并负责让模型和视图进行必要的交互,当模型中的数据变化时,让视图更新显示。

        从面向对象的角度看,MVC开发模式可以使程序容易维护,也更容易扩展。在设计程序时,可以将某个对象看作“模型”,然后为“模型”提供恰当的显示组件,即“视图”。在MVC模式中,“视图”“”模型“和”控制器“之间是松耦合结构,便于系统的维护和扩展。

二、JSP中的MVC模式

        在JSP页面中可以使用HTML标记、JSP指令(例如getProperty指令)或Java程序片、Java表达式来为用户显示数据,避免使用大量的Java程序片来进行数据的逻辑处理(简明扼要的除外)。servlet擅长数据的处理,应当尽量避免在servlet中使用out流输出大量的HTML标记来显示数据,否则一旦要修改显示外观就要重新编译servlet。

        在JSP+JavaBean模式中,JavaBean不仅要提供修改和返回数据的方法,而且要经常参与数据的处理。当Web应用变得复杂时,我们希望把数据的处理交给称作控制器的servlet对象去完成,即servlet控制器负责处理数据,并将有关的结果存储到JavaBean中,实现存储与处理的分离。负责视图功能的JSP页面可以使用Java程序片或用JavaBean标记显示JavaBean中的数据。

        在JSP中,MVC模式的具体实现如下:

        ·模型(Model):一个或多个JavaBean对象,用于存储数据。JavaBean主要提供简单的setXxx方法和getXxx方法,在这些方法中不涉及对数据的具体处理细节,以便增强模型的通用性。

        ·视图(View):一个或多个JSP页面,其作用是向控制器提交必要的数据和显示数据。JSP页面可以使用HTML标记、JavaBean标记以及Java程序片或Java表达式来显示数据。视图的主要工作就是显示数据,对数据的逻辑操作由控制器负责。

        ·控制器(Controller):一个或多个servlet对象,根据视图提交的要求进行数据处理操作,并将有关的结果存储到JavaBean中,然后servlet使用转发或重定向的方式请求视图中的某个JSP页面显示数据。例如让某个JSP页面通过使用JavaBean标记、Java程序片或Java表达式显示控制器存储在JavaBean中的数据。

三、模型的生命周期与视图更新

        使用MVC模式和JSP+JavaBean模式有很大的不同。在JSP+JavaBean模式中,由JSP页面通过使用useBean标记:

<jsp:useBean id = "名字" class = "创建bean的类" scope = "生命周期”/>

创建bean。而在MVC模式中,由控制器servlet创建bean,并将有关数据存储到所创建的bean中,然后servlet请求某个JSP页面使用getProperty动作标记:

<jsp:getProperty name = "名字" property = "bean的属性"/>

显示bean中的数据。

        在MVC模式中,当用控制器servlet创建bean时,就可以使用bean类的带参数的构造方法。类中的方法的命名继续保留getXxx规则,但可以不遵守setXxx规则。其理由是:我们不希望JSP页面修改JavaBean中的数据,只需要它显示bean中的数据。

        在MVC模式中,servlet创建的bean也涉及生命周期。生命周期分为request bean、session bean和application bean\

1、request bean

①bean的创建

        servlet创建request bean的步骤如下:

        (1)用BeanClass类的某个构造方法创建bean对象,例如:

BeanClass bean = new BeanClass();

         (2)将所创建的bean对象存放到HttpServletRequset对象request中,并指定查找该bean的id。该步骤决定了bean为request bean。例如:

request.setAttribute("keyWord",bean);

         执行上述操作,就会把bean存放到Tomcat服务器管理的内置对象pageContext中,该bean被指定的id是keyWord,生命周期是PageContext.REQUEST_SCOPE(request)。

②视图更新

        在MVC模式中,由servlet(控制器)负责根据模型中数据的变化通知JSP页面(视图)更新,其手段是使用转发,即使用RequestDispatcher对象向某个JSP页面发出请求,让所请求的JSP页面显示bean(模型)中的数据(不能使用重定向,即不能用sendRedirect方法)。

        因为servlet创建bean的步骤(2)决定了bean为request bean,因此,当servlet使用RequestDispatcher对象向某个JSP页面发出请求时(使用转发操作),该request bean只对servlet所请求的JSP页面有效,该JSP页面对请求做出响应之后,request bean所占有的内存被释放,结束自己的生命。

2、session bean

①bean的创建

        servlet创建session bean的步骤如下:

        (1)用BeanClass类的某个构造方法创建bean对象,例如:

BeanClass bean = new BeanClass();

        (2)将所创建的bean对象存放到HttpServletSession对象session中,并指定查找该bean的id。该步骤决定了bean为session bean。例如:

HttpSession session = request.getSession(true);

session,setAttribute*"keyWord",bean);

        内置对象执行上述操作,就会把bean存放到TOmcat服务器管理的内置对象pageContent中,该bean被指定的id是keyWord,生命周期是PageContext.SESSION_SCOPE(session)。

②视图更新

        servlet创建bean的步骤(2)决定了bean为session bean,只要用户的session没有消失,该session bean就一直存在。Web服务目录的各个JSP都可以使用

<jsp:useBean id = "keyWord" class = "save.data.BeanClass" scope = "session"/>

        标记获得servlet所创建的session bean(id的值是servlet创建session bean时,为bean指定的关键字),然后使用相应的标记或程序片显示该session bean中的数据,例如使用

<jsp :getProperty name = "keyWord" property = "bean的值"/>

        标记显示该session bean中的数据。

        对于session bean,如果servlet希望某个JSP页面显示其中的数据,可以使用RequestDispatcher对象转发到该页面,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)定向到该页面。

        需要注意的是,不同用户的session bean是互不相同的,即占有不同的内存空间。

3、application bean

①bean的创建

        servlet创建application bean的步骤如下:

        (1)用BeanClass类的某个构造方法创建bean对象,例如:

BeanClass bean = new BeanClass();

        (2)servlet使用getServletContext()方法返回服务器的Servlet Context内置对象的引用,将所创建的bean对象存放到服务器这个ServletContext内置对象中,并指定查找该bean的关键字。该步骤决定了bean的生命周期为application。例如:

getServletContext().setAttribute("keyWord",bean);

        这样就会把bean存放到Tomcat服务器管理的内置对象pageContext中,该bean被指定的id是keyWord,生命周期是PageContext.APPLICATION_SCOPE(application)。

②视图更新

        servlet创建bean的步骤(2)决定了bean为application bean。当servlet创建application bean后,只要Tomcat服务器不关闭,该bean就一直存在。一个用户访问Web服务目录的各个JSP中都可以使用

<jsp:useBean id = "keyWord" class = "save.data.BeanClass" scope = "application"/>

        标记获得servlet所创建的application bean(id的值是servlet创建application bean时为bean指定的关键字),然后使用相应的标记或程序片显示该application bean中的数据,例如使用

<jsp:getProperty name = "keyWord" property = "bean的变量"/>

        标记显示该application bean中的数据。

        对于application bean,如果servlet希望某个JSP显示其中的数据,可以使用RequestDispatcher对象向该页面发出请求,也可以使用HttpServletResponse类中的重定向方法(sendRedirect)。

        需要注意的是,所有用户在同一个Web服务目录中的application bean是相同的,即占有相同的内存空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值