第一次用java开发j2ee轻量级架构的项目(结合SSH),碰到的问题不少,也用到了点小技巧,在此处列出,供大家学习,也给自己总结一下,日后可能会用到。
1)把JSP放到WEB-INF目录下是不能通过地址栏访问的,智能通过对应的action来访问,action与jsp的映射配置在struts-config.xml中。struts-config.xml是struts MVC框架默认读取的配置文件,如果一个项目比较大,需要分模块或子系统来配置,可在web.xml中配置如下:
<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/conf/main-struts-config.xml,......
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
2)在使用Hibernate的过程中会碰到取某个实体类的属性时,此属性是lazy的集合,会出现莫名其妙的错误(此错误由hibernate抛出,具体错误描述忘记了),通过google,在web.xml中加入以下filter即可解决:
<filter>
<filter-name>HibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sessionFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
3)当用Hibernate连接oracle9i数据库时,使用oracle9i自带的Jdbc驱动:ojdbc14.jar,ojdbc14_g.jar,ocrs12.zip,如果连接sql server2005,ms官方网站有下。现提供连接以上两种数据库的配置:
<bean id="sqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:sqlserver://serv001:1433;database=DEMODB</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>111111</value>
</property>
</bean>
<bean id="oracleDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@serv001:1521:ORCL</value>
</property>
<property name="username">
<value>tiger</value>
</property>
<property name="password">
<value>1234</value>
</property>
</bean>
这里要特别注意的是在连接ORACLE9I数据库时,连接的URL中的ORCL是数据库在安装时填写的SID,并不是我们在net manage里配置的别名,在这里也无需在net manage里配置。这点与在VS2005中开发不同,在VS2005中配置oracle9i的连接串时填写的是在web程序所在服务器的net manage中配置的别名。还有就是配置时,由于数据库之间的语法不同,在<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>片断中配置的对应数据库语法也不同。前面的这个是oracle语法,后面这个是sql server的<!prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
4)贴出用SSH开发J2EE项目时会用到的jar图(包含连接SQL SERVER2005/ORACLE9I的数据库驱动包):
待续......