??xml version="1.0" encoding="utf-8" standalone="yes"?> <beans>
建立一个数据源
建立?x)话工厂c,q个cM用spring专门为hibernate3提供LocalSessionFactoryBean
定义事务理器,q个也是 spring专门为hibernate3提供的HibernateTransactionManager 事务理?br /> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
定义实体DAO
Z面的实体DAO定义一个代?proxy)c,q是spring决事务问题而提供TransactionProxyFactoryBean动态事务代理类
?path="/login" 的struts action 定义实际的actionc?该action 已经q行 type="org.springframework.web.struts.DelegatingActionProxy"讄
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://192.168.0.6:1433</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" /> --引用上面的数据源
</property>
<property name="mappingResources"> --调入映射文档
<list>
<value>com/yourcompany/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties"> --相关讄
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<property name="sessionFactory">
<ref local="sessionFactory" /> --引用?x)话工厂c?br /> </property>
</bean>
<bean id="userDAO" class="com.yourcompany.UserDAOImp">
<property name="sessionFactory">
<ref local="sessionFactory" />--引用?x)话工厂c?/font>
</property>
</bean>
<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" /> --指定事务理?需要是spring专用?
</property>
<property name="target"> --目标实体DAOc?/font>
<ref local="userDAO" />
</property>
<property name="transactionAttributes"> --定义要用事务的Ҏ(gu)
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop> --所有insert开头的Ҏ(gu)都用事务,出错要回?/font>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> --所有get开头的Ҏ(gu)都用只M?br /> <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>--所有ist开头的Ҏ(gu)都用只M?/font>
</props>
</property>
</bean>
<bean name="/login" class="com.yourcompany.struts.action.LoginAction" singleton="false">
<property name="userDAO">
<ref bean="userDAOProxy" /> --注意Q这里指定的userDAO是上面定义的代理c?br /> </property>
</bean>
</beans>
]]>
line-height: 1.5em;
font-weight: bold;
font-style: italic;
font-variant: small-caps;
font-family: verdana,serif;
事实上你可以写这些属性:(x)
font: 1em/1.5em bold italic small-caps verdana,serif
现在好多?jin)吧Q不q有一点要注意Q用这一写方式你臛_要指定font-size和font-family属性,其他的属性(如font-weight, font-style,font-varientQ如未指定将自动使用默认倹{?br />
2.同时使用两个class
通常我们只ؓ(f)属性指定一个class,但这q不{于你只能指定一个,实际上,你想指定多少可以指定多,例如Q?br /><p class="text side">...</p>
通过同时使用两个classQ用空D不是逗号分割Q?q个D落同时应用两个class中制定的规则。如果两者中有Q何规则重叠,那么后一个将获得实际的优先应用?br />
3.css中边框(border)的默认?br />当编写一条边框的规则Ӟ你通常?x)指定颜艌Ӏ宽度以?qing)样式(M序均可Q。例如:(x)border: 3px solid #000Q?像素宽的黑色实线Ҏ(gu)Q,其实q个例子中唯一需要指定的值只是样式。假如你指定样式为实U(solid),那么其余的值将使用默认|(x)默认的宽度ؓ(f)中等Q相当于3?像素Q;默认的颜色ؓ(f)Ҏ(gu)里的文字颜色。如果这正是你想要的效果Q你完全可以不在css里指定?br />
4.!important?x)被I(xin)E忽略
在css中,通常最后指定的规则?x)获得优先权。然而对除了(jin)IE以外的浏览器来说QQ何后面标?important的语句将获得l对的优先权Q例如:(x)
margin-top: 3.5em !important; margin-top: 2em
除IE以外所有浏览器中的剙边界都是3.5emQ而IE?emQ有时候这一点很有用Q尤其在使用相对边界值时Q就像这个例子)(j)Q可以显C出IE与其他浏览器的细微差别?br />Q很多h可能q注意到?jin)css的子选择器也是会(x)被I(xin)E忽略的)(j)
5.囄替换的技?br />使用标准的html而不是图片来昄文字通常更ؓ(f)明智Q除?jin)加快下载还可以获得更好的可用性。但是如果你军_(j)使用讉K者的机器中可能没有的字体Ӟ你只能选择囄?br />举例来说Q你惛_每一늚剙使用“Buy widgets”的标题Q但你同时又希望q是能被搜烦(ch)引擎发现的,Z(jin)观你用了(jin)见的字体那么你得用图片来昄?jin)?x)
<h1><img src="widget-image.gif" alt="Buy widgets" /></h1>
q样当然没错Q但是有证据昄搜烦(ch)引擎对真实文本的重视q超qalt文本Q因为已l有太多|站使用alt文本充当关键字)(j)Q因此,我们得用另一U方法:(x) <h1><span>Buy widgets</span></h1> Q那你的漂亮字体怎么办呢Q下面的css可以帮上忙:(x)
h1
{
background: url(widget-image.gif) no-repeat;
}
h1 span
{
position: absolute;
left:-2000px;
}
现在你既用上?jin)漂亮的囄又很好的隐藏了(jin)真实文本——借助cssQ文本被定位于屏q左?2000像素处?br />
6.css盒模型hack的另一选择
css盒模型hack被用来解决IE6之前的浏览器昄问题QIE6.0之前的版本会(x)把某元素的边框值和填充值包含在宽度之内Q而不是加在宽度gQ。例如,你可能会(x)使用以下css来指定某个容器的寸Q?br />#box
{
width: 100px;
border: 5px;
padding: 20px;
}
然后在html中应用:(x)<div id="box">...</div>
盒的d度在几乎所有浏览器中ؓ(f)150像素Q?00像素宽度+两条5像素的边?两个20像素的填充)(j)Q唯独在IE6之前版本的浏览器中仍然ؓ(f)100像素Q边框值和填充值包含在宽度gQ,盒模型的hack正是Z(jin)解决q一问题Q但是也?x)带来麻烦(ch)。更单的办法如下Q?br />css:
#box
{
width: 150px;
}
#box div {
border: 5px;
padding: 20px;
}
html:
<div id="box"><div>...</div></div>
q样一来在M览器中盒的d度都是150像素?br />
7.块元素居中
假设你的|站使用?jin)固定宽度的布局Q所有的内容|于屏幕中央Q可以用以下的cssQ?br />#content
{
width: 700px;
margin: 0 auto;
}
你可以把html的body之内M目|于<div id="content"></div>中,该项目将自动获得相等的左双界g而保证了(jin)居中昄。不q,q在IE6之前版本的浏览器中仍然有问题Q将不会(x)居中Q因此必M改如下:(x)
body
{
text-align: center;
}
#content
{
text-align: left;
width: 700px;
margin: 0 auto;
}
对body的设定将DM内容居中Q但是连所有的文字也居中了(jin)Q这恐怕不是你惌的效果,为此#content 的divq要指定一个|(x)text-align: left
8.使用css实现垂直居中
垂直居中对表格来说是菜一,只需指定单元gؓ(f)vertical-align: middle卛_Q但q在css布局中不用。假设你一个导航菜单的高度设ؓ(f)2emQ然后在css中指定垂直对齐的规则Q文字还是会(x)被排到盒的顶部,Ҏ(gu)没有什么区别?br />要解册一问题Q只需盒的行高设Z盒的高度相同卛_Q以q个例子来说Q盒?em,那么只需在css中再加入一条:(x)line-height: 2em 可实现垂直居中?jin)?br />
9. 容器内的css定位
css的最大优点之一是可以对象定位在文档的Q何位|,同样的也可以对象在某容器内q行定位。只需要ؓ(f)该容器添加一条css规则Q?br />#container
{
position: relative;
}
则容器内的Q何元素的定位都是相对于该容器的。假定你使用以下htmll构Q?br /><div id="container"><div id="navigation">...</div></div>
如果惛_navigation定位在容器内d边界30像素Q离剙5像素Q可以用以下css语句Q?br />#navigation
{
position: absolute;
left: 30px;
top: 5px;
}
10.延臛_q底部的背景?br />css的缺点之一是缺乏垂直方向的控制Q从而导致了(jin)一个表格布局不会(x)遇到的问题。假设你在页面的左侧讑֮?jin)一列用于放|网站的D。页面ؓ(f)白色背景Q但你希望导航所在的列ؓ(f)蓝色背景Q用以下css卛_Q?br />#navigation
{
background: blue;
width: 150px;
}
问题在于D不?x)一直g伸到面的底部,自然它的背景色也不会(x)延到底部。于是左列的蓝色背景在页面上被半路截断,费?jin)你的一番设计。怎么办呢Q很不幸我们现在只能用欺骗的办法Q即body的背景指定ؓ(f)与左列同颜色同宽度的囄Qcss如下Q?br />body
{
background: url(blue-image.gif) 0 0 repeat-y;
}
背景囑ֺ为宽150像素的蓝色图片。这一办法的缺Ҏ(gu)没法使用em来指定左列的宽度Q当用户改变文字的大导致内容的宽度扩张Ӟ背景色的宽度不会(x)随之改变?br />到写q篇文章为止q是对这c问题的唯一解决办法Q因此你只能为左列用像素值来获得能够自动延的不同的背景艌Ӏ?img src ="http://www.aygfsteel.com/zhangrenquan/aggbug/62163.html" width = "1" height = "1" />
]]>
Hibernate中的ThreadLocal 转蝲地址Q?A >http://blog.blogchina.com/refer.393753.html
Hibernate的文档时看到?jin)关于ThreadLocal理多线E访问的部分。具体代码如?
1. public static final ThreadLocal session = new ThreadLocal();
2. public static Session currentSession() {
3. Session s = (Session)session.get();
4. //open a new session,if this session has none
5. if(s == null){
6. s = sessionFactory.openSession();
7. session.set(s);
8. }
return s;
9. }
我们逐行分析
1?初始化一个ThreadLocal对象QThreadLocal有三个成员方?get()、set()、initialvalue()?
如果不初始化initialvalueQ则initialvalueq回null?
3。session的getҎ(gu)当前U程q回其对应的U程内部变量Q也是我们需要的net.sf.hibernate.SessionQ相当于对应每个数据库连接)(j).多线E情况下׃n数据库链接是不安全的。ThreadLocal保证?jin)每个线E都有自qsQ数据库q接Q?
5。如果是该线E初ơ访问,自然QsQ数据库q接Q会(x)是nullQ接着创徏一个SessionQ具体就是行6?
6。创Z个数据库q接实例 s
7。保存该数据库连接s到ThreadLocal中?
8。如果当前线E已l访问过数据库了(jin)Q则从session中get()可以获取该U程上次获取q的q接实例?
通过ThreadLocalQ我们既实现?jin)多U程q发Q同Ӟ也实C(jin)SingleTon模式。一举两得?/P>