您的位置:首页 > 编程语言 > Java开发

struts2+hibernate3+spring3(ssh2)框架下的web应用

2013-12-26 00:00 141 查看
摘要: 配置spring,hibernate和struts

首先我们需要一点点jar包,来支持我们的工作,具体这些jar包是干嘛的自己去搜。如图:





在工程里面,将这些jar包复制到WebContent下的WEB-INF下的lib目录里面,Eclipse会自动将jar包加到工程项目里。如图



ssh2的优势在于,加入jar包,写上配置文件,就能使用。它的优势在于使用配置文件,主要是xml来代替了大量的代码书写操作,但是缺点在于新人对于配置文件简直两眼一抹黑,而且大的工程的话会存在配置文件泛滥成灾。所以事有利弊,一切在于自己的掌握。

(一)配置struts2。

struts2的配置很简单,只需要在src目录下建立文件struts.xml。具体怎么才能建立这个文件是属于Eclipse的问题,就不多说了。

打开struts2,如果你使用的是MyEclipse的话,或许看不到如我下图的东西,你需要如图点击下source选项卡就行了。



在里面写上:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constant name="struts.custom.i18n.resources" value="message" />
<package name="SBPM" extends="json-default">

<!--1Common Action -->
<action name="login" class="ManageUserAction" method="login">
<result name="input">/WEB-PAGE/Login.jsp</result>
<result name="success">/WEB-PAGE/Test.jsp</result>
</action>
<!-- 2ChangeLanguage -->
<!-- 3Request operation -->
<!-- 4Change url -->
</package>
</struts>

解释下这个文件,

1.1<? 到 > 是这个xml的dtd,encoding和version的定义,从<struts>到</struts>是我们定义的struts需要使用的内容。

1.2<constant....这一行,是定义的国际化文件内容,就是internationalization因为从i到n有18个字母,所以又叫i18n。后面我们将使用2个文件名为message的文件来实现中英文的转化。

1.3从<package>到</package>是我定义的一个package,可以用于workspace的转换等工作,可 以彼此继承,因为这个工程很小,所以就定义一个就行了。使用默认的workspace /。注意,extends="json-default" 一般这里是使用struts-default,但是json是struts-default的扩展包,使用json-default的话,我就能使用 json与前台,用于不刷新页面的后台调用和前台显示。

1.4像<!-- 2ChangeLanguage -->这样的东西,是注释。我饿打算把我的action分成4部分,如注释所言。随手写注释是个非常好的习惯。具体原因可以去搜下。在<!-- 与-->之间可以写任何内容。

1.5我写了第一个action。

<action name="login" class="ManageUserAction" method="login">
<result name="input">/WEB-PAGE/Login.jsp</result>
<result name="success">/WEB-PAGE/Test.jsp</result>
</action>

name为这个action的名字,它是提供给jsp页面用于调用action时的标志。

class是这个action在工程里的位置,本来应当写成com.sbpm.action.ManageUser的,但是我使用了spring对struts进行了托管,所以这里填的是spring中写的action的class。

每个action可以定义很多的result。当我们在action的文件里面进行操作的时候,可以返回这些String,然后会根据我们返回 String的内容找到result的name,在调用result里面所定义的操作。我们这里定义了2个返回,如果返回input,那么就跳转到登陆页 面,如果返回success,跳转到Test.jsp页面。这里写的/WEB-PAGE/Test.jsp是工程下的文件所在目录+文件名。



打开上图的WEB-INF下的web.xml文件,写下如下内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>SBPMS</display-name>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>/Login.jsp</welcome-file>
</welcome-file-list>
</web-app>

需要解释一下。

2.1从<session-config> 到 </session-config>设置了我们页面的session的持续时间为10分钟。实际应用中就是登陆超时,10分钟不动,你再点页面的话我会提示请重新登陆。

2.2其余分别定义了监听器,spring文件位置,过滤器,和初始界面。

That's all。struts2配置完毕。

(二)配置Spring和Hibernate

在WebContent下的WEB-INF下建立applicationContext.xml文件,这是spring配置所需要的唯一文件,我计划将Spring与Hibernate的配置放在一起。打开文件,写入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- Connect dataSource and sessonFactory -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/sbpms"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="maxActive" value="100"></property>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/sbmps/bean/User.hbm.xml</value>
</list>
</property>
</bean>

<!-- IOC DAOs -->
<!-- DAO for User -->
<bean id="UserDao" class="com.sbpms.dao.impl.UserDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>

<bean id="UserService" class="com.sbpms.service.impl.UserServiceImpl">
<property name="userDao" ref="UserDao"></property>
</bean>

<!-- IOC Actions -->
<!-- Action for users -->
<bean id="ManageUserAction" class="com.sbpms.action.ManageUserAction"
scope="prototype">
<property name="service" ref="UserService"></property>
</bean>
</beans>

解释下

2.1<!-- Connect dataSource and sessonFactory -->部分是配置hibernate,主要配置jdbc的链接,dataSource和sessionFactory。jdbc是链接数据库的 url里面jdbc:mysql://localhost:3306/sbpms为数据库内容,我自己建立的数据库sbpms,其余内容写法是固定的,使 用了端口3306,是在配置数据库的时候设置的。然后设置了登陆的用户名root密码root也是设置数据库的时候设置的,再设置了下最大连接数100。

sessionFactory是将我写的java类:bean中得类与数据库的表相关联,除了<value>com/sbmps/bean /User.hbm.xml</value>这一行之外的其余东西都可以不改。这一行的意思在于将我在bean中得表-类关联文件读取。前面 还设置了显示sql,自动提交,dialect等内容。这是一种工厂模式。

2,2 <!-- IOC DAOs --> <!-- DAO for User -->是将我的dao层java类进行ioc控制,通过 <property name="sessionFactory"> <ref bean="sessionFactory"></ref> </property>将dao层与sessionFactory关联,同理,在后面的ioc中,将service与dao关联,将 action与service关联。前面在1.5提到的,struts.xml中使用的action类的class,就是这里bean的id,为 ManageUserAction,这个id关联到具体的com.sbpms.action.ManageUserAction类。这样,将jsp与 struts.xml与applicationContext.xml和数据库都关联起来了。

2.3为什么要放在WEB-INF下面,因为数据库操作的文件不希望在运行时被更改,放在WEB-INF下面就有这个优势。

That‘s all,ssh2框架就配置完成。当然这里还有另外的方法,就是将hibernate的配置写成独立的文件,叫hibernate.cfg.xml文件。在里面写hibernate的配置。因为这个项目的hibernate很小,所以我觉得没必要。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息