1、首先最简单的三层,jsp,service,dao层,jsp提交表单,service处理表单信息,dao用来和数据库交互
2、引入hibernate,dao中与数据库的交互从比较繁杂的sql语句变成hibernate的增删改查的简单操作
3、引入接口,service.impl实现service接口,dao.impl实现dao接口,这里可以引入spring的依赖注入,配置如下
<?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:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<context:annotation-config/>
<!-- 配置容器资源扫描的包 -->
<context:component-scan base-package="com.gxk"></context:component-scan>
<bean id="userManagerImpl" class="com.gxk.service.Impl.UserManagerImpl"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- results in a setDriverClassName(String) call -->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/jspregister"/>
<property name="username" value="root"/>
<property name="password" value="527425"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan">
<list>
<value>com.gxk.entity</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
</value>
</property>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="uService" expression="execution(public * com.gxk.dao.Impl..*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="uService"/>
</aop:config>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
现在就可以把原来配置的hibernate.cfg.xml删除,因为spring的applicationContext.xml文件已经把hibernate整合进来了,用hibernatetemplate可省去事务操作。
4、引入struts2,提交表单改成
<body>
<s:form action="user" namespace="/" method="post">
<s:label value="登录信息"></s:label>
<s:textfield name="username"label="用户名"></s:textfield>
<s:password name="password"label="密码"></s:password>
<s:password name="password1"label="密码"></s:password>
<s:submit value="登录"></s:submit>
</s:form>
</body>
struts.xml如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="false" />
<!-- <constant name="struts.i18n.encodeing" value="gbk"/>-->
<constant name="struts.locale" value="zh_CN"/>
<package name="default" namespace="/" extends="struts-default">
<action name="user" class="user">
<result name="fail">/error.jsp</result>
<result name="success">/success.jsp</result>
</action>
<action name="user*" class="user" method="{1}">
<result name="user{1}">/user{1}.jsp</result>
</action>
</package>
</struts>
特别注意的是在UserAction类中,UserManager不能注入,要引入struts2-spring-plugin-2.3.16.3.jar包才能注入,同时在web.xml配置监听器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>-->
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
注意此配置必须在
<filter>
<filter-name>struts-prepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts-execute</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
之前,这样在进行struts2处理是才能先读取spring的配置文件的内容,struts2的action也可以被spring的bean注入, <action name="user" class="user">该语法就是为user.action注入名字为“user”
因此在useraction类上写如下标注
@Component("user")
@Scope("prototype")
public class UserAction extends ActionSupport implements ModelDriven<UserRegister>{
当表单提交信息与实体类不符合是,可以在写一个类,此类包含与表单信息相符合的属性,action类实现modeldriven接口,new一个此类中的对象,通过
public UserRegister getModel() {
return ur;
}
就可以给此类中的字段赋值了。
5、显示所有用户,查询得到一个list名为users
在action类中,定义一个users
private List<User> users;
在定义一个get方法,便于jsp页面取值
public List<User> getUsers() {
return users;
}
最后在action指向的方法中
public String list(){
this.users = userManager.getUsers();
return "userlist";
}
这样就可以直接访问用户
<s:iterator value="users" var="user">
用户名:<s:property value="#user.username"/><br/>
</s:iterator>