struts相关

Web组件的三种关联关系
请求转发(forward)对客户透明,request里的信息保持。
请求重定向(redirect)重新request到新的URL
包含(include)

解决并行开发:
1、多个配置文件的支持(其实还是要合并,可能会引起forward冲突)
2、模块的支持ModuleConfig对应该模块的XXXConfig如ActionConfig、FormBeanConfig(考虑模块间的转发:forward或SwitchAction)

每写一个应用都用继承BaseAction和BaseForm,当然BaseAction最好是继承LookupDispatchAction,BaseForm最好是继承ValidatorActionForm

内置的Struts Action类
ForwardAction 无FormBean,直接forward到jsp
IncludeAction
DispatchAction
LookupDispatchAction //一个Action里多个操作
SwitchAction //多模块
利用Token解决重复提交

Struts的异常处理
主要捕获业务层的业务逻辑异常(最好自定义一下),业务层要捕获DAO层的异常(抛出统一的DataException异常,最好写入日志)

Struts的扩展(plugin):如hibernate的初始化

Taglib的优缺点(学习有一定难度,web designer可能不熟悉)

资源文件的使用(多语言,用nativetoascii将非ASCII文本转为UTF-8)
所有html与jsp的ContentType设为UTF-8,另加上一个filter,根据客户的Locale对象设置相应的编码
<bean:message key="" />
ActionMessage与<html:errors>
关于资源文件(MessageResources)
ü         如果没有配置,则默认为WEB-INF/classes目录下的ApplicationResources.properties


ü         如果在struts-config.xml作了<message-resources parameter="xxx.yyy"/>则将默认的资源文件指定为WEB-INF/classes/xxx目录下的yyy.properties

ü         如果在struts-config.xml作了<message-resources key= "res" parameter="xxx.yyy"/>则将默认的资源文件指定为WEB-INF/classes/xxx目录下的yyy.properties,但是指定了引用bundle为"res",这样struts validator的客户端验证就找不到相关资源

ü         可以配置多个资源文件

<bean:write name="" property=""/>
共享常量的处理(存放常量的Constants.java文件)


解决ActionForm问题(页面增多,急速增加,可能同一类型页面字段会在不同的ActionForm中出现,且验证代码重复)
1、一个模块或相关页面对应一个ActionForm(聚合,复用性差)
2、DynaActionForm(配置文件中配置,实际将属性存在一个HashMap类对象中,故get时要强制转换)

Action注意
1、视图级(表单)验证(用javascript也可以)在ActionForm中完成(如输入不为空,e-mail格式是否正确等),业务相关验证在Action中(可能会涉及到Model),这样可以获得最大的ActionFrom重用性
2、主张将业务逻辑执行分离到单独的JavaBean中,而Action只负责错误处理和流程控制,并且在执行业务逻辑的JavaBean中不要引用任何与Web应用相关的对象,如Request、Response等,应该将其转化为普通的java对象(比如传递业务值对象VO),可以参考petstore的WAF框架。


Form Bean 是Web层的数据表示,他不能被传递到业务层;PO是持久层的数据表示,在特定情况下,例如Hibernate中,他可以取代VO出现在业务层,但是不管PO还是VO都必须限制在业务层内使用,最多到达Web层的Control,绝不能被扩散到View去。
Form Bean 和PO之间的数据转化是在Action中进行滴。
不过由于Hibernate的强大功能,例如动态生成PO,PO的状态管理可以脱离Session,使得在应用了Hibernate的J2EE框架中,PO完全可以充当VO,因此我们下面把PO和VO合并,统称为PO

Struts框架的异常处理机制
包括ActionServlet类、RequestProcessor、ExceptionHandler类处理异常的机制
宣称式异常处理(一般是全局异常,如登录失败等)
在配置文件中指定谁来处理Action中抛出的异常,需要实现ExceptionHandler子类,覆盖execute方法。

 

Commons Logging 接口

所谓的Commons Logging接口,是指将日志功能的使用与日志具体实现分开,通过配置文件来指定具体使用的日志实现。这样你就可以在Struts 1.1中通过统一的接口来使用日志功能,而不去管具体是利用的哪种日志实现,有点于类似JDBC的功能。Struts 1.1中支持的日志实现包括:Log4J,JDK Logging API, LogKit,NoOpLog和SimpleLog。

你可以按照如下的方式来使用Commons Logging接口(具体日志实现在commons-logging.properties中声明)(可以参照Struts源文中的许多类实现):


package com.foo;
// ...
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
//...
 public class Foo {   
 // ...   
 private static Log log = LogFactory.getLog(Foo.class);
 // ...   
 public void setBar(Bar bar) {      
  if (log.isTraceEnabled()) {        
   log.trace("Setting bar to " + bar);  
  }     
 this.bar = bar;  
 }
// ...
}

 

而开启日志功能最简单的办法就是在WEB-INF/classes目录下添加以下两个文件:

commons-logging.properties文件:


# Note: The Tiles framework now uses the commons-logging package to output different information or debug statements.
Please refer to this package documentation to enable it. The simplest way to enable logging is to create two files in
WEB-INF/classes:
# commons-logging.properties
# org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
# simplelog.properties
# # Logging detail level,
# # Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
#org.apache.commons.logging.simplelog.defaultlog=trace
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog


 

simplelog.properties文件:


# Logging detail level,
# Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
org.apache.commons.logging.simplelog.defaultlog=fatal


 

这里我们采用的日志实现是SimpleLog,你可以在simplelog.properties文件指定日志明细的级别:trace,debug,info,warn,error和fatal,从trace到fatal错误级别越来越高,同时输出的日志信息也越来越少。而这些级别是和org.apache.commons.logging.log接口中的方法一一对应的。这些级别是向后包含的,也就是前面的级别包含后面级别的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值