• SSH框架


    一,Struts2框架部署

    1,搭建Struts2的jar包

     

    1.1,Struts2所需各个jar包的作用

    asm-3.3.jar                                     操作java字节码的类库

    asm-commons-3.3                         提供了基于事件的表现形式

    commons-fileupload-1.3.2.jar , commons-io.jar    struts的上传下载 两者缺一不可

    commons-lang-3-3.1.jar                 为java.lang包提供扩展

    commons-logging-1.0.4.jar             Jakarta的通用日志记录包

    freemarker-2.3.15.jar                     FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具

    javassist-3.20.0.GA.jar            使Java字节码操纵简单。这是一个编辑Java字节码的类库。

    ognl-2.1.10.jar                               是支持ognl表达式

    struts2-core-2.5.2.jar                      struts2的核心jar包,不可缺少的

    xwork-core-2.3.30.jar                       xwork的核心包,由于Struts2是由xwork的延伸 有些类依然关联着 xwork的类

     

     

    1.2,将Struts2的jar包导入WebContent-->WEB-INF-->lib

     2,配置web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

    <display-name>ssh1</display-name>


    <!-- 默认跳转的页面-->
    <welcome-file-list>
      <welcome-file>xiao.jsp</welcome-file>
    </welcome-file-list>

    <filter>
      <!-- 配置Struts2核心Filter的名字 --> 
      <filter-name>struts2</filter-name>
      <!-- 配置Struts2核心Filter的实现类 --> 
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

     

    <!-- 配置Filter拦截的URL --> 
    <filter-mapping>
      <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 --> 
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

     

     

    3,创建ssh.service包

    3,1在ssh.service包中创建一个接口IndexService,实现以下两个方法

    package ssh.service;

    import java.util.List;

    import ssh.dao.IndexDao;
    import ssh.entity.BookCard;

    public interface IndexService {

    public List<BookCard> getAllBookCard();
    public void setId(IndexDao id);

    }

     

    3,2在ssh.service包在创建IndexServiceImpl类继承IndexService接口

    package ssh.service;

    import java.util.List;

    import ssh.dao.IndexDao;
    import ssh.dao.IndexDaoImpl;
    import ssh.entity.BookCard;

     

    public class IndexServiceImpl implements IndexService {

    private IndexDao id;
    //用于注入使用
    public void setId(IndexDao id) {

    this.id = id;
    }



    @Override
    public List<BookCard> getAllBookCard() {
    //本类应该编写业务逻辑的代码,
    //但本例没有业务逻辑,就不用写。

    //访问数据库的代码,不会出现在service这一层
    //交给dao来操作数据库
    List<BookCard> myBookCardList = id.getAllBookCard();

    return myBookCardList;
    }

    }

     

    4,创建一个IndexAction类继承ActionSupport

    4.1单击Browse

     

    4.2在Choose a type 框中输入ActionSupport  然后单击Ok

     

    4.3单击Finish

     

     

    4.4,IndexAction类

    public class IndexAction extends ActionSupport {

    //声明service,但不给它创建具体的实现类的实例,
    //因为:action不应该关注具体是谁来实现service
    //具体service实现类是谁,我们使用spring注入进来
    private IndexService is;


    //**********定义1个List对象,保存BookCard结果,传递给jsp显示******
    //*******原来Servlet 需要request.setAttribute("bookCardList", bookCardList);
    private List<BookCard> myBookCardList = null;
    public List<BookCard> getMyBookCardList() {
    return myBookCardList;
    }
    public void setMyBookCardList(List<BookCard> myBookCardList) {
    this.myBookCardList = myBookCardList;
    }
    //******end 定义1个List对象,保存BookCard结果,传递给jsp显示****

     

    // 模拟IndexServlet的doGet方法
    // 跟Servlet最大的差异:没了request,也没了response
    public String execute1() {
    // 第一步:获取客户端传递过来的参数(本例不需要)

     

    // 第二步:对传递参数进行各种校验、转换、分析等等
    // 本例不存在

    //这段代码,加入srping后,也要删除
    is = new IndexServiceImpl();
    //以下2行代码应该交给spring去做
    IndexDao id = new IndexDaoImpl();
    is.setId(id);
    myBookCardList = is.getAllBookCard();
    System.out.println("结果集:"+myBookCardList.size());
    return "success";
    }

    public String formatDouble(double s){

    DecimalFormat fmat=new DecimalFormat("u00A4##.0");

    return fmat.format(s);
    }

    }

     

    5,创建struts.xml配置文件

    5,1  struts.xml配置文件要在src目录下

    5,2 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">
    <!-- 上面的头,注意版本,从样例里复制过来 showcase.warWEB-INFsrcjavastruts.xml -->

    <struts>
    <!-- 第1步:先定义一个包 -->
    <package name="mypck001" extends="struts-default">
    <!-- 第2步:定义一个action,配置跳转信息 name 类似于Servlet @WebServlet("/IndexServlet")
    http://xxxx/xxx/Index.action http://xxxx/xxx/Index
    class 对应于自己写的Action类
    当不写method属性时,默认调用的是execute -->
    <action name="Index" class="ssh1.IndexAction" method="execute">
    <!--
    跳转是forward
    /WEB-INF/是防止jsp不经过action就可以访问
    -->
    <result name="success">/WEB-INF/jsp/index2.jsp</result>
    </action>
    </package>
    </struts>

     6,index.jsp

    6,1  声明struts2标签

     

    6,2调用struts2标签的iterator标签,循环输出变量 myBookCardList

    二,spring框架的搭建

    1,在刚才搭建struts2框架的基础上搭建spring

    1,1,spring所需的jar包

     

     1,2  spring 的各个jar包的作用

    (1) spring-core.jar
    这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。
    (2) spring-beans.jar
    这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。
    (3) spring-aop.jar
    这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。
    (4) spring-context.jar
      这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。
    (5) spring-dao.jar
      这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。
    (6) spring-hibernate.jar
      这个jar文件包含Spring对Hibernate 2及Hibernate 3进行封装的所有类。
    (7) spring-jdbc.jar
      这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。
    (8) spring-orm.jar
      这个jar文件包含Spring对DAO特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖spring-dao.jar里的类,用这个包时你需要同时包含spring-dao.jar包。
    (9) spring-remoting.jar
      这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。
    (10) spring-support.jar
      这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。
    (11) spring-web.jar
      这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
    (12) spring-webmvc.jar
      这个jar文件包含Spring MVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。
    (13) spring-mock.jar
      这个jar文件包含Spring一整套mock类来辅助应用的测试。Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。

    2,1  在IndexDaoImpl类中给MyConnection接口定义set 方法

     

    2,2   在IndexAction类中给IndexService定义set方法

    2,3  配置applicationContext.xml文件

    applicationContext.xml文件必须配置在src目录下

     

    2,1applicationContext.xml

     

    <?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:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
    <!-- 类似于财务部门一样,类就是钱,所有需要类的实例都由srping去管理 -->
    <bean id="myIndexAction" class="ssh1.IndexAction" scope="prototype">
    <!-- setIs(myIndexService) -->
    <property name="is" ref="myIndexService"/>
    </bean>

    <!-- myIndexService = new ssh.service.IndexServiceImpl() -->
    <bean id="myIndexService" class="ssh.service.IndexServiceImpl" scope="prototype">
    <property name="id" ref="myIndexDao"/>
    </bean>

    <bean id="myIndexDao" class="ssh.dao.IndexDaoImpl" scope="prototype">
    <property name="c" ref="myConnection"></property>
    </bean>

    <bean id="myConnection" class="ssh.util.MyConnectionImpl_SQLSERVER" scope="prototype">
    </bean>
    </beans>

    三,hibernate框架

    1,1  hibernate所需的jar包

    1,2  hibernate 所需jar包的作用

    1,2 第1步:我们依旧需要引入hibernate的jar包

      找到hibernate解压好的文件目录,在该目录下的lib目录下有一个required目录,将该目录下的所有jar包引入到我们项目的lib目录下。

     

    2,2 配置一个在src目录下的一个实体映射文件BookCard.hbm.xml

    2,3   BookCard.hbm.xml

     

    2,4

     解析:1>头信息就不多说了,首先写好一个hibernate-mapping首尾标记,在标记内映射我们相对应的实体类。

         2>在class标记的name属性的值对应我们的实体类(全路径),table属性对应我们在数据库的表名

         3>id标记为我们数据库的主键配置相关信息,同理name属性中的属性值为我们实体类对象的属性,column为数据库对应表的字段。

         4>property标记中type属性为该属性对应的java数据类型,length为数据库中指定长度这里相当于varchar(50),not-null属性为指定该字段是否可以为空,默认可以为空。

    2,5  配置连接数据库相关信息的hibernate.cfg.xml文件

    2,6

     解析:1>配置一个hibernate-configuration首尾标记,在其内部插入session-factory首尾标记。

         2>在property标记中name属性中指定dialect属性值配置数据库方言(数据库不同以及版本不同方言也不同,查阅相关资料可知)

         3>在property标记中name属性中指定connection.pool属性值配置连接池大小(依据访问频率配置)

         4>在property标记中name属性中指定show_sql属性值配置是否显示sql语句在控制台(开发过程中建议为true,易于调试)

         5>在property标记中name属性中指定format_sql属性值配置sql语句是否需要格式化(废话,当然要)

        * 6>在property标记中name属性中指定hbm2ddl.auto属性值配置创表信息。值为update时,若数据库没有我们实体对应的表将自动为我们创建,若存在则会更新我的表。  值为create时,每次执行时会先查找数据库是否存在这张表存在即先删除在创建,不存在即直接创建。

         7>连接数据库的驱动以及制定数据库URL,用户名和密码相信大家都懂,我就不一一介绍了。

        * 8>我们的这份文件还需映射一个资源便是我们的实体映射文件,在mapping标记中指定。

     2,7  配置hibernate,编写我们的dao来操作数据库

     

    package dao;

     


    import java.util.List;

     


    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.query.Query;

     

    import entity.BookCard;

     

    /*
    * 作者:我是码农
    * 看需求文档8个小时(看得比经理更仔细)
    * 抽象的需求(方法)经理已经给了, 编写时间530分钟
    */
    public class BookCardDaoImpl implements BookCardDao {

    private SessionFactory sessionFactory;


    public void setSessionFactory1(SessionFactory sessionFactory1) {
    this.sessionFactory1 = sessionFactory1;
    }

     

    public void setSessionFactory2(SessionFactory sessionFactory2) {
    this.sessionFactory2 = sessionFactory2;
    }
    @Override
    public List<BookCard> getAllCardInfo() {

    /*Configuration cfg =new Configuration().configure();
    sessionFactory=cfg.buildSessionFactory();*/

    Session session1=sessionFactory1.openSession();
    Session session2=sessionFactory2.openSession();
    /*Transaction tx=session.beginTransaction();
    BookCard bookcard=new BookCard();
    session.save(bookcard);
    tx.commit();*/

    /*BookCard bc=new BookCard();*/
    /*bc.setName("张三");
    bc.setSex("男");
    bc.setCardDate(new java.util.Date());
    bc.setDeposit(66.4);
    session1.save(bc);*/

    @SuppressWarnings("unchecked")
    Query<BookCard> query =session1.createQuery("from BookCard");
    List<BookCard> list =query.getResultList();

    for(BookCard data:list){
    session2.save(data);
    }


    @SuppressWarnings("unchecked")
    Query<BookCard> query2 =session2.createQuery("from BookCard");
    List<BookCard> list2 =query2.getResultList();

    session1.close();
    session2.close();
    sessionFactory1.close();
    sessionFactory2.close();
    return list2;
    }
    @Override
    public List<BookCard> getQueryCardInfo() throws Exception {

    throw new Exception("本方法未实现,请联系XXXX,更新最新版本");
    }
    @Override
    public boolean addCardInfo(BookCard bc) {

    return false;
    }
    @Override
    public boolean updateCardInfo(BookCard bc) {

    return false;
    }
    @Override
    public boolean updateMoreCardInfo(List<BookCard> list) {

    return false;
    }
    }

     

     2,6  在页面输出

    第一次写博客  ,有多不足,和不好的地方  请谅解!

  • 相关阅读:
    [Silverlight]App.Current Events中的Startup,UnhandledException以及Exit事件
    [Silverlight]使用DoubleAnimation为对象添加动画效果
    [翻译]ASP.NET MVC Tip #39 – 在ASP.NET MVC中使用分布式缓存
    [翻译]ASP.NET MVC CodePlex Preview 5 更新细节(未完成)
    [Silverlight]打造具有放大缩小效果的图片导航
    [Silverlight]Silverlight2中打造SplashScreen 1
    [Silverlight]如何创建超链接
    [Silverlight]TextBlock控件全攻略
    [转]ajax框架比较
    MonoRail学习之源码放送
  • 原文地址:https://www.cnblogs.com/guoqixing/p/5846933.html
Copyright © 2020-2023  润新知