了解MVC架构对于用Struts构建的强大的Web应用程序很重要
Struts是雅加达的一个项目,它提供了一个方法,可以在一个Web应用程序中一起使用JavaServer Pages(JSP)和servlets。它的目的是要解决完全由JSP或完全由servlet实现的应用程序中的固有的问题。 例如,servelts可以生成HTML页面,但这么做很麻烦。另一方面,JSP可以很容易地用于传统的HTML页面,但JSP页面有其它的缺点。特别是,用JSP很难将内容同内容的显示分开。 很容易将Java 代码同HTML混在一起,结果做出的东西又慢又难以维护。
然而,因为JSP页面容易使用,所以它们成为用Java构建动态的Web应用程序的首选方法。除了容易编程外,JSP页面也被改进了,所以现在它们克服了以前的某些局限性。JavaBeans和标记库只是在基础的JSP技术上的几个改进。这种类型的方法——JSP页面单独负责处理输入的请求和回复客户端——被称为Model 1架构。
JavaServer Pages是servlets的特殊情况,所以两者可以一起工作以弥补每个的不足,这似乎是合乎逻辑的。这种类型的方法——你的Web架构包含截然不同的但又互联的处理数据模式、显示代码和程序控制逻辑的JSP和servlet组件——被称为Model 2架构,或Model-View-Controller(MVC)架构。
为了使用Struts架构以及用JSP和servlets有效地编程,对MVC架构的了解是很必要的。Model 1和MVC架构的主要不同就是请求是在哪里处理的。在Model 1架构中,请求通过JSP接收,主要通过JSP处理。如果JSP页面需要来自任何其它应用程序组件的服务,如一个数据库,那么你就从页面做适当的调用,把数据返回到页面,安排数据的格式并显示出来。你可以把一些代码放到一个或多个JavaBean中,但是这么做本身没有将逻辑同显示完全分离。
MVC方法采用了JSP和servlet方法的最佳特性,使这两种技术可以协同工作。明确的是,servlet是处理层(控制器)。Servlet接收请求,很像Model 1架构中JSP页面所做的那样,并确定如何满足那些请求。这就意味着,servlet控制输入的请求和输出的回应。
商业逻辑体现了MVC架构中的模式。商业逻辑代码为页面做处理。如果进入servlet的请求是一个数据库查询,servlet就将这个请求传送到一个SQL调用或类似的数据库代码。如果请求是一个包括输入信用卡号的购买请求,那么事物处理代码就接管了。在某种意义上,架构的模式部分是让应用程序处于领先地位的全部原因。
JSP页面是显示层(视图),是用户与应用程序交互的地方。它提供输入并显示结果。页面不应该包括任何脚本。它只是将数据传送到servlet,并接收和显示返回的数据。
该架构的优势应该是很明显的。首先,它将计算和显示清楚地分开了。结果很理想,在JSP页面上没有出现处理过程,在servlet或商业逻辑中没有数据格式。这种分离的另一个好处是Java程序员可以专注于servlet代码,HTML编写者可以专注于JSP。 第二点,控制器servlet做页面上的所有的决定。 在你的页面和逻辑中不会出现任何决策。这就提高了一个应用程序的性能和可扩展性,因为请求可以被导向架构的不同的组件,甚至是不同的服务器。
运用MVC架构
MVC架构没有必要成为用于所有Java应用程序的最佳方法。 如你想象的那样,它在准备和编码时往往很复杂——这对简单的应用程序来说是没必要的。当页面导航相对来说比较简单和固定,而且应用程序中的页面结构可以由一个简单的目录结构管理时, Model 1架构仍然是最好的方法。这些应用程序往往将页面流动信息嵌入到页面间的链接中。(JSP中出现forward()就告诉你,在该页中有嵌入的逻辑,让你对显示下一页作出决定。)对于对流量或可扩展性需求有限的静态的应用程序来说,标准的JSP模式仍然是一个可行的选择方案。
在一些情况下,你可能想把一个JSP应用程序移植到MVC架构中。例如,你可能开始时用的是Model 1,简单的JSP架构,随着你的需求的增加,你会发现维护起来太复杂或太难了。如果你花很长的时间对应用程序做相对来说较简单的修改,或者如果你经常在你的代码中发现bug,那么你的JSP导向的应用程序也许就不再是合适的方法了。
随着应用程序的发展和变化,页面的流动和商业逻辑也增加了。应用程序变得难以维护,因为页面流动逻辑跨多个页面分布,而且商业逻辑可能开始存在于未计划的地方。从Model 1转到MVC的最佳时机就是当这些类型的维护问题出现的时候。
你也可以预先计划将你的应用程序从一个架构移植到另一个架构。当你的应用程序中的JSP页面包含脚本元素,定制标记或JavaScript来执行一个forward()操作时,你可能想调整你最初的设计,变成一种用MVC架构的设计。
Refactoring用在这儿是个不错的术语。它指的是以一种高度严谨的方式重建代码结构的一种技术。当你的代码变得难以理解、修改和调试时,你通常就开始考虑调整了。你可以用几种方式来调整代码:你可以简单地重新命名变量和方法,或者将部分代码移植到不同类型的执行模式中。更多的关于调整及其技术方面的信息,请访问Martin Fowler的网站www.refactoring.com 或者阅读他写的书 Refactoring: Improving the Design of Existing Code。
在许多情况下,一开始就选择MVC架构是很有意义的,例如你的应用程序是为广泛的企业应用而设计的,或者在几年内,你的应用程序可能扩展到一个相当高的流量。 设计一个MVC架构需要有深谋远虑。大多数程序员发现写逻辑脚本或JavaBeans,以及用HTML显示很容易。当你设计一个MVC架构时,你必须首先进行一个完整的设计。这就意味着,分析需要处理的请求的类型,确定哪些组件(JavaBean、数据库或其它servlets)将处理这些请求,以及对那些请求的回应是如何显示给用户的。 该设计的关键就是请求和数据的流动性。为MVC架构设计应用程序组件只是对你现在用JSP和servlets所做工作的扩展。面临的挑战就是构建一个servlet,它接收请求并把那些请求分到应用程序的不同的组件。将一个数据库请求传送到一个数据库,或将一个处理请求传送到一个JavaBean是很容易的,但是如果一个请求包含这两种元素,会怎样呢?或者如果请求的性质在一些处理出现前不能确定,又怎样呢?
Struts 构架
该挑战使我们又回到Struts构架。Struts提供了一个实现MVC架构的高度自动化的方式。它的结构实现了MVC,并包括一个控制器servlet、一组JSP页面和应用程序的商业逻辑。控制器将用户请求打包,并把它们导向架构中的其他对象。
Struts构架是围绕一个ActionMapping 结构的。控制器用 ActionMapping 把HTTP消息形式的用户请求转换成应用程序的动作。ActionMapping指定请求的路径、计划处理请求的对象以及任何服务该请求需要的其它信息。ActionMapping创建了一个 Action 对象来处理请求。一旦Action对象完成了一个任务,它就通过在一个JSP页面上写结果来直接回应一个用户请求,或者它可以让一个应用程序流动到其它地方做回应。
下个月,我将讲述一下将MVC模式用于Struts构架的细节问题。然后,我将用Struts来设计和实现一个Web应用程序,该程序将servlet控制器作为计划执行用户请求的Action对象的“调度”基础。
关于Struts构架的更多信息,请参阅Tim Holloway写的封面文章"Struts: a Solid Web-App Framework"。
分享到:
相关推荐
内容概要:本文详细介绍了基于TMS320F系列芯片的C2000串口读写方案及其编程器——FlashPro2000的功能特点和支持的接口模式。文中不仅涵盖了硬件连接的具体步骤,还提供了代码实例来展示Flash擦除操作,并对比了JTAG和SCI-BOOT两种模式的优缺点。此外,针对不同型号的C2000系列芯片,给出了详细的适配指导以及避免烧录过程中可能出现的问题的方法。 适合人群:从事DSP开发的技术人员,尤其是对TI公司C2000系列芯片有一定了解并希望深入了解其编程和烧录细节的人群。 使用场景及目标:适用于实验室环境下的程序调试阶段,以及生产线上的批量烧录任务。主要目的是帮助开发者选择合适的编程工具和技术手段,提高工作效率,减少因误操作导致设备损坏的风险。 其他说明:文中提供的代码片段和命令行指令可以直接用于实际项目中,同时附带了一些实用技巧,如防止芯片变砖的小贴士和自动化重试脚本,有助于解决常见的烧录难题。
汉字字库存储芯片扩展实验 # 汉字字库存储芯片扩展实验 ## 实验目的 1. 了解汉字字库的存储原理和结构 2. 掌握存储芯片扩展技术 3. 学习如何通过硬件扩展实现大容量汉字字库存储 ## 实验原理 ### 汉字字库存储基础 - 汉字通常采用点阵方式存储(如16×16、24×24、32×32点阵) - 每个汉字需要占用32字节(16×16)到128字节(32×32)不等的存储空间 - 国标GB2312-80包含6763个汉字,需要较大存储容量 ### 存储芯片扩展方法 1. **位扩展**:增加数据总线宽度 2. **字扩展**:增加存储单元数量 3. **混合扩展**:同时进行位扩展和字扩展 ## 实验设备 - 单片机开发板(如STC89C52) - 存储芯片(如27C256、29C040等) - 逻辑门电路芯片(如74HC138、74HC373等) - 示波器、万用表等测试设备 - 连接线若干 ## 实验步骤 ### 1. 单芯片汉字存储实验 1. 连接27C256 EPROM芯片到单片机系统 2. 将16×16点阵汉字字库写入芯片 3. 编写程序读取并显示汉字 ### 2. 存储芯片字扩展实验 1. 使用地址译码器(如74HC138)扩展多片27C256 2. 将完整GB2312字库分布到各芯片中 3. 编写程序实现跨芯片汉字读取 ### 3. 存储芯片位扩展实验 1. 连接两片27C256实现16位数据总线扩展 2. 优化字库存储结构,提高读取速度 3. 测试并比较扩展前后的性能差异 ## 实验代码示例(单片机部分) ```c #include <reg52.h> #include <intrins.h> // 定义存储芯片控制引脚 sbit CE = P2^7; // 片选 sbit OE = P2^6; // 输出使能 sbit
测控装备干扰源快速侦测系统设计研究.pdf
嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip
嵌入式八股文面试题库资料知识宝典-百度2022年嵌入式面试题.zip
少儿编程scratch项目源代码文件案例素材-空间站.zip
基于关联规则的商业银行个性化产品推荐.pdf
嵌入式八股文面试题库资料知识宝典-Linux基础使用.zip
内容概要:本文详细介绍了利用MATLAB进行轴棱锥生成贝塞尔高斯光束及环形光束光强图像的仿真研究。首先阐述了实验的背景与目标,强调了MATLAB在光学和计算科学领域的广泛应用。接着,具体描述了实验的方法与步骤,包括材料准备、仿真过程中的参数设定和光束生成代码编写。最后,对实验结果进行了深入分析,展示了贝塞尔高斯光束和环形光束的光强分布特点,验证了其光学性能的预期表现。文章还对未来的研究方向和技术改进提出了展望。 适合人群:从事光学、物理学及相关领域研究的专业人士,特别是对光束生成和光学性能分析感兴趣的科研工作者。 使用场景及目标:适用于需要进行光束生成和性能分析的实验室环境,旨在帮助研究人员更好地理解和优化光束特性和传播行为。 其他说明:本文不仅提供了详细的实验方法和步骤,还附有丰富的实验结果和数据分析,为后续研究提供了宝贵的参考资料。
内容概要:本文探讨了三电平NPC型有源电力滤波器(APF)的模型预测控制(MPC)中存在的开关频率过高问题及其解决方案。传统MPC方法会导致极高的开关频率,增加了系统的能耗和热量。通过引入滞环控制模块,可以在不大幅牺牲性能的情况下有效降低开关频率。具体来说,滞环控制通过在价值函数计算后增加一个判断条件,对状态切换进行惩罚,从而减少不必要的开关动作。实验结果显示,开关频率从4392Hz降至3242Hz,降幅达26.2%,虽然电流总谐波畸变率(THD)略有上升,但仍符合国家标准。此外,文中还提出了动态调整滞环宽度的方法,以进一步优化不同负载条件下的表现。 适合人群:从事电力电子、电力系统控制领域的研究人员和技术人员,特别是关注APF和MPC技术的人群。 使用场景及目标:适用于需要优化APF系统开关频率的研究和工程项目,旨在提高系统效率并降低成本。目标是在不影响系统性能的前提下,显著降低开关频率,减少能量损失和热管理难度。 其他说明:文章不仅提供了理论分析,还包括具体的实现代码片段,有助于读者理解和实践。同时,强调了在实际应用中需要注意的问题,如中点电位漂移等。
内容概要:本文介绍了三维POD DMD程序在处理原网格数据方面的独特优势和技术细节。首先阐述了该程序能读取结构化和非结构化网格数据及其拓扑关系,在生成模态数据过程中保持原始网格形态而不需要进行网格插值操作。接着展示了简化版本的Python代码片段,揭示了读取网格数据和生成模态数据的核心逻辑。最后提到提供的辅助学习资料如代码、视频教程、Word教程和实例数据,帮助用户深入理解并掌握该程序的应用。 适合人群:从事计算流体力学领域的研究人员和技术爱好者,尤其是那些希望提高数据处理效率的人群。 使用场景及目标:适用于需要处理复杂网格数据的研究项目,旨在简化数据处理流程,提升工作效率,同时保持数据的原始特性。 其他说明:文中不仅提供了理论性的讲解,还有具体的代码示例和丰富的学习资源,使读者可以边学边练,快速上手。
融合双向路由注意力的多尺度X光违禁品检测.pdf
嵌入式八股文面试题库资料知识宝典-Linux_Shell基础使用.zip
嵌入式八股文面试题库资料知识宝典-联发科2021武汉嵌入式软件开发.zip
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-ARM常见面试题目.zip
基于LWR问题的无证书全同态加密方案.pdf
嵌入式八股文面试题库资料知识宝典-符坤面试经验.zip
内容概要:本文详细探讨了三电平逆变器在带不平衡负载条件下的仿真研究。主要内容包括仿真环境的搭建、不同拓扑结构的选择(如T型、I型NPC和ANPC)、延时相消法(DSC)和双二阶广义积分器(DSOGI)的正负序分离控制策略、SVPWM或SPWM调制技术的应用、双闭环PI控制以及直流均压控制。文中通过具体的参数设置(交流电压220V,直流侧电压750V)进行了详细的仿真实验,并展示了各个控制策略的效果。最终,通过仿真实验验证了所提出方法的有效性,确保了交流侧三相电压波形的对称性和电流波形的自适应调节。 适合人群:从事电力电子、电机驱动、新能源发电等领域研究的技术人员和研究人员。 使用场景及目标:适用于需要理解和掌握三电平逆变器在复杂负载条件下控制策略的研究人员和技术人员。目标是提高对三电平逆变器及其控制策略的理解,优化实际应用中的性能。 其他说明:本文不仅提供了理论分析,还包含了具体的仿真步骤和代码实现,有助于读者更好地理解和应用相关技术。
内容概要:本文介绍了如何使用Matlab/Simulink软件构建一个14自由度的四轮驱动-四轮转向(4WID-4WIS)整车动力学模型。该模型涵盖了整车纵向、横向、横摆、车身俯仰、侧倾、垂向跳动及四轮旋转和垂向自由度等多个方面,旨在全面反映车辆在不同工况下的动态行为。文中详细描述了各子系统的建模方法,包括转向系统、整车系统、悬架系统、魔术轮胎pac2002、车轮系统和PI驾驶员模块。同时,提供了Simulink源码文件、建模说明文档及相关参考资料,便于用户理解和应用。 适用人群:主要面向汽车工程师、研究人员以及对汽车动力学和Simulink建模感兴趣的学习者。 使用场景及目标:①帮助用户深入了解车辆在各种工况下的动态行为;②为车辆控制策略的制定提供理论支持和技术手段;③作为学习和研究整车动力学建模的有效工具。 其他说明:该模型采用模块化建模方法,提高了模型的清晰度和可维护性,同时也提升了建模效率。