??xml version="1.0" encoding="utf-8" standalone="yes"?>
antlr-2.7.5H3.jar http://www.antlr.org/ 语言转换?Hibernate利用它实?HQL ?SQL的{?br />
asm.jar/asm-attrs.jar http://asm.objectweb.org/ ASM 字节转换?br />
c3p0-0.8.5.2.jar http://sourceforge.net/projects/c3p0 C3PO JDBC q接池工?br />
cglib-2.1.jar http://cglib.sourceforge.net/ 高效的代码生成工? Hibernate用它在运行时扩展 Javacd实现 Java 接口
commons-collections-2.1.1.jar http://jakarta.apache.org/commons/collections Apache 的工具集,用来增强Java寚w合的处理能力
commons-logging-1.0.4.jar http://jakarta.apache.org/commons/logging/ Apache 软g基我l所提供的日志工?br />
concurrent-1.3.2.jar http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html U程同步工具,在用JBoss 的树状缓存时需要用?br />
connector.jar http://java.sun.com/j2ee/connector/ 用连接多个应用服务器的标准连接器
dom4j-1.6.jar http://dom4.j.org/ dom4j XML 解析?br />
ehcache-1.1.jar http://sourceforge.net/projects/echache ~存工具.在没有提供其他缓存工h,q个~存工具是必不可的
jaas.jar http://java.sun.com/products/jass/ 标准?Java 权限和认证服务包
jaxen-1.1-beta-4.jar http:jaxen.org/ 通用?XPath 处理?nbsp; ?br />
jboss-cache.jar http://www.jboss.com/products/jbosscache JBoss 的一U树状缓存实现工?br />
jboss-common.jar http://jboss.org/ Jboss 的基?在?JBoss 的树状缓存时必须有此?br />
jboss-jmx.jar http://jboss.org/ JBoss ?JMX 实现?br />
jboss-system.jar http://jboss.org/ JBoss 的核?包括服务器和部v引擎
jdbc2_0-stdext.jar http://java.sun.com/products/jdbc/download.html#spec 标准?JDBC 2.0 扩展API
jgroups2.2.7.jar http://www.jgroups.org/ |络通信工具?br />
jta.jar http://java.sun.com/products/jta 标准?JAVA 事务处理接口
junit-3.8.1.jar http://www.junit.org/ JUnit 试框架
log4.j-1.2.9.jar http://logging.apache.org/log4j/ log4j ?Apache 的日志工?br />
oscache-2.1.jar http://www.opensymphony.com/oscache/ Java 对象的缓存工?br />
proxool-0.8.3.jar http://proxool.sourceforge.net/ Proxool JDBC q接?工具
swarmcache-1.0rc2.jar http://swarmcache.sourceforge.net/ Hibernate 可以使用的一U缓存工?br />
versioncheck.jar 版本查工具包,用于在构?Hibernate 的时候检查辅?jar 包文件的版本
xerces-2.6.2.jar http://xml.apache.org/xerces2-j/ SAX XML 解析?br />
xml-apis.jar http://xml.apache.org/xerces2-j/ Java语言中标准的XML 解析?/font>
讉K装在MessageResources中的本地化文?/p>
Actioncȝexecute()Ҏ首先获得MessageResources对象Q?br />
MessageResources messages=getResources(request);
在ActioncM定义了getResources(HttpServletRequest request)ҎQ该Ҏq回当前默认的MessageResources对象Q它装了Resource Bundle中的文本内容。接下来Actioncd可以通过MessageResources对象来访问文本内宏V例如,如果要读取消息KEY?#8220;hello.jsp.title”对应的文本内容,可以调用MessageResourcescȝgetMessage(String key)ҎQ?br />
String title=messages.getMessage("hello.jsp.title");
业务逻辑验证
ActionMessages errors=new ActionMessages();
String userName=(String)((HelloForm)form).getUserName();
String badUserName="Monster";
if(userName.equalsIgnoreCase(badUserName))
{
errors.add("username",new ActionMessage("hello.dont.talk.to.monster",badUserName));
saveErrors(request,errors);
return(new ActionForward(mapping.getInput()));
}
如果用户输入的姓?#8220;Monster”Q将创徏包含错误信息的ActionMessage对象QActionMessage对象被保存岛ActionMessages对象中。接下来调用在Action基类中定义的saveErrors()ҎQ它负责把ActionMessages对象保存岛request范围内。最后返回ActionForward对象QStruts框架会根据ActionForward对象包含的{发信息把h转发岛恰当的视图lgQ视囄仉过<html:errors>标签把request范围内的ActionMessage对象中包含的错误消息昄出来Q提C用户修攚w误?br />
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)
{
ActionErrors errors=new ActionErrors();
if((userName==null)||(userName.length())<1)
error.add("username",new ActionMessage("hello.no.username.error"));
return errors;
}
W二U类型的验证Q即业务逻辑验证由Action来负责处理?/p>
例:
package hello;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet.ServeltException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResource;
public final class HelloAction extends Action
{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception
{
MessageResources message=getResources(request);
Action Messages errors=new ActionMessages();
String userName=(String)((HelloForm)form).getUserName();
//ActionMessages errors=new ActionMessage();
//String userName=(String)((HelloForm)form).getUserName();
String badUserName="Monster";
if(userName.equalslgnoreCase(badUserName))
{
errors.add("username",new ActionMessage("hello.dont.talk.to.monster",badUserName));
saveErrors(request,errors);
}
return (new ActionForward(mapping.getInput()));
}
PersonBean pd=new PersonBean();
pd.setUserName(userName);
pd.saveToPersistentStore();
request.setAttribute(Constants.PERSON_KEY,pd);
request.removeAttribute(mapping.getAttribute());
return(mapping.findForward("SayHello"));
}
}
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public final class HelloForm extends ActionForm
{
private String userName=null;
public String getUserName(){
return(this.userName);
}
public void setUserName(String userName)
{
this.userName=userName;
}
public void reset(ActionMapping mapping,HttpServletRequest request)
{
this.userName=null;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request)
{
ActionErrors errors=new ActionErrors();
if((userName==null)||(userName.length()<1))
errors.add("username",new ActionMessage("hello.no.username.error"));
return errors;
}
}
ActionForm Bean 实质上是一UJavaBean,不过它除了具有JavaBean的常规方法,q有两种ҎҎQ?br />
validate():用于表单验证?br />
reset:把属性重新设|ؓ默认倹{?/p>
<bea:message>标签的key属性ؓ“hello.jsp.title”,Resource Bundle中与匚w的内容ؓQ?br />
hello.jsp.title=Hello-A first Struts program
因此Q以?lt;bean:message>标签把“Hello-A first Struts program”输出岛网上?br />
h转发Q?br />
Servlet的service()Ҏ中执行以下代码:
RequestDispatcher rd=request.getRequestDispatcher("hello.jsp");
//Forward to requested URL
rd.forward(request,response);
在JSP面中,可以使用<jsp:forward>标签来{发请?br />
例如Q?br />
<jsp:forward page="hello.jsp"/>
h重定向:
WEBlg可以请求重定向CQ意URLQ而不仅仅是同一应用中的URL?br />
重定向的源组件和目标lg之间不共用同一个HttpServletRequest对象Q因此不能共享request范围内的׃n数据?br />
response.sendRedirect("http://jakarta.apache.org/struts/");
包含Q?br />
ServletcM用javax.servlet.RequestDispatcher.include()
RequsetDispatcher rd;
rd=req.getRequestDispatcher("/header.jsp");
在JSP文g中,可以通过<include>指o来包含其他的WEB资源Q?br /> <%@ include file="header.jsp"%>
以把处于不活动状态的HTTPSESSION对象转移到文件系l或数据库中Q这样可以提高对内存。资源的利用率?br /> 2、假定某个客h在一个购物网站上购物Q它购买的物品先放在虚拟的购物车HTTPSESSION对象中。如果此时WEB服务器突然出现故障而终止,那么内存中的HTTPSESSION对象?/p>
通客L购物信息都会丢失。如果吧HTTPSESSION对象实现保存在文件系l或数据库中Q当WEB服务器重启后Q还可以从文件系l或数据库中恢复SESSION数据