用户注册的三层架构问题

来源:互联网 发布:录制游戏视频的软件 编辑:程序博客网 时间:2024/05/30 04:43

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>

0 0
原创粉丝点击