你的位置:首页 > Java教程

[Java教程]SSH(Struts2+Spring+Hibernate)框架搭建流程注解的方式创建Bean


此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password.

  SSH,

 

一、Hibernate(数据层)的搭建:

实现流程

二、Spring(注入实例)的使用:

实现流程

 

三、Struts2(MVC)的搭建:

实现流程

 

这里注意一点问题:

  Struts2与Hibernate在一起搭建,antlr包,有冲突。MyEclipse9中有这样问题。朋友的MyEclipse10中没有这个问题。

 

  我选择把Struts中antlr包去掉。

DB Browser中反转实体类:

sequence自动增长ID实体类中配置连接:http://www.cnblogs.com/wkrbky/p/5917985.html

 

 编辑web.

<??><web-app version="3.0" ="http://java.sun.com/  ="http://www.w3.org/2001/  xsi:schemaLocation="http://java.sun.com/>  <display-name></display-name>    <!-- 这是一只拦路虎 -->  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <!-- 读取applicationContext.-->  <context-param>    <param-name>contextConfigLocation</param-name>    <!-- 改变默认读取路径为src目录下的 applicationContext.-->    <param-value>classpath:applicationContext.</param-value>  </context-param>  <!-- 定义Spring监听器 class: spring 3.0 Web Libraries 下可以找到。 -->  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>    <!-- Struts2过滤器 -->  <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></web-app>

 配置applicationContext.

<??><!-- 1.:需要导入的命名空间    命名规范:       xsi:架构实例       beans:根节点       aop:事务       context:注解       tx:事务管理       xsi:schemaLocation   协议(一个命名规范对应一个协议) 注:若不知道自己使用的框架版本,可以把协议后的版本号去掉,此处已经去掉。 --><beans ="http://www.springframework.org/schema/beans"  ="http://www.w3.org/2001/ ="http://www.springframework.org/schema/aop"  ="http://www.springframework.org/schema/context" ="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/aop http://www.springframework.org/schema/aop/spring-aop.xsd    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">  <!-- 注解方式创建Bean  <bean id="sessionFactory"    >    <property name="configLocation" value="classpath:hibernate.cfg.-->    <!-- 数据源连接池的写法    注意:使用GUI创建的数据源,本地会话工厂改为注解会话工厂    hibernate.dialect:方言改10g,默认9    packagesToScan:注意一下,这里是导入实体类的映射信息。导入实体类的包。   -->  <bean id="dataSource"    class="org.apache.commons.dbcp.BasicDataSource">    <property name="driverClassName"      value="oracle.jdbc.driver.OracleDriver">    </property>    <property name="url"      value="jdbc:oracle:thin:@localhost:1521:orcl">    </property>    <property name="username" value="root"></property>    <property name="password" value="admin"></property>  </bean>  <bean id="sessionFactory"    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">    <property name="dataSource">      <ref bean="dataSource" />    </property>    <property name="hibernateProperties">      <props>        <prop key="hibernate.dialect">          org.hibernate.dialect.Oracle10gDialect        </prop>        <prop key="hibernate.show_sql">true</prop>        <prop key="hibernate.format_sql">true</prop>      </props>    </property>    <property name="packagesToScan">      <list>        <value>com/entity</value>      </list>    </property>  </bean>    <!-- 2注解配置组件(代表声明开启注解模式,不加的话三个框架整合的话或许有些问题,或许识别不了标注组件@)-->  <context:annotation-config />  <!-- 3配置注解的自动扫描范围(多个包配置可配置多个context:component-scan)    base-package:需要扫描的包   -->  <context:component-scan base-package="com.dao.impl"/>  <context:component-scan base-package="com.service.impl"/>  <context:component-scan base-package="com.action"/>  <!-- 4第二种方法,在dao类中定义一个模板对象,这是外部的类不是我们创建的,所以要写在这里,如果不写,dao.iml中就找不到此模型 -->  <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">    <property name="sessionFactory" ref="sessionFactory" ></property>  </bean>    <!-- (1)配置注解事务管理器 -->  <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">    <property name="sessionFactory" ref="sessionFactory"></property>  </bean>   <!-- (2)加入注解事务管理器 -->  <tx:annotation-driven transaction-manager="txManager"/>  </beans>

配置struts.

<??><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>  <!-- 是否启动动态方法调用  <constant name="struts.enable.DynamicMethodInvocation"value="false" /> -->  <!-- 开启开发者模式,作用,页面中报错信息会更加详细,默认false -->   <constant name="struts.devMode" value="true" />  <!-- 指定由spring负责action对象的创建(必选) -->  <constant name="struts.objectFactory" value="spring" />  <!-- 国际化设置,请求参数为utf-8编码(必选) -->  <constant name="struts.i18n.encoding" value="utf-8" />  <!-- 指定被struts2处理的请求后缀类型,如果有多个,用逗号隔开  <constant name="struts.action.extension" value="action" /> -->  <!-- 指定上传文件的大小上限  <constant name="struts.multipart.maxSize" value="209715200" /> -->  <!-- 当配置文件改动后是否重新加载,生产环境下需要设置为false  <constant name="struts.configuration.-->  <!-- 是否使用struts2的开发模式,生产环境下需要设置为false  <constant name="struts.devMode" value="false" /> -->  <!-- 浏览器是否缓存静态内容,生产环境下需要设置为true  <constant name="struts.serve.static.browserCache" value="true" /> -->  <!-- <includefile="example.--></struts>

数据访问层dao接口:

package com.dao;import com.entity.Users;/** * 用户接口 * @author asus * */public interface UsersDao {  /** 登陆验证 */  Users loginCheck(Users user);    /** 添加的方法 */  int addUser(Users user);}

数据访问层dao.impl实现类:

package com.dao.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.dao.DataAccessException;import org.springframework.orm.hibernate3.HibernateTemplate;import org.springframework.stereotype.Repository;import com.dao.UsersDao;import com.entity.Users;/** * 用户接口实现类 * @author asus *HibernateTemplate、HibernateDaoSupport两种方法实现增删改查 *第二种方法:(第一种在《SSH(Struts2+Spring+Hibernate)框架搭建流程》中有详细介绍)  在dao类中定义一个HibernateTemplate类的对象,用该对象调用HibernateTemplate模板封装好的方法,如下: */@Repository(value="usersDaoImpl")//用于标注数据访问组件,即DAO组件,value属性可不写默认是类名首字母小写(观看顺序1)public class UsersDaoImpl implements UsersDao {    //定义一个模板对象(使用注解不需要生成Get'Set方法,属性名必须类名首字母小写才能注解方式自动赋值)  //@Autowired//注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,抛出异常,这样的话就不友好了不是,所有Spring提供了一个配套使用的@Qualifier(完全自动)  //@Qualifier(value="hibernateTemplate")//指定注入 Bean 的名称与@Autowired配套使用  @Resource(name="hibernateTemplate")//spring组件setter方法注入(观看顺序2)  private HibernateTemplate hibernateTemplate;      @Override  public Users loginCheck(Users user) {        //得到一个集合    List<Users> list = hibernateTemplate.find("from Users where name=? and password=? ",user.getName(),user.getPassword());        //使用三元运算符,防止list.get(0)时报空指针。    return (Users) (list.size()>0?list.get(0):null);  }  @Override  public int addUser(Users user) {        try {      hibernateTemplate.save(user);      return 1;    } catch (DataAccessException e) {            e.printStackTrace();    }    return 0;  }}

业务逻辑层接口service:

package com.service;import com.entity.Users;/** * 用户业务逻辑层 * @author asus * */public interface UsersService {  /** 登陆验证 */  Users loginCheck(Users user);    /** 添加的方法 */  int addUser(Users user);}

数据访问层dao.impl实现类

package com.service.impl;import javax.annotation.Resource;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.dao.UsersDao;import com.entity.Users;import com.service.UsersService;/** * 用户业务逻辑层实现类 * @author asus * *///@Transactional  //给实现类的所有添加事务(也可以个某一个方法添加此标注)@Service(value="usersServiceImpl")//用于标注业务层组件(观看顺序3)public class UsersServiceImpl implements UsersService {  //这里以前是new的,现在不需要了,交给Spring来实例(使用注解不需要生成Get'Set方法)  @Resource(name="usersDaoImpl")//spring组件setter方法注入(观看顺序4)  private UsersDao udd;    @Override  public Users loginCheck(Users user) {        return udd.loginCheck(user);  }  @Transactional//给单个方法添加事物(若类上添加了全体事物,则不需要添加此局部事物)  @Override  public int addUser(Users user) {        return udd.addUser(user);  }}

控制器类Action:

package com.action;import javax.annotation.Resource;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Namespace;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import com.entity.Users;import com.opensymphony.xwork2.ActionSupport;import com.service.UsersService;/** * 用户控制器类 * @author asus * *///Action类[观看顺序5]@Controller(value="usersAction")//用于标注控制层组件(如struts中的action)@Scope("prototype")//单列模式@ParentPackage("struts-default")@Namespace("/")/*  Results({}):集合,对应的结果有多个 *   Result():一个结果 * name:Action return返回的值 * location:返回结果的页面 */@Results({  @Result(name="success",location="/success.jsp"),  @Result(name="login",location="/login.jsp"),  @Result(name="register",location="/register.jsp")    })public class UsersAction extends ActionSupport {  //接收页面的值  private Users user;  //一样交给Spring实例(使用注解不需要生成Get'Set方法)  @Resource(name="usersServiceImpl")//spring组件setter方法注入(观看顺序6)  private UsersService uss;    public String execute(){        return SUCCESS;  }    /** 判断用户输入的账号密码 */  @Action("loginUser")//相当于sturts.  public String login(){        Users checkNum=null;    if(user!=null){      checkNum = uss.loginCheck(user);    }        return checkNum==null?LOGIN:SUCCESS;  }  /** 添加用户 */  @Action("addUser")  public String add(){        int addResult=0;    if(user!=null){      addResult = uss.addUser(user);    }        return addResult==0?"register":SUCCESS;  }  //生成Get'Set  public Users getUser() {    return user;  }  public void setUser(Users user) {    this.user = user;  }}

登陆页面:

 <body>    <form action="loginUser.action" method="post" >      用户名:<input type="text" name="user.name" />      密码:  <input type="password" name="user.password" />      <input type="submit" value="登录按钮" >    </form> </body>

注册页面:

  <body>    <form action="addUser.action" method="post">      用户名:      <input type="text" name="user.name">      <br>      密码:      <input type="password" " name="user.password">      <br>      <input type="submit" value="注册">    </form>  </body>

成功页面:

 <body>    操作成功! </body>

 




日本旅游行程深圳到日本旅游深圳去日本旅游报价办理日本旅游签证跟团日本旅游需要多少钱2015香港冬日美食节有哪些特色美食?_怎么去? 梅州客天下元旦门票多少钱?2015梅州客天下元旦门票价格? 2015-2015达古冰山冰雪旅游节时间什么时候?_有什么好玩的? 2015梅州客天下元旦有什么活动?梅州客天下元旦活动介绍? 雷公峡优惠漂流票怎么买?惠州雷公峡漂流预订什么价格? 雷公峡漂流预定?惠州雷公峡漂流定票电话? 博罗象头山雷公峡漂流价格?象头山雷公峡漂流到什么时候? 惠州雷公峡漂流票在哪买便宜?雷公峡漂流网上预订? 深圳大鹏古城怎么去?深圳大鹏古城自助游攻略? 汕头礐石风景名胜区简介?礐石风景区游记? 汕头礐石风景区路线图?礐石风景区直通车怎么走? 汕头礐石风景区好玩吗?礐石风景区好不好玩? 南天一柱在哪里_南天一柱在哪个省 锦母角在哪_锦母角在哪里_锦母角怎么去 成都西岭雪山滑雪场延长免门票时间至11月30日 南田温泉门票_珠江南田温泉门票价格_三亚南田温泉门票多少钱 M04-0805QRC Datasheet M04-0805QRC Datasheet M04-0805QYC Datasheet M04-0805QYC Datasheet M04-0805SRC-P Datasheet M04-0805SRC-P Datasheet 卢浮宫 卢浮宫 卢浮宫 凤凰古城在哪里 凤凰古城在哪里 凤凰古城在哪里 雁门关在哪 雁门关在哪 雁门关在哪