1.SqlServer2005用的Jar包,可以向下兼容(通俗来说就是:现在用sqlserver2005做的项目完全移植在sqlserver2000上时,什
么都不用改就能用)。
hibernate.cfg.xml中主要代码如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url">jdbc:sqlserver://127.0.0.1:1433;databaseName=s2sh</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/s2sh/javamao/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
2.总结一下用过的几个hibernate属性的用法:
①hibernate.show_sql------值有true or false。
说明:hibernate.show_sql?控制台输出sql语句:控制台不输出sql语句;
②hibernate.hbm2ddl.auto------用过的值有create or update。
说明:前提是数据库里已有该数据库,hibernate.hbm2ddl.auto值为create时,无论该数据库是否有内容,重新生成;
值为update时,就是更新该数据库中的内容了。
3.struts2中使用session的方法:
在继承了ActionSupport的类里,通过“ServletActionContext.getRequest().getSession().setAttribute("username", "peixian");”
将内容放进去。在页面里用“${sessionScope.username }”就可以得到了。
4.struts2框架中给我们提供了很多实用的Interceptor,它的定义上面已经给出,它的具体功能如下:
timer:记录Action执行的时间,并做为日志信息输出;
logger:在日志信息中输出要执行的Action信息;
chain:将前一个执行结束的Action属性设置到当前的Action中。它被用在ResultType为“chain”指定结果的Action中,该结
果Action对象会从OgnlValueStack中获得前一个Action对应的属性,它实现Action链之间的数据传递;
static-params:将xwork.xml配置文件里定义的Action参数,设置到对应的Action中。Action参数使用<param />标签,是
<action />标签的直接子元素。我们这里定义的Action类必需实现com.opensymphony.xwork.config.entities. Parameterizable接
口;
params:将Request请求的参数设置到相应Action对象的属性中,用户注册例子用到过这个拦截器;
model-driven:如果Action实现ModelDriven接口,它将getModel()取得的模型对象存入OgnlValueStack中;
component:激活组件功能支持,让注册过的组件在当前Action中可用,即为Action提供IoC(依赖倒转控制)框架的支
持;
token:核对当前Action请求(request)的有效标识,防止重复提交Action请求(request)。
token-session:功能同上,但是当提交无效的Action请求标识时,它会将请求数据保存到session中。
validation:实现使用xml配置文件({Action}-validation.xml)对Action属性值进行验证,详细请看后面介绍的验证框架。
workflow:调用Action类的验证功能,假设Action使用ValidationAware实现验证(ActionSupport提供此功能),如果验证
没有通过,workflow会将请求返回到input视图(Action的<result />中定义的)。
servlet-config:提供Action直接对HttpServletRequest或HttpServletResponse等JavaServlet api的访问,Action要实现相应
的接口,例如:ServletRequestAware或ServletResponseAware等。如果必需要提供对JavaServlet api的访问,我们建议使用
ServletActionContext,在前面ActionContext章节中有介绍。
prepare:在Action执行之前调用Action的prepare()方法,这个方法是用来准备Action执行之前要做的工作。它要求我们的
Action必需实现com.opensymphony.xwork. Preparable接口
conversionError:用来处理框架进行类型转化(Type Conversion)时的出错信息。它将存储在ActionContext中的类型转化
(Type Conversion)错误信息转化成相应的Action字段的错误信息,保存在堆栈中。根据需要,可以将这些错误信息在视图中
显示出来。
5.如何自定义一个拦截器?
自定义一个拦截器需要三步:
1 自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。
2 在struts.xml中注册上一步中定义的拦截器。
3 在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所
有的Action都被这个拦截器拦截。
Interceptor接口声明了三个方法:
public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}
Init方法在拦截器类被创建之后,在对Action镜像拦截之前调用,相当于一个post-constructor方法,使用这个方法可以给拦截器
类做必要的初始化操作。
Destroy方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。
Intercept是拦截器的主要拦截方法,如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即
可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个String类型的
对象即可,例如Action.SUCCESS。
另外AbstractInterceptor提供了一个简单的Interceptor的实现,这个实现为:
public abstract class AbstractInterceptor implements Interceptor {
public void init() {
}
public void destroy() {
}
public abstract String intercept(ActionInvocation invocation) throws Exception;
}
在不需要编写init和destroy方法的时候,只需要从AbstractInterceptor继承而来,实现intercept方法即可。