struts2+spring+hibernate项目总结
1、struts 2.0中的<s:textfield>标签
<s:textfieldlabel="%{getText('label.login.userName')}"
name="userName"
tooltip="%{getText('label.login.userName.toolTip')}"
id="userName"/>
label属性就指明了文本框前面的说明文本,没必要重新加入文字说明
2、在struts2.0的标签中,国际化信息要用"%{getText('label.login.userName')}"这种形式
3、<s:head/>放置在<head></head>之间
将会引入strutstag用到的一些css和js文件
需要注意的是,如果任何uitag或者ajaxtag的theme属性值是ajax
那么<s:head>必须有theme属性并且它的值是ajax
这将会额外地引入与ajax相关的js文件,比如dojo.js
如果没有引入,则会出现dojo不存在的错误
同时引入之后,可以在写javascript脚本时使用dojo框架,例如dojo,byId()
4、如果要自定义布局struts2.0中的uitag,则要设置uitag必须加上theme="simple"才能进行自定义布局
5、在结合dwr的过程中,在页面要导入的javascript脚本是
<scripttype='text/javascript'src='/tmsot/dwr/interface/login.js'></script>
<scripttype='text/javascript'src='/tmsot/dwr/engine.js'></script>
<scripttype='text/javascript'src='/tmsot/dwr/util.js'></script>
但是engine.js、util.js文件没必要copy
6、当进行用户名是否存在验证的时候,如果多次输入错误,则会出现多条错误提示,同时,即使输入的是正确的也不能进入,
<beanid="loginAction"class="com.lsxy.tmsoft.web.action.Login"
abstract="false"lazy-init="default"
autowire="default" dependency-check="default" scope="prototype"><property name="userService">
<refbean="userService"/>
</property>
</bean>
如图配置后就表明每次从spring容器中获取action.Login的实例的时候就会new一个新对象,即我们所说的原型,spring中scope默认的是单态(singleton),当然针对web应用程序,还可以配置为request、session等范围。至于什么时候使用什么权限范围就要看应用程序的使用了,比如在多线程程序中,单态是否会对程序有所影响就需要考虑了。
7、利用c3p0的连接sqlserver过程
(1)新建一个init.property文件,放置在src下,代码如下
jdbc.type=mssql
jdbc.driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.url=jdbc:microsoft:sqlserver://localhost:1433;databasename=tmsoft
jdbc.username=sa
jdbc.password=c3p0.acquireIncrement=3
c3p0.idleConnectionTextPeriod=900
c3p0.minPoolSize=2
c3p0.maxPoolSize=50
c3p0.maxStatements=100
c3p0.numHelperThreads=10
c3p0.maxIdleTime=600
c3p0.initialPoolSize=2
(2)在applicationContext.xml中配置如下代码
<beanid="placeholderConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<propertyname="location">
<value>classpath:init.properties</value>
</property>
</bean><bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"dependency-check="default">
<propertyname="driverClass">
<value>${jdbc.driverClassName}</value>
</property>
<propertyname="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<propertyname="user">
<value>${jdbc.username}</value>
</property>
<propertyname="password">
<value>${jdbc.password}</value>
</property>
<propertyname="acquireIncrement">
<value>${c3p0.acquireIncrement}</value>
</property>
<propertyname="initialPoolSize">
<value>${c3p0.initialPoolSize}</value>
</property>
<propertyname="minPoolSize">
<value>${c3p0.minPoolSize}</value>
</property>
<propertyname="maxPoolSize">
<value>${c3p0.maxPoolSize}</value>
</property>
<propertyname="maxStatements">
<value>${c3p0.maxStatements}</value>
</property>
<propertyname="numHelperThreads">
<value>${c3p0.numHelperThreads}</value>
</property>
<propertyname="maxIdleTime">
<value>${c3p0.numHelperThreads}</value>
</property>
</bean>
8、对struts.xml代码著一备注
<struts>
<constantname="objectFactory"value="spring"/>
<constantname="struts.custom.i18n.resources"
value="globalMessages"/>
<packagename="default"extends="struts-default">
<actionname="login"class="loginAction">
<resultname="SUCCESS">/admin/index.jsp</result>
<resultname="input">/login.jsp</result>
</action>
</package>
</struts>
要和spring结合请加<constantname="objectFactory"value="spring"/>
要国际化<constantname="struts.custom.i18n.resources"
value="globalMessages"/>
9、log4j的使用
(1)log4j的配置文件
#log4j.rootLogger=INFO,A1,A2
log4j.rootLogger=INFO,A1,A2log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-mm-dd HH:mm:ss, SSS} [%c] [%p] %m%nlog4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=c:\WebRoot.txt
log4j.appender.A2.MaxFileSize=10
log4j.appender.A2.MaxBackupIndex=10
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-d{yyyy-mm-ddHH:mm:ss,SSS}[%c][%p]%m%n