动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.J2EE中使用EntityBean和JDO的优缺.
.通过Java.net.Socket 类抓取网页.
.基于JDBC的数据库连接池技术研究.
.Hibernate中对Session管理.
.Hibernate投入JBoss怀抱.
.Adapter在J2SE事件处理中的应用.
.实现Java抽象工厂模式.
.诊断 Java 代码: 设计“可测试的.
.Struts+hibernate开发(源代码).
.一个java正规表达式工具类.
.JBOSS4数据源配置大全(二).
.在组件(components)之间共享Tick.
.使用 Translator 模式构建更好的.
.Delete 方法.
.J2ME程序开发全方位基础讲解汇总.
.小小日历(calendar).
.什么时候在EJB系统中使用XML.
.将存储过程封装为EJB组件的方法.
.[个人原创]JAVA 开发工具Jcreato.
.Sun对Java语言安全性与功能做出重.

J2EE综合应用之——解析MVC模式

发表日期:2008-1-5 |



  MVC模式概述
  
  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="http://www.QQread.com/java/foo.gif" …>
  <LINK REL=STYLESHEET
  HREF="JSP-Styles.Css" TYPE="text/css">
  <A HREF="bar.jsp">…</A>
  
  答案:浏览器将会把它们看作是相对于servlet的URL
  
  最简单的解决方案:
  
  使用以斜杠开始的URL
  
  Summary
  
  MVC (Model 2) 方式适用于:
  
  单次提交会产生多个基本外观。
  
  几个页面拥有大量公共的处理过程。
  
  需要为同样的数据提供多个视图的应用程序,它很好地实现了数据层与表示层的分离,非凡适用于开发与用户图形界面有关的应用程序
  
  构架
  
  由一个servlet应答初始的请求
  
  Servlet完成实际的数据处理并将结果存储在bean中
  
  Bean存储在HttpServletRequest, HttpSession, 或ServletContext中
  
  Servlet使用RequestDispatcher的forward方法将请求转发到JSP页面
  
  JSP页面通过使用jsp:useBean和相应的作用域(request, session, application)从bean中读出数
上一篇:MVC设计模式在通用报表系统中的应用 人气:517
下一篇:在Swing中使用高级的MVC和POJOs 人气:506
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-7 Web Wiz Forums(论坛系统) v9.53
2008-10-6 Menalto Gallery v2.3 Rc2 多国语
2008-10-6 花香盈路(Hxcms) v9.0
2008-10-6 华军软件下载系统 v1.5
2008-10-6 e107 v0.7.13
2008-10-6 (开源PHP框架) CodeIgniter v1.6
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成