struct2.0(二)

 struts 2安装包的下载地址:http://struts.apache.org/download.cgi#Struts206

0:struts 2可以看做是 WebWork2.3 的版本。
  struts 2应用默认需要Java 5运行环境,需要支持ServletAPI2.4和JSPAPI2.0的web容器。笔者建议读者使用Java 5运行环境,使用
  Tomcat5.5或更高版本。

1:WebWork采用了一种松耦合的设计,让系统的action不再与servlet API 耦合,使得 action 单元测试更加方便。允许系统从b/s结构向c/s转换。WebWork支持更多的表现层技术,如velocity、FreeMaker等。
不同于struts 1 使用ActionServlet作为核心控制器,WebWork 使用 FilterDispatcher 作为核心控制器,处理HTTP响应和请求。

2:OGNL对集合和索引属性的支持非常强大。

3:struts 2 大量使用拦截器来处理用户请求,从而允许用户的业务逻辑控制器与 Servlet API分离。

4:struts 1 Action是单例模式,并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。
   struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

   struts 2直接使用Action属性来封装用户请求的属性,避免了开发者需要大量开发ActionForm类的繁琐。当然,这些属性还可以   是包含了子属性的Rich对象类型。

  struts 2 不仅整合了JSTL,还整合了OGNL,使得 struts 2的表达式语言功能更加强大。

  struts 2使用OGNL进行类型转换,支持基本的数据类型和常用对象之间的转换。

  struts 2和 struts 1 一样支持在ActionForm中重写validate方法来进行手动校验,也支持整合校验框架进行校验。

5: struts 2以Spring的IoC容器作为默认的OBject工厂,而不再支持内建的IoC容器。

6: ActionContext.getContext().getSession.put("user",getUsername());
  在传入页面上就可以输出该Session的属性值了:
  <body> 欢迎你,${sessionScope.user} ! </body>

7:不应该在我们的控制器中实例化一个业务逻辑组件。比较好的方法是利用工厂模式管理逻辑组件,或是使用依赖注入将组件的实例注入控制器组件中。

8:当某个Action设置了某个(些)属性值后,Struts 2 会将它们封装在一个叫“struts.valueStack”的请求属性中的,该属性保存在 requset 范围中。
valueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
上面的代码返回一个ValueStack 对象(Struts 2 的一个内置对象),它封装了所有的属性输出信息,这些信息可以方便地使用OGNL表达式获取。
也可是使用下面的方法获取:(其实实质上 就是这样获取的)
   <%  String username = (String)vs.findValue("username");  %>

9:资源文件的文件名命名格式为:
  basename_语言代码_国家代码.properties,例如:messageResource_zh_CN.properties .
  注意:对于包含非西欧字符(如:中文)的资源文件,一定要使用 nativ2ascii 命令来转换这些文件,如执行:
  native2ASCII messageResource.properties messageResource_zh_CN.properties (其中messageResource.properties中含有中文)。
10:可以在 struts.properties 中定义Web应用的全局资源文件。
    Struts2 默认会去加载WEB-INF/classes/ 下面的所有资源文件。如:
    struts.custom.il8n.resources=lee.messageResource
  上述代码标示 WEB-INF/classes/lee/messageResource.property 是该应用的主资源文件。

11:Struts2提供了如下的两种方式来输出国际化信息:
    <s:text name="messageKey"/> ,使用s:text 标签输出。
    <s:property value=" %{getText("messageKey")} ">,使用表达式输出。
12:
 <tabel border="1" >
<caption><s:text name="bookPageTitle"/></caption>
<s:iterator value="books" status="index">
 <s:if test=" #index.odd==true ">
 <tr style="background-color:#cccccc">
</s:if>
<s:else >
<tr>
</s:else>
<td><s:text name="bookName"></td>
<td><s:property /></td>
 </tr>
</s:iterator>
</table>

13:   ActionSupport类是一个工具类,它实现了Action接口,还实现了Validateable接口,提供了数据校验功能。通过继承该ActionSupport类,可以简化struts 2的Action的开发。
在继承了 ActionSupport类的Action类中重写 validate()方法,该方法会在执行系统的execute()方法之前执行。如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,然后可以通过OGNL表达式输出它们。此时请求会自动被转发到input逻辑视图处。为此需要配置改Action的input属性:<result name="input">/../xxx.jsp</result>

 addFieldError("username","username is required!");  // 添加表单校验错误。
 上面的代码之处要是登录页面的username输入为空就提交,这相应转发到input指定的页面,并在username表单域边上输出 username is required!>。这是因为<s:form>标签已经具备了输出校验错误的能力。
 或是:addFieldError("username",getText("username is required") );  // 添加表单校验错误,使用ActionSupport类的getText()方法来根据资源文件获取国际化提示信息,实现了校验输出信息的国际化。

14:struts 2还允许通过定义校验配置文件来完成数据校验,及使用校验框架。校验配置文件是通过使用struts 2已有的校验器(s),完成(非)表单的校验工作。即在该文件中配置校验规则即可。
校验配置文件的命名应该遵循一下规则:
ActionName-validation.xml ,其中ActionName就是需要校验的Action类名。
该文件需要放在该类的class文件同级目录下。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值