2005-08-12 (原创)struts 学习笔记 1。struts多配置文件实现 目 的: A:多人开发时,各自有自己的struts配置文件。 B:避免业务很多时struts-config.xml文件越来越大,并有利于对业务的管理。 配置原则: 将公共的配置放到struts-config.xml中,和业务密切相关的配置放到struts-config-abc.xml中 实现要点: A:避免各自的struts-config文件中使用相同的action和form名称。 B:需要在web.xml文件中配置如下,确保多个struts配置文件被解析并加载。 <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml,/WEB-INF/struts-config_abc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 2。国际化实现 目 的: 根据不同的浏览器语言环境,自动选择合理的语言界面.或者用户根据需要手动选择不用的语言界面. 配置原则: 属性文件命名规范: ApplicationResources.properties ApplicationResources_en.properties ApplicationResources_zh_CN.properties 实现要点: A。在 struts-config.xml 文件中,说明默认属性文件的位置,如下: <message-resources parameter="com.my.webproject.util.ApplicationResources" /> B。遵守属性文件命名规范 页面实现范例: <bean:message key="prompt.username"/> : <font COLOR="#FF0000"><B><bean:message key="error.notuser"/></B></font> 3。struts验证框架validation的运用 目的:页面验证交给validation来实现. 配置原则: 实现要点: A.需要验证的页面对应的form类必须继承org.apache.struts.validator.ValidatorForm B.确保validation.xml文件中的<form name="">中name的值必须和struts-config.xml文件中 <form-bean name="" type="">的name值一致 形如: struts-config.xml <form-bean name="loginForm" type="com.my.webproject.view.LoginForm"> <form-property name="code" type="java.lang.String" /> <form-property name="name" type="java.lang.String" /> </form-bean> validation.xml <form name="loginForm"> <field property="code" depends="required,mask,minlength,maxlength" bundle="alternate"> <arg0 key="prompt.code"/> <arg1 key="${var:minlength}" name="minlength" resource="false"/> <arg2 key="${var:maxlength}" name="maxlength" resource="false"/> <var> <var-name>mask</var-name> <var-value>^[0-9]*$</var-value> </var> <var> <var-name>maxlength</var-name> <var-value>6</var-value> </var> <var> <var-name>minlength</var-name> <var-value>1</var-value> </var> </field> </form> C.在struts-config.xml文件中配置验证插件,如下: <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in> D.属性文件中需要添加错误消息的键值 # Standard error messages for validator framework checks errors.required={0} is required. errors.minlength={0} cannot be less than {1} characters. errors.maxlength={0} cannot be greater than {2} characters. errors.invalid={0} is invalid. errors.byte={0} must be an byte. errors.short={0} must be an short. errors.integer={0} must be an integer. errors.long={0} must be an long. errors.float={0} must be an float. errors.double={0} must be an double. errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. E.jsp页面调用 a.页面显示错误信息 <font COLOR="#FF0000"><B><html:errors/></B></font> <html:form action="/my_login?method=find" οnsubmit="return validateLoginForm(this);"> 名称validateLoginForm由来: "validate" + struts-config.xml文件中位置的form的name(第一个字母大写) b.javascript验证 <html:form action="/my_login?method=find" οnsubmit="return validateLoginForm(this);"> <html:javascript formName="loginForm"/> 名称validateLoginForm由来: "validate" + struts-config.xml文件中对应的form的name(第一个字母大写) <html:javascript formName="loginForm"/> 中formName的值必须完全等于struts-config.xml文件中对应的form的name 4.log4j-1.2.8配置 目的:监控后台信息,输出到指定设备-log文件或控制台 配置原则: 必须将添加log4j-1.2.8.jar包加入到工程 实现要点: A.在web.xml文件中配置如下: <context-param> <param-name>webAppRootKey</param-name> <param-value>ssh.root</param-value> </context-param>
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> B.在/WEB-INF/log4j.properties文件中配置如下: # For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml! # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J. log4j.rootLogger=INFO, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n log4j.appender.logfile=org.apache.log4j.RollingFileAppender log4j.appender.logfile.File=${ssh.root}/WEB-INF/ssh.log log4j.appender.logfile.MaxFileSize=512KB # Keep three backup files. log4j.appender.logfile.MaxBackupIndex=3 # Pattern to output: date priority [category] - message log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n 5.客户化标签 目的:将复用性很强的功能,封装起来.便于最大限度的重用. 配置原则:严格按照*.tld文件的规范,编写对用的tld文件 实现要点: A. 实现类继承javax.servlet.jsp.tagext.TagSupport类,并重写以下方法 public int doEndTag() throws JspException {} public int doStartTag() throws JspException{} 实现import javax.servlet.jsp.tagext.Tag接口,实现如下方法 public void setPageContext(PageContext arg0) {} public void setParent(Tag arg0) {} public Tag getParent() {} public int doStartTag() throws JspException {} public int doEndTag() throws JspException {} public void release() {} B.tld文件编写如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>bean</shortname> <uri>http://jakarta.apache.org/struts/tags-bean</uri> <tag> <name>validateSession</name> <tagclass>com.my.webproject.tags.ValidateSessionTag</tagclass> <bodycontent>empty</bodycontent> <attribute> <name>name</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>page</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib> C.jsp页面使用如下: <app:validateSession /> 6.struts-tiles运用 目的:统一页面布局,规格化页面 配置原则: 实现要点: A.编写layout.jsp文件 <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%> <HTML> <HEAD> <TITLE>MyWebProject-VIEW</TITLE> </HEAD> <BODY> <TABLE WIDTH="100%" HEIGHT="100%"> <TR> <TD WIDTH="150" valign="top" align="left" bgcolor="#CBDAFE"> <tiles:insert attribute="sidebar" /> </TD> <TD valign="top" height="100%" width="*"> <TABLE WIDTH="100%" HEIGHT="100%"> <TR> <TD height="15%"> <tiles:insert attribute="header" ignore='true'/> </TD> </TR> <TR> <TD valign="top" height="*"> <tiles:insert attribute="content" ignore='true'/> </TD> </TR> <TR> <TD valign="bottom" height="15%"> <tiles:insert attribute="footer" ignore='true'/> </TD> </TR> </TABLE> </TD> </TR> </TABLE> </BODY> </HTML> B.在页面文件中用如下方式使用布局(index.jsp) <%@ page contentType="text/html; charset=gb2312" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%> <tiles:insert template="/form/layout.jsp" > <tiles:put name="sidebar" value="/form/sidebar.jsp"/> <tiles:put name="header" value="/form/header.jsp"/> <tiles:put name="content" value="/form/login.jsp"/> <tiles:put name="footer" value="/form/footer.jsp"/> </tiles:insert> |