struts12详解.docx
- 文档编号:11977011
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:16
- 大小:65.39KB
struts12详解.docx
《struts12详解.docx》由会员分享,可在线阅读,更多相关《struts12详解.docx(16页珍藏版)》请在冰豆网上搜索。
struts12详解
1.2.x
一、MVC模式
MVC模式是“Model-View-Controller”的缩写,中文翻译为“模型-视图-控制器”。
MVC应用程序总是由这三个部分组成。
模型(Model):
就是业务流程/状态的处理以及业务规则的制定。
视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML、JSP,也有可能为XHTML、XML和Applet等。
控制(Controller)可以理解为接收用户请求,将调用模型处理请求,并响应用户。
二、Struts介绍
Struts是Apache软件基金会(ASF)赞助的一个开源项目。
它最初是Jakarta项目中
的一个子项目,并在2004年3月成为ASF的顶级项目。
它通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的Model-View-Controller〔MVC〕设计模式的应用框架〔WebFramework〕,是MVC经典设计模式中的一个经典产品。
在Struts中,已经由一个名为ActionServlet的Servlet充当控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的struts-config.xml的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。
在MVC的模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应Struts里的ActionForm与Action两个需要继承实现超类。
在这里,Struts可以与各种标准的数据访问技术结合在一起,包括EnterpriseJavaBeans(EJB),JDBC与JNDI。
在Struts的视图(View)端,除了使用标准的JavaServerPages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如VelocityTemplates,XSLT等。
通过应用Struts的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与映射关系的配置文件(struts-config.xml)中。
Struts结构图如下:
三、Struts五大标签(运行在服务器端,属于视图技术)
1.HTML标签
<%@taglibprefix="html"uri="http:
//struts.apache.org/tags-html"%>
a)用于生成基本的HTML元素的标签
1、 html>标签用于生成HTML的元素 2、 base> 3、 link> 4、 rewrite> b)用于生成HTML表单的标签 1、 form> 2、 数据输入标签 text> password> hidden> textarea> radio> checkbox> select> option> 3、 提交按钮标签 submit> cancel> reset> button> image> c)用于显示错误或正常消息的标签 errors>: 用于显示错误消息 messages>: 用于显示正常消息 2.bean标签 <%@taglibprefix="bean"uri="http: //struts.apache.org/tags-bean"%> a)用于访问HTTP请求信息或JSP隐含对象 1、 cookie> 2、 header> 3、 parameter> 4、 page> b)用于访问Web应用资源 1、 message>: 用于显示ResourceBundle 中的消息。 用来从指定的locale中取回国际化的消息并输出。 这个过程可以传递5个以内的参数。 Message标签有两种指定messagekey的方式,一是通过key属性直接指定;二是通过name和property属性间接的指定,其中messagekey是在messageresources文件中定义的。 如: messagekey=”login.page.title”> 2、 resource> 3、 struts> 4、 include> c)用于定义或输出JavaBean的Bean标签 1、 define> 2、 write> 3、 size> bean: write,输出 d)name,在scope范围找到变量 writename="test"/>等价于<%=request.getAttribute("test")%> e)filter writename="test"filter="true"/>filter(true,false),默认是true,true按原样输出,false格式化输出。 f)property writename="user"property="username"/> g)format writename="date"format="yyyy-MM-ddHH: mm: ss"/> writename="number"format="###,###.####"/> writename="number"format="###,###.0000"/> 3.logic标签 <%@taglibprefix="logic"uri="http: //struts.apache.org/tags-logic"%> a)进行比较运算的Logic标签 equal> notEqual> greaterEqual> greaterThen> lessEqual> lessThan> b)进行字符串匹配的Logic标签 match> notMatch> c)判断指定内容是否存在的Logic标签 empty>和 notEmpty> present>和 notPresent> messagesPresent>和 messagesNotPresent> d)进行循环遍历的Logic标签 iterate> e)进行请求转发或重定向的Logic标签 forward> redirect> 如: logic: empty与logic: notEmpty,判断是否为空“”,数组集合也就是判断个数。 emptyname="attr1"> attr1为空 empty> notEmptyname="attr1"> attr1不为空 notEmpty> logic: present与logic: notPresent,判断是否存在null。 presentname="attr1"> attr1存在 present> notPresentname="attr1"> attr1不存在 notPresent> logic: iterate,迭代。 emptyname="userlist"> empty> notEmptyname="userlist"> iterateid="user"name="userlist"> writename="user"property="username"/> writename="user"property="age"/> writename="user"property="group.name"/> iterate> notEmpty> 4.Nested标签,用于表达JavaBean嵌套关系及特定的嵌套级别提供等 5.Tiles标签,需要结合Tiles框架 四、ActionForm(数据收集) 1、动态ActionForm 动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准 ActionForm的所有功能 *在struts-config.xml文件中定义动态ActionForm,如: type="org.apache.struts.action.DynaActionForm"> *在Action中使用动态ActionForm DynaActionFormdaf=(DynaActionForm)form; Stringusername=(String)daf.get("username"); Integerage=(Integer)daf.get("age"); Useruser=(User)daf.get("user"); 动态ActionForm其实是把页面中的html元素的名字和值放到了map中,所以通过get方法可以取出相应的值 动态ActionForm采用EL表达式的输出方式,${dynabean.map.prop}, 如: ${dynaForm.map.username} 动态ActionForm的验证,通常使用动态验证框架validator实现。 value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> 五、Struts文件上传 *导入commons-fileupload.jar *页面的配置,如: 标题: 文件: *ActionForm中使用FormFile来接收上传的文件。 *在Action中调用FormFile取得上传文件数据,采用流输出,即完成上传。 UploadActionFormuaf=(UploadActionForm)form; FormFilemyFile=uaf.getMyfile(); if(myFile! =null){ FileOutputStreamfos=newFileOutputStream("c: \\"+myFile.getFileName()); fos.write(myFile.getFileData()); fos.flush(); fos.close(); } *可以在struts-config.xml文件中配置上传参数,采用 如: 六、ActionFrom类型转换(Converter) 1、自动转换 *boolean: yes,1,on,true都会转换成True类型,而且忽略大小写,其他情况转换成false *Date类型的转换: *如果是java.sql.Date,页面日期的格式必须为yyyy-mm-dd,才可以转换 *如果是java.util.Date,默认情况下struts无法转换 2、自定义类型转换 *实现converter接口,实现convert方法 publicObjectconvert(Classtype,Objectvalue),第一个参数是自定义的converter,第二个是要被转换的类型。 *将实现的conerter注册,通常情况采用servlet注册 在servlet的init方法中注册,如: ConvertUtils.register(newUtilDateConverter(),Date.class); *采用servlet注册需要注意标签的配置, plugin注册) 七、ActionForward 1、可以在struts-config.xml文件中配置全局的forward 2、重定向可以配置如下: 默认为转发redirect="false" 3、可以通过ActionForward的方法设置ActionForward的参数,如下: ActionForwardactionForward=mapping.findForward("login"); actionForward.setRedirect(false); 这样会报错,出于安全考虑,不允许修改运行期配置参数。 以下是可行的: ActionForwardactionForward=newActionForward(); actionForward.setPath("login"); actionForward.setRedirect(false); 八、ActionMapping 1、struts-config.xml文件中,每个 2、forward属性 如果只通过.do转向,可以配置如下: 3、unknown属性 如果没有效的.do,则可以通过unknown属性转到指定的页面,配置如下: //unknow="true"指名它是一个处理unknow页面 九、l18N(Internationalization)国际化(Java) 1、Locale、ResourceBundle、MessageFormat类 //缺省Locale是由操作系统决定的,Locale是由语言和国家代码组成 LocaledefaultLocale=Locale.getDefault(); System.out.println("country="+defaultLocale.getCountry()); System.out.println("language="+defaultLocale.getLanguage()); Localelocale=newLocale("en","US"); //国际化资源文件是由baseName+locale组成,baseName是任意合法的文件名, //资源文件在res文件下的MessagesBundle_en_US.properties文件, //内容如: k1=hello{0} ResourceBundlerb=ResourceBundle.getBundle("res.MessagesBundle",currentLocale); //System.out.println(rb.getString("k1")); MessageFormatmf=newMessageFormat(rb.getString("k1")); System.out.println(mf.format(newObject[]{"Tom"})); 2、使用native2ascii命令,转换成Unicode 如: native2ascii.exeo.propertiesMessagesBundle_zh_CN.properties 一十、Struts的l18N国际化 1、流程(硬编码) i.在struts-config.xml文件中加入: ii.提供不同版本的国际化资源文件 iii.在jsp中采用 messagekey="page.title">标签来读取国际化消息文本 2、当设置了浏览器的language时,需要关闭浏览器才有效。 因为struts默认将locale放到session中。 所以你可以通过设置session的locale来动态切换各国语言。 publicclassChangeLanguageActionextendsAction{ @Override publicActionForwardexecute(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse) throwsException{ Stringlang=request.getParameter("lang"); LocalecurrentLocale=Locale.getDefault(); if("zh".equals(lang)){ currentLocale=newLocale("zh","CN"); }elseif("en".equals(lang)){ currentLocale=newLocale("en","US"); } //request.getSession().setAttribute(Globals.LOCALE_KEY,currentLocale); this.setLocale(request,currentLocale); returnmapping.findForward("index"); } } 3、消息文本的国际化处理 i.创建国际化消息ActionMessages、ActionMessage //创建国际化消息文本,一个ActionMessage对象对应一个文本消息 ActionMessagesmessages=newActionMessages(); //user.login.success={0},登录成功 ActionMessagemessage=newActionMessage("user.login.success",username); //如果有多个参数也可以如下: //ActionMessagemessage=newActionMessage("user.login.success",newObject[]{username}); messages.add("loginSuccess",message); ii.传递国际化消息, //调用saveMessage()传递普通消息,调用saveErrors传递错误消息 this.saveMessages(request,messages); //或this.saveErrors(request,messages); iii.显示国际化消息 //html: messages循环ActionMessages中的数据,id是给定一个变量,message为true表示普通//消息,false表示错误消息,默认为false。 Property表示读取指定消息 messagesid="msg"message="true"property="loginSuccess"> writename="msg"/> messages> //如果只显示错误信息,也可以使用 errors/> 可以在系统的资源文件中加入了,以显示不同的错误信息 #--standarderrors-- errors.header= errors.prefix= errors.suffix= errors.footer= 4、JSTL的国际化处理 setLocalevalue="${header['accept-language']}"/> setBundlebasename="res.MessageResources"/> messagekey="user.title"/> 一十一、Struts的动态验证框姓名 年龄 所属组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts12 详解