struts12详解.docx

上传人:b****5 文档编号:11977011 上传时间:2023-04-16 格式:DOCX 页数:16 大小:65.39KB
下载 相关 举报
struts12详解.docx_第1页
第1页 / 共16页
struts12详解.docx_第2页
第2页 / 共16页
struts12详解.docx_第3页
第3页 / 共16页
struts12详解.docx_第4页
第4页 / 共16页
struts12详解.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

struts12详解.docx

《struts12详解.docx》由会员分享,可在线阅读,更多相关《struts12详解.docx(16页珍藏版)》请在冰豆网上搜索。

struts12详解.docx

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注册需要注意标签的配置,10(也可以采用struts

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文件中,每个标签对应一个ActionMapping实例

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的动态验证框

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1