分享
 
 
 

MVC模式概述

王朝vc·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

 MVC是三个单词的缩写,分别为:

模型(Model),视图(View)和控制Controller)。

MVC模式的目的就是实现Web系统的职能分工。

 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。

 View层用于与用户的交互,通常用JSP来实现。

 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

MVC模式的好处

 各施其职,互不干涉

在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。

 有利于开发中的分工

在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。

 有利于组件的重用

分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。

不同JSP构造的应用

为什么要组合使用servlet & JSP?

 典型的做法:使用JSP来简化HTML内容的开发与维护

 对于简单的动态代码,使用由脚本元素调用JAVA代码来完成。

 对于稍微复杂一些的应用,则可使用脚本元素调用定制的类来完成。(即所谓的help类)

 对于比较复杂的应用,则使用JAVA BEAN和定制标签

 但,这些是不够的

 对于复杂的处理过程,从JSP开始做起会难以处理。

 JSP除了能够带来将实际的代码隔离成单独的类、bean、和定制标签的便利以外,它所隐含的假定是单个页面给出单个基本视图。

对MVC的误解

 必须采用复杂的框架

 框架有时很有用

 Struts

 JavaServer Faces (JSF)

 但并非必需!

 对于大多简单或者适度复杂的应用来说,使用内建的RequestDispatcher就能够很好地实现MVC

 MVC影响整个系统的设计

 我们可以用MVC来处理单个请求

 可以将它认为是MVC方案,而非MVC框架。

 也被称为是模型2方案

用RequestDispatcher实现MVC

 1. 定义用以表示数据的java bean

 2. 使用一个servlet处理请求

 servlet读取请求参数,检查数据的缺失或异常等。

 3. 填充bean

 该servlet调用业务逻辑或数据访问代码得到最终的结果。得出的结果被放在第一步中定义的bean中。

 4. 将bean存储在请求,会话或servlet的上下文中

 该servlet调用请求、会话或servlet上下文对象的setAttribute存储表达请求结果的bean的引用。

 5. 将请求转发到JSP页面

 该servlet确定哪个JSP页面适合于处理当前的情形,并使用RequestDispatcher的forward方法将控制转移到那个页面。

 6. 从bean中提取数据

 JSP页面使用jsp:useBean和与第4步匹配的位置访问之前存储的bean,然后使用jsp:getProperty输出bean的属性。

 JSP页面并不创建或修改bean;它只是提取并显示由servlet创建的数据。

jsp:useBean在MVC中的使用与在

独立JSP页面中有什么不同

 JSP页面不应该创建对象

 应该由servlet创建所有的数据对象。因此,为了保证JSP页面不会创建对象,我们应该使用<jsp:useBean ... type=“package.Class” />

而不是

<jsp:useBean ... class="package.Class" />

 JSP页面也不应该修改已有的对象

 因此,我们应该只使用jsp:getProperty,不使用jsp:setProperty

。 提示:jsp:useBean的scope选项

 request

 <jsp:useBean id="..." type="..." scope="request" />

 session

 <jsp:useBean id="..." type="..." scope="session" />

 application

 <jsp:useBean id=".." type=".." scope="application" />

 page

 <jsp:useBean id=“...” type=“...” scope=“page” />

或者仅仅使用<jsp:useBean id="..." type="..." />

 MVC (Model 2)构架不使用这个scope。

不同数据共享方式

 向用户显示一个随机的数字。

 由于每次请求应该产生新的数字,因而基于请求的共享是恰当的。

 显示用户的姓和名

 数据要为每个客户存储,因而基于会话的共享比较适用。

 显示一个指定长度的质数。

 数据在多个客户间共享,因此,基于应用的共享比较恰当。

基于请求的数据共享

 Servlet

ValueObject value = new ValueObject(...);

request.setAttribute("key", value);

RequestDispatcher dispatcher =

request.getRequestDispatcher("/WEB-INF/SomePage.jsp");

dispatcher.forward(request, response);

 JSP

<jsp:useBean id="key" type="somePackage.ValueObject"

scope="request" />

<jsp:getProperty name="key" property="someProperty" />

基于会话的数据共享

 Servlet

ValueObject value = new ValueObject(...);

HttpSession session = request.getSession();

session.setAttribute("key", value);

RequestDispatcher dispatcher =

request.getRequestDispatcher("/WEB-INF/SomePage.jsp");

dispatcher.forward(request, response);

 JSP

<jsp:useBean id="key" type="somePackage.ValueObject"

scope="session" />

<jsp:getProperty name="key" property="someProperty" />

基于ServletContext的数据共享

 Servlet

synchronized(this)

{

ValueObject value = new ValueObject(...);

getServletContext().setAttribute("key", value);

RequestDispatcher dispatcher =

request.getRequestDispatcher("/WEB-INF/SomePage.jsp");

dispatcher.forward(request, response);

}

 JSP

<jsp:useBean id="key" type="somePackage.ValueObject“ scope="application" />

<jsp:getProperty name="key" property="someProperty" />

JSP页面中的相对URL

 问题:

 使用请求分配器进行的转发对客户来说是透明的。初始的URL是浏览器惟一知道的URL。

 为什么这会比较重要?

 浏览器会如何处理类似下面的这些标签:

<IMG SRC="foo.gif" …>

<LINK REL=STYLESHEET

HREF="JSP-Styles.css" TYPE="text/css">

<A HREF="bar.jsp">…</A>

 答案:浏览器将会把它们看作是相对于servlet的URL

 最简单的解决方案:

 使用以斜杠开始的URL

Summary

 &nbs

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有