SSH基础知识之Struts课件_第1页
SSH基础知识之Struts课件_第2页
SSH基础知识之Struts课件_第3页
SSH基础知识之Struts课件_第4页
SSH基础知识之Struts课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SSH基础知识之Struts主讲人:周文敏2012-2-13.Struts预准备MVC简介名词解释MVC模式是“Model-View-Controller”的缩写,中文翻译为“模型-视图-控制器”。模式起源MVC模式最早是smalltalk语言研究团提出的,应用于用户交互应用程序中。设计思想即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。2Struts预准备视图代表用户交互界面对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。一个应用可能有很多不同的视图随着应用的复杂性和规模性,界面的处理也变得具有挑战性。视图的职责仅限于视图上数据的采集和处理,以及响应用户的请求业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。3Struts预准备模型就是业务流程/状态的处理以及业务规则的制定业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。业务模型还有一个很重要的模型那就是数据模型数据模型主要指实体对象的数据保存(持久化)。比如将一张订单保存到数据库,从数据库获取订单。4Struts预准备控制器可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理例如,用户点击一个连接,控制层接受请求后,并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。5Struts预准备Model1以JSP为中心的开发模型在使用JAVA技术建立Web应用的实例中,由于JSP技术的发展,很快这种便于掌握和可实现快速开发的技术就成了创建Web应用的主要技术。在JSP页面中同时实现显示,业务逻辑和流程控制JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)、服务端处理过程(jsp:scriplet)和HTML(<html>),现在很多的Web应用就是由一组JSP页面构成的。6Struts预准备Model1架构图7Struts预准备Model1缺点强耦合-业务层代码,表示层代码与数据访问层代码的大杂烩混乱,难以维护,调试困难不利于应用扩展和更新更改业务逻辑或数据可能牵涉相关的很多网页违背简单就是美丽的美学原则-JSP文件的编写者必须既是网页设计者,又是Java开发者其结果通常要么是很糟的Java代码,要么是难看的网页脚本代码,有时甚至Java代码和网页脚本代码都很糟难以实现分层开发内嵌的流程逻辑-要理解应用程序的整个流程,您必须浏览所有网页试想一下拥有1000个网页的Web应用的错综复杂的逻辑8Struts预准备Model2

以Servlet为中心的开发模型提供应用的处理过程控制(一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。从而弥补了Model1的不足。具有组件化的优点从而更易于实现对大规模系统的开发和管理9Struts预准备Model2架构图10Struts预准备Model2缺点必须基于MVC组件的方式重新思考和设计应用结构。

--原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程。所有的页面和组件必须在MVC框架中实现,所以必须进行附加地开发工作。--MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。现在有很多可供使用的MVC框架。11Struts简介Struts是Apache组织的一个开放源码项目。Struts是一个比较好的MVC框架,提供了对开发MVC系统的底层支持。它采用的主要技术是Servlet,JSP,资源文件和customtaglibrary。获取它的使用版本和具体信息可以查阅网站。12Struts简介Struts优点利用Struts提供的taglib可以大大节约开发时间表现与逻辑分离维护扩展比较方便国际化支持与完善的验证框架统一错误处理方法大量内置设计模式的使用

--单例模式、组合模式、命令模式、委派模式等便于团队开发巨大的用户社区稳定且成熟大量第三方工具的支持13Struts简介Struts缺点不适合小型应用开发直接使用JSP和Servlet反而方便快捷基于请求的框架相对与基于组件事件驱动的框架来说设计理念已经相对落后,其可重用的粒度也相对比较小14Struts简介Struts中的控制器ActionServlet在Struts1.1中缺省采用ActionServlet类来充当控制器。当然如果ActionServlet不能满足你的需求,你也可以通过继承它来实现自己的类。这可以在/WEB-INF/web.xml中来具体指定。用户定制的Action通过继承Action类来实现具体的用户定制的Action类。具体Action类的功能一般都在execute(以前是perform方法)方法中完成。15Struts简介ActionServlet的职责接收客户端请求根据客户端的URI将请求映射到一个相应的Action类从请求中获取数据填充FormBean(自动填充form,如果需要)调用Action类的execute()方法获取数据或者执行业务逻辑选择正确的视图响应客户负责初始化和清除应用配置信息的任务读取web.xml中的(init-param)初始化参数读取struts-config.xml中的配置信息16Struts简介Action概述辅助ActionForm进行一些表单数据的检查。秉着MVC分离的原则,也就是视图级的验证工作放在ActionForm来完成,比如输入不能为空,email格式是否正确。而与具体业务相关的验证则放入Action中,这样就可以获得ActionForm最大重用性。执行必要的业务逻辑,比如存取数据库,调用实体bean等。业务逻辑应该分离到单独的JavaBean中,而Action只负责错误处理和流程控制。而且考虑到重用性的原因,在执行业务逻辑的JavaBean中不要引用任何与Web应用相关的对象,比如HttpServletRequest,HttpServletResponse等对象,而应该将其转化为普通的Java对象。更新服务器端的bean数据,后续对象中可能会用到这些数据,比如在JSP中利用bean:write来获得这些数据。根据处理结果决定程序的去处,并以ActionForward对象的形式返回给ActionServlet。17Struts简介ActionForm自定义ActionForm必须继承ActionForm(抽象类)org.apache.struts.action.ActionFormActionForm必须为每个应该从请求中收集的HTML输入控件定义对应的属性及其getter/setter方法。重写validate方法实现验证(可选)如果想组装form前初始化属性,则需要重写reset方法(可选)18Struts简介View<%@pagecontentType="text/html;charset=UTF-8"%><%@pagelanguage="java"%><%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%><%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%><%@tagliburi="/WEB-INF/struts-logic.tld"prefix="logic"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""/TR/html4/loose.dtd"><html:html><head>index.jsp!</head><body><html:formaction="userRegistration"method="post">username:<html:textproperty="userName"/><br>password:<html:textproperty="password"/><br><html:submitproperty="OK!"/><br></html:form></body></html:html>19Struts简介Model(ActionForm)public

classUserFormextendsActionForm{

privateStringuserName;

privateStringpassword;

publicStringgetPassword(){

returnpassword; }

public

voidsetPassword(Stringpassword){

this.password=password; }

publicStringgetUserName(){

returnuserName; }

public

voidsetUserName(StringuserName){

this.userName=userName; }}20Struts简介Controller(Action)public

classUserRegistrationActionextendsAction{

publicActionForwardexecute(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse)

throwsException{ UserFormuf=(UserForm)form; StringuserName=((UserForm)form).getUserName();

if((null==userName)||(true==userName.equalsIgnoreCase(""))){

returnmapping.findForward("fail"); }else{

returnmapping.findForward("success"); } }}21Struts简介配置文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.1//EN""/struts/dtds/struts-config_1_1.dtd"><struts-config><form-beans> <form-beanname="userForm"type="myservlet.strutsform.UserForm"/></form-beans><action-mappings> <actionpath="/userRegistration" type="strutsaction.UserRegistrationAction"name="userForm" scope="request"> <forwardname="success"path="/ok.jsp"/> <forwardname="fail"path="/fail.jsp"/> </action> </action-mappings></struts-config>22Struts国际化不将数据写死到界面上,而是写到一个文件中,让程序自动的读。……带来的好处:不用写多套页面显示到页面上的文字:如:“请输入用户名”在英文的页面应该显示“Pleaseinputusername”到底如何操作?将要显示的文字放在一个文件中,称“国际化资源库”在页面自动调用该文字23Struts国际化XXXResources_YYYXXX:资源库名称YYY:国籍和语言如:WeimmyResources_zh_CNWeimmyResources_en国际化资源文件命名24Struts国际化文字国籍化图片国际化按钮国际化国际化内容25Struts国际化在Struts中如何操作:把文字写到文件中,而不写死到页面上页面上Struts自动的从文件中读取对应应该显示的文字,然后显示出来文字国际化26Struts国际化在Struts中如何操作:把文字写到文件中,而不写死到页面上页面上Struts自动的从文件中读取对应应该显示的文字,然后显示出来资源文件WeimmyResource_zh_CN.properties:login.username=UserNamelogin.password=Password放在包myresource中。在/WEB-INF/struts-config.xml中添加如下配置:<message-resourcesparameter="myresource.EricResource_en"/>同样添加多个语言资源文件文字国际化27Struts国际化<html:htmllang=“true”><bean:messagekey="login.username"/></html:html>其中的lang=“true”让页面根据访问者的locale自动选择加载哪个资源库。文字国际化—页面显示28Struts国际化在Struts中如何操作:把图片的url写到文件中,而不写死到页面上页面上Struts自动的从文件中读取对应应该显示的图片的url,然后显示出来WeimmyResource_zh_CN.properties:login.pic=/pic/en.jpg放在包myresource中。在/WEB-INF/struts-config.xml中添加如下配置:<message-resourcesparameter="myresource.EricResource_en"/>页面显示<html:imgpageKey="login.pic"/>图片国际化29Struts国际化在Struts中如何操作:把按钮上要显示的文字写到文件中,而不写死到页面上页面上Struts自动的从文件中读取对应按钮应该显示的文字,然后显示出来资源文件EricResource_zh_CN.properties:login.button=Login放在包myresource中。国际化配置在/WEB-INF/struts-config.xml中添加如下配置:<message-resourcesparameter="myresource.EricResource_en"/>页面显示<html:submit><bean:messagekey="login.button"/></html:submit>按钮国际化30Struts标签库HTML标签库Bean标签库Logic标签库Struts主要标签库31Struts标签库bean:define从某范围取某Attribute,并赋值给某变量。<%request.setAttribute("userName","Eric");%><bean:defineid="myName"name="userName"scope="request"/><%=myName%>注意:当scope中范围指定错误时会如何当不指定scope时又如何Bean标签库32Struts标签库bean:define从某范围取某JavaBean的某属性。<jsp:useBeanid="userBean"class="actionforms.UserForm"/><bean:defineid="name"name="userBean"property="userName"></bean:define><%=name%>注意:在form中初始化是就先将其userName变量赋个初始值。Bean标签库33Struts标签库bean:define新建某变量,并为其赋值。<bean:defineid="hisName"value="Jason"scope="request"></bean:define><%=hisName%>bean:write显示变量的值。<bean:writename="hisName"scope="page"/>Bean标签库34Struts标签库bean:parameter相当于request.getParameter(…)方法。<html:linkhref="Next.jsp?param=weimmy">one</html:link><bean:parameterid="value"name="param"value="Test"/><bean:writename="value"scope="page"/>bean:parameter相当于request.getParameterValues(…)方法。<html:linkhref="Next.jsp?hobby=Java&hobby=C">multi</html:link><bean:parameterid="hobbyValue"name="hobby"multiple="true"value="Test"/><%for(inti=0;i<hobbyValue.length;i++){out.println(hobbyValue[i]);}%>Bean标签库35Struts标签库logic:equal判断是否相等logic:notEqual判断是否不相等logic:greaterThan判断是否大于logic:lessThan判断是否小于logic:greaterEqual判断是否大于等于logic:lessEqual判断是否小于等于logic:present判断某变量是否存在某范围内Logic标签库logic:notPresent判断request里的某parameter是否不存在logic:empty判断变量是否为空logic:notEmpty判断变量是否不为空logic:match判断String是否等于某个值logic:notMatch判断String是否等于某个值logic:iterate遍历一个List、Map36Struts标签库html:link超连接,跳转到某URLhtml:form表单html:text文本输入框html:hidden隐藏文本框html:password密码框html:reset复位按钮HTML标签库html:select与html:option下拉框html:radio单选按钮html:checkbox复选按钮h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论