• eclipse配置Struts2、Hibernate3、Spring2.5范例


    目录

    1       下载eclipse. 1

    2       安装HIBERNATE插件.. 1

    2.1       安装hibernate synchronizer 1

    3       创建项目.. 3

    3.1       创建Demo项目.. 3

    3.2       JUnit4. 4

    3.3       Referenced Libraries 5

    4       项目分层概述.. 8

    5       demo.core. 9

    5.1       Pagination.java. 9

    5.2       SpringBaseRootDAO.java. 12

    6       demo.model 15

    6.1       生成*.hbm.xml 15

    6.2       抽象工厂方法.. 19

    6.3       生成model 23

    7       配置spring-database.xml 24

    8       配置spring-dao.xml 26

    9       demo.service. 27

    10         配置spring-service.xml 27

    11         demo.action. 28

    12         配置struts.xml 30

    13         配置web.xml 31

    14         编译.. 33

    14.1         引入inst、build.bat、startup.bat 33

    14.2         build编译.. 34

    14.3         startup编译.. 35

    15         运行效果.. 37

    16         总结.. 37

    1    下载eclipse

    官网:http://www.eclipse.org/downloads/

     

    2    安装HIBERNATE插件

    2.1     安装hibernate synchronizer

    下载地址:

    http://sourceforge.net/projects/hibernatesynch/?source=navbar

    备注:

    若有兴趣了解,可进入以下官网详细了解hibernate

    http://sourceforge.net/projects/hibernate/?source=recommended或者

    http://www.hibernate.org/

    1)    解压com.hudson.hibernatesynchronizer_3.1.9文件

    2)    将com.hudson.hibernatesynchronizer_3.1.9放到eclipse/ plugins

     

    3)    运行cmd→进入eclipse文件夹→执行eclipse –clean

    使用eclipse –clean进行把当前插件加载进去。

     

    3    创建项目

    3.1     创建Demo项目

    1)    File→New→Java Project→Demo

     

    3.2     JUnit4

    1)    右键→Build Path→Add Libraries…→JUnit4→Finish

     

    3.3     Referenced Libraries

    1)    右键→Build Path→Configure Build Path…

     

    导入JAR包,即struts2、spring、hibernate包(ssh必须包可以查询相应Web,这里包括了ssh、json序列化包、mysql、servlet等包)

    antlr-2.7.7.jar
    aopalliance-1.0.jar
    asm-3.3.jar
    asm-commons-3.3.jar
    asm-tree-3.3.jar
    c3p0-0.9.1.jar
    cglib-2.2.2.jar
    classworlds-1.1.jar
    commons-beanutils-1.7.0.jar
    commons-chain-1.2.jar
    commons-collections-3.1.jar
    commons-dbcp-1.4.jar
    commons-digester-2.0.jar
    commons-fileupload-1.2.2.jar
    commons-io-2.0.1.jar
    commons-lang-2.5.jar
    commons-logging-1.1.1.jar
    commons-pool-1.6.jar
    commons-validator-1.3.1.jar
    dom4j-1.6.1.jar
    ehcache-core-2.4.3.jar
    ezmorph-1.0.3.jar
    freemarker-2.3.18.jar
    hibernate3.jar
    jackson-core-asl-1.9.2.jar
    jackson-mapper-asl-1.9.2.jar
    javassist-3.15.0-GA.jar
    jboss-logging-3.1.0.GA.jar
    jboss-transaction-api_1.1_spec-1.0.0.Final.jar
    json-lib-2.1-jdk15.jar
    juli-6.0.18.jar
    log4j-1.2.16.jar
    mysql-connector-java-5.1.18-bin.jar
    ognl-3.0.4.jar
    org.apache.felix.bundlerepository-1.2.1.jar
    org.apache.felix.framework-1.4.1.jar
    org.apache.felix.main-1.4.1.jar
    org.apache.felix.shell-1.0.2.jar
    org.apache.felix.shell.tui-1.0.2.jar
    org.springframework.aop-3.1.1.RELEASE.jar
    org.springframework.asm-3.1.1.RELEASE.jar
    org.springframework.aspects-3.1.1.RELEASE.jar
    org.springframework.beans-3.1.1.RELEASE.jar
    org.springframework.context-3.1.1.RELEASE.jar
    org.springframework.context.support-3.1.1.RELEASE.jar
    org.springframework.core-3.1.1.RELEASE.jar
    org.springframework.expression-3.1.1.RELEASE.jar
    org.springframework.instrument-3.1.1.RELEASE.jar
    org.springframework.instrument.tomcat-3.1.1.RELEASE.jar
    org.springframework.jdbc-3.1.1.RELEASE.jar
    org.springframework.jms-3.1.1.RELEASE.jar
    org.springframework.orm-3.1.1.RELEASE.jar
    org.springframework.oxm-3.1.1.RELEASE.jar
    org.springframework.test-3.1.1.RELEASE.jar
    org.springframework.transaction-3.1.1.RELEASE.jar
    org.springframework.web-3.1.1.RELEASE.jar
    org.springframework.web.portlet-3.1.1.RELEASE.jar
    org.springframework.web.servlet-3.1.1.RELEASE.jar
    org.springframework.web.struts-3.1.1.RELEASE.jar
    oro-2.0.8.jar
    oscache-2.4.1.jar
    oval-1.31.jar
    plexus-container-default-1.0-alpha-10.jar
    plexus-utils-1.2.jar
    servlet-api.jar
    sitemesh-2.4.2.jar
    struts2-core-2.3.1.2.jar
    struts2-jasperreports-plugin-2.3.1.2.jar
    struts2-json-plugin-2.3.1.2.jar
    struts2-junit-plugin-2.3.1.2.jar
    struts2-spring-plugin-2.3.1.2.jar
    struts2-testng-plugin-2.3.1.2.jar
    struts-core-1.3.10.jar
    testng-5.1-jdk15.jar
    tiles-api-2.0.6.jar
    tiles-core-2.0.6.jar
    tiles-jsp-2.0.6.jar
    velocity-1.6.3.jar
    xpp3_min-1.1.3.4.O.jar
    xstream-1.2.2.jar
    xwork-core-2.3.1.2.jar

    4    项目分层概述

    1)    demo.core

    Pagination.java(分页工具)

    SpringBaseRootDAO.java(基类,使用分页工具进行查询HQL分页)

    2)    demo.model

    A01.hbm.xml(ORM工具)

    A01.java(hibernatesynchronizer 生成:表A01映射对象)

    3)    demo.model.base

    BaseA01.java(hibernatesynchronizer 生成:表的get set 方法)

    BaseA01DAO.java(hibernatesynchronizer 生成:表的获取数据方法)

    4)    demo.model.dao

    A01DAO.java(hibernatesynchronizer 生成:空方法)

    _RootDAO.java(hibernatesynchronizer 生成:空方法)

    5)    demo.service

    UserService.java(用户服务)

    RoleService.java(角色服务)

    6)    demo.action

    UserAction.java(用户行为访问)

    RoleAction.java(用户行为访问)

    7)    spring

    spring-dao.xml依赖注入,反转控制

    spring-database.xml数据库连接

    spring-service依赖注入,反转控制

    8)    struts2

    struts.xml配置<interceptors>拦截器、action访问

    9)    xml

    web.xml配置<context-param>struts2、spring位置,配置监听spring等。

    启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml。

    读两个节点: <listener></listener> 和 <context-param></context-param>紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文。

    5    demo.core

    添加以下2个文件:Pagination.java、SpringBaseRootDAO.java

    5.1     Pagination.java

    import java.io.Serializable;
    import java.util.List;
    public class Pagination implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = 9044906579682916890L;
        protected int currentPageNo;
        protected int totalPageCount;
        protected int totalRecordCount;
        protected List resultSet;
        protected int pageSize = 10;
        protected int first;
        protected int preview;
        protected int next;
        protected int last;
    
        public int getCurrentPageNo() {
            return currentPageNo;
        }
        public void setCurrentPageNo(int currentPageNo) {
            this.currentPageNo = currentPageNo;
        }
        public int getTotalPageCount() {
            return totalPageCount;
        }
        public void setTotalPageCount(int totalPageCount) {
            this.totalPageCount = totalPageCount;
        }
        public int getTotalRecordCount() {
            return totalRecordCount;
        }
        public void setTotalRecordCount(int totalRecordCount) {
            this.totalRecordCount = totalRecordCount;
        }
        public List getResultSet() {
            return resultSet;
        }
        public void setResultSet(List resultSet) {
            this.resultSet = resultSet;
        }
        public int getPageSize() {
            return pageSize;
        }
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
        public int getFirst() {
            return first;
        }
        public void setFirst(int first) {
            this.first = first;
        }
        public int getPreview() {
            return preview;
        }
        public void setPreview(int preview) {
            this.preview = preview;
        }
        public int getNext() {
            return next;
        }
        public void setNext(int next) {
            this.next = next;
        }
        public int getLast() {
            return last;
        }
        public void setLast(int last) {
            this.last = last;
        }
    }

    5.2     SpringBaseRootDAO.java

    package demo.core;
    import java.sql.SQLException;
    import java.util.List;
     
    import org.hibernate.Criteria;
    import org.hibernate.HibernateException;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.type.Type;
    import org.springframework.dao.DataAccessException;
    import org.springframework.orm.hibernate3.HibernateCallback;
    import org.springframework.orm.hibernate3.HibernateTemplate;
     
    /**
     * Based on Hibernate Synchronizer
     *
     * @author King
     */
    public abstract class SpringBaseRootDAO extends HibernateTemplate {
    
           /**
            * Return the name of the configuration file to be used with this DAO or
            * null if default
            */
           public String getConfigurationFileName() {
                  return null;
           }
    
           /**
            * Return the specific Object class that will be used for class-specific
            * implementation of this DAO.
            *
            * @return the reference Class
            */
           protected abstract Class getReferenceClass();
     
           /**
            * Return a Criteria object that relates to the DAO's table
            */
           protected Criteria createCriteria(Session s) throws DataAccessException {
                  return s.createCriteria(getReferenceClass());
           }
    
           /**
            * Return a Criteria object that relates to the DAO's table
            */
           public Criteria createCriteria() throws HibernateException {
                  Session s = getSessionFactory().openSession();
                  return s.createCriteria(getReferenceClass());
           }
    
           /**
            * Return the property of the class you would like to use for default
            * ordering
            *
            * @return the property name
            */
           public String getDefaultOrderProperty() {
                  return null;
           }
     
           /**
            * Common Pagination Function
            *
            * @param hql
            * @param pageNo
            * @param pageSize
            * @return
            */
           public Pagination getList(final String hql, final int pageNo,
                         final int pageSize) {
                  return (Pagination) execute(new HibernateCallback() {
                         public Object doInHibernate(Session session)
                                       throws HibernateException {
                                Query query = session.createQuery(hql);
                                Pagination pagination = new Pagination();
                                pagination.setCurrentPageNo(pageNo);
                                pagination.setPageSize(pageSize);
                              pagination.setTotalRecordCount(query.list().size());
                                query.setFirstResult(pagination.getPageSize() * (pageNo - 1));
                               query.setMaxResults(pagination.getPageSize());
                                pagination.setResultSet(query.list());
                                return pagination;
                         }
                  });
           }
     
           /**
            * Common Pagination Function
            *
            * @param hql
            * @param args
            * @param pageNo
            * @param pageSize
            * @return
            */
           public Pagination getList(final String hql, final Object[] args,
                         final int pageNo, final int pageSize) {
                  return (Pagination) execute(new HibernateCallback() {
                         public Object doInHibernate(Session session)
                                       throws HibernateException {
                                Query query = session.createQuery(hql);
                                if (args != null && args.length > 0) {
                                       for (int i = 0; i < args.length; i++)
                                              query.setParameter(i, args[i]);
                                }
                                Pagination pagination = new Pagination();
                                pagination.setCurrentPageNo(pageNo);
                                pagination.setPageSize(pageSize);
                            pagination.setTotalRecordCount(query.list().size());
                                query.setFirstResult(pagination.getPageSize() * (pageNo - 1));
                               query.setMaxResults(pagination.getPageSize());
                                pagination.setResultSet(query.list());
                                return pagination;
                         }
                  });
           }
    }

    6    demo.model

    6.1     生成*.hbm.xml

    10) File→New→Other…

     

    jdbc:mysql://localhost:3306/yt4a?useUnicode=true&amp;characterEncoding=utf8

     

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    <hibernate-mapping package="demo.model">
           <class
                  name="A01"
                  table="a01"
           >
                  <meta attribute="sync-DAO">true</meta>
                  <id
                         name="A0101"
                         type="int"
                         column="A0101"
                  >
                         <generator class="identity"/>
                  </id>
                  <property
                         name="A0102"
                         column="A0102"
                         type="int"
                         not-null="false"
                         length="10"
                  />
                  <property
                         name="A0103"
                         column="A0103"
                         type="int"
                         not-null="false"
                         length="10"
                  />
                  <property
                         name="A0104"
                         column="A0104"
                         type="string"
                         not-null="false"
                         length="100"
                  />
                  <property
                         name="A0105"
                         column="A0105"
                         type="string"
                         not-null="false"
                         length="500"
                  />
                  <property
                         name="A0106"
                         column="A0106"
                         type="date"
                         not-null="false"
                         length="19"
                  />
                  <property
                         name="A0107"
                         column="A0107"
                         type="int"
                         not-null="false"
                         length="10"
                  />
                  <property
                         name="A0108"
                         column="A0108"
                         type="int"
                         not-null="false"
                         length="10"
                  />
           </class>
    </hibernate-mapping>

    6.2     抽象工厂方法

    根据抽象工厂方法,打开eclipse的IDE,设置Hibernate Synchronizer

    1)    Window→Preferences→Hibernate Synchronizer→Snippets→Root DAO→Class Definition

    public abstract class _RootDAO extends demo.core.SpringBaseRootDAO {

    _RootDAO继承demo.core.SpringBaseRootDAO

    2)    Window→Preferences→Hibernate Synchronizer→Snippets→Base DAO→

    Class Definition

    public abstract class ${class.BaseDAOClassName} extends demo.model.dao._RootDAO {

    Class Constructors

    public ${class.BaseDAOClassName} () {}

    ActionMethods

        /**
         * Persist the given transient instance, first assigning a generated identifier. (Or using the current value
         * of the identifier property if the assigned generator is used.) 
         * @param ${class.VarName} a transient instance of a persistent class 
         * @return the class identifier
         */
        public ${class.ParentRoot.Id.Property.ObjectClass} save(${class.AbsoluteValueObjectSignatureClassName} ${class.VarName})
    #if ($exceptionClass)
            throws ${exceptionClass} {
    #else
        {
    #end
            return (${class.ParentRoot.Id.Property.ObjectClass}) super.save(${class.VarName});
        }
    
        /**
         * Either save() or update() the given instance, depending upon the value of its identifier property. By default
         * the instance is always saved. This behaviour may be adjusted by specifying an unsaved-value attribute of the
         * identifier property mapping. 
         * @param ${class.VarName} a transient instance containing new or updated state 
         */
        public void saveOrUpdate(${class.AbsoluteValueObjectSignatureClassName} ${class.VarName})
    #if ($exceptionClass)
            throws ${exceptionClass} {
    #else
        {
    #end
            super.saveOrUpdate(${class.VarName});
        }
    
        /**
         * Update the persistent state associated with the given identifier. An exception is thrown if there is a persistent
         * instance with the same identifier in the current session.
         * @param ${class.VarName} a transient instance containing updated state
         */
        public void update(${class.AbsoluteValueObjectSignatureClassName} ${class.VarName}) 
    #if ($exceptionClass)
            throws ${exceptionClass} {
    #else
        {
    #end
            super.update(${class.VarName});
        }

    Finder Methods

    #if ($class.ParentRoot.Id)
        public ${class.AbsoluteValueObjectSignatureClassName} load(${class.ParentRoot.Id.Property.AbsoluteSignatureClassName} key)
    #if ($exceptionClass)
            throws ${exceptionClass} {
    #else
        {
    #end
    #if ($class.ParentRoot.Id.Property.isPrimitive())
            return (${class.AbsoluteValueObjectSignatureClassName}) load(getReferenceClass(), new ${class.ParentRoot.Id.Property.ObjectClass}(key));
    #else
            return (${class.AbsoluteValueObjectSignatureClassName}) load(getReferenceClass(), key);
    #end
        }
    #end
    
    #if ($class.ParentRoot.Id)
        public ${class.AbsoluteValueObjectSignatureClassName} get(${class.ParentRoot.Id.Property.AbsoluteSignatureClassName} key)
    #if ($exceptionClass)
            throws ${exceptionClass} {
    #else
        {
    #end
    #if ($class.ParentRoot.Id.Property.isPrimitive())
            return (${class.AbsoluteValueObjectSignatureClassName}) get(getReferenceClass(), new ${class.ParentRoot.Id.Property.ObjectClass}(key));
    #else
            return (${class.AbsoluteValueObjectSignatureClassName}) get(getReferenceClass(), key);
    #end
        }
    #end
    
    #if ($class.ParentRoot.Id)
        public java.util.List loadAll()
    #if ($exceptionClass)
            throws ${exceptionClass} {
    #else
        {
    #end
            return loadAll(getReferenceClass());
        }
    #end

    3)    Window→Preferences→Hibernate Synchronizer→Snippets→DAO→Class Definition

    public class ${class.DAOClassName} extends ${class.BaseDAOClassName}{

    6.3     生成model

    1)    A01.hbm.xml→右键→Hibernate Synchronizer→Synchronizer and Overwrite

     

    2)    删除demo.model.dao.iface

    7    配置spring-database.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                                http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
           default-autowire="byName">
    
        <!-- dataSource -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
            <property name="url" value="jdbc:mysql://localhost:3306/yt4a?useUnicode=true&amp;characterEncoding=utf8"></property>
            <property name="username" value="root"></property>
            <property name="password" value="root"></property>
        </bean> 
        
        <!-- sessionFactory -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="mappingResources">
                <list>
                    <value>demo/model/A01.hbm.xml</value>
                </list>  
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                    <prop key="hibernate.jdbc.batch_size">100</prop>
                    <prop key="hibernate.jdbc.fetch_size">100</prop>
                    <prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
                    <prop key="hibernate.jdbc.batch_versioned_data">true</prop>
                    <prop key="hibernate.use_sql_comments">true</prop>
                    <prop key="hibernate.query.substitutions">toLowercase=Lower</prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.format_sql">true</prop>
                </props>
            </property>
        </bean>
    
        <!-- transactionManager -->
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        
        <!-- txProxyTemplate -->
        <bean id="txProxyTemplate" abstract="true"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager" ref="transactionManager"/>
            <property name="transactionAttributes">
                <props>
                    <prop key="create*">PROPAGATION_REQUIRED,-Exception</prop>
                    <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
                    <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
                    <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
                    <prop key="bulk*">PROPAGATION_REQUIRED,-Exception</prop>
                    <prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop>
                    <prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop>
                    <prop key="*">PROPAGATION_NEVER,readOnly</prop>
                </props>
            </property>
        </bean>
    </beans>  

    8    配置spring-dao.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                                http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
           default-autowire="byName">
    
        <!-- a01DAO --> 
        <bean id="a01DAO" class="demo.model.dao.A01DAO" />
    </beans>

    9    demo.service

    创建包demo.service和创建UserService.java

    package demo.service;
    
    import java.util.List;
    import demo.model.dao.A01DAO;
    
    public class UserService {
        private A01DAO a01Dao;
    
        public A01DAO getA01dao() {
            return a01Dao;
        }
    
        public void setA01dao(A01DAO a01dao) {
            this.a01Dao = a01dao;
        }
    
        public List findAll() throws Exception {
            List list = a01Dao.find("SELECT _a01 FROM A01 _a01");
            return list;
        }
    }

    10       配置spring-service.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                                http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
           default-autowire="byName">
     
         <!-- userService -->
         <bean id="userService" parent="txProxyTemplate">
            <property name="target">
                <bean class="demo.service.UserService" />
            </property>
        </bean>
    </beans>

    11       demo.action

    创建包demo.action和UserAction.java

    package demo.action;
    
    import java.io.InputStream;
    import java.io.StringBufferInputStream;
    import java.util.HashMap;
    import java.util.Map;
    import demo.service.UserService;
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
     * create by zhyongfeng in 2013.06.06
     * @author Administrator
     *
     */
    public class UserAction extends ActionSupport {
        private int number;
        private UserService userService;
        private InputStream inputStream;
    
        private Map<String, Object> jsonMap ;
        public String findA01All() {    
            try {
                jsonMap= new HashMap<String, Object>();
                jsonMap.put("result", userService.findA01All());
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return SUCCESS;
        }
        
        public String findString(){
            inputStream = new StringBufferInputStream(
                    "Hello World! This is a text string response from a Struts 2 Action.");
            return SUCCESS;
        }
        
        
        public int getNumber() {
            return number;
        }
        public void setNumber(int number) {
            this.number = number;
        }
        public UserService getUserService() {
            return userService;
        }
        public void setUserService(UserService userService) {
            this.userService = userService;
        }    
        public InputStream getInputStream() {
            return inputStream;
        }
        public void setInputStream(InputStream inputStream) {
            this.inputStream = inputStream;
        }
        public Map<String, Object> getJsonMap() {
            return jsonMap;
        }
        public void setJsonMap(Map<String, Object> jsonMap) {
            this.jsonMap = jsonMap;
        }
    }

    12       配置struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
            "http://struts.apache.org/dtds/struts-2.1.7.dtd">
    
    <struts>
    
        <!-- <constant name="struts.custom.i18n.resources" value="message"/> -->
        <constant name="struts.i18n.encoding" value="utf-8" />
        <constant name="struts.objectFactory" value="spring" />
        <constant name="struts.multipart.parser" value="Jakarta" />
        <constant name="struts.multipart.maxSize" value="1000000000" />
    
        <package name="demo" extends="json-default" namespace="/">
    
            <interceptors>
                <interceptor-stack name="managerStack">
                    <interceptor-ref name="staticParams" />
                    <interceptor-ref name="params" />
                    <!--<interceptor-ref name="authorize" />-->
                    <interceptor-ref name="chain" />
                </interceptor-stack>
    
            </interceptors>
    
            <global-results>
                <result name="login" type="chain">
                    <param name="actionName">index.htm</param>
                    <param name="namespace">/</param>
                </result>
            </global-results>
     
            <!-- findA01All interceptor是拦截器,可以自己定义拦截器进行用户登录验证-->
            <action name="findA01All" class="demo.action.UserAction"
                method="findA01All">
                <result type="json">
                    <param name="root">jsonMap</param>
                    <param name="excludeNullProperties">true</param>
                </result>
                <interceptor-ref name="params" />
            </action>
            
            <!-- findString -->
            <action name="findString" class="demo.action.UserAction"
                method="findString">
                <result type="stream">
                    <param name="contentType">text/html</param>
                    <param name="inputName">inputStream</param>
                </result>
                <interceptor-ref name="params" />
            </action>
        </package>
        
        <!-- html files -->
        <include file="struts-htm.xml" />
    </struts>

    13       配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        
        <display-name>Demo</display-name>
        
        <context-param> 
            <param-name>webAppRootKey</param-name> 
            <param-value>web.root</param-value> 
        </context-param>    
        
        <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>/WEB-INF/conf/log4j.properties</param-value>
        </context-param>
        
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/conf/spring/*.xml</param-value>
        </context-param>
        
        <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
        </listener>    
        
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>    
        
        <filter>
            <filter-name>OpenSessionInViewFilter</filter-name>
            <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        </filter>
        
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        
        <filter-mapping>
            <filter-name>OpenSessionInViewFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
         
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <welcome-file-list>
            <welcome-file>index.htm</welcome-file>      
        </welcome-file-list>
    </web-app>

    14       编译

    14.1        引入inst、build.bat、startup.bat

    根据实际情况修改以下路径: D:\JDK、D:\TOMCAT7、D:\PROJECTS\JAVA\。

    inst\conf\server.xml

    <Host name="localhost" unpackWARs="true"> 
    <Context path="" docBase="D:/PROJECTS/JAVA/Demo/htdocs" reloadable="true" workDir="D:/PROJECTS/JAVA/YT4A/htdocs/work" />
    </Host>

    build.xml

    (将会打包放在WEB-INF/lib下)

    <property name="jarfile" value="${web.dir}/WEB-INF/lib/${name}-${version}.jar" />

    Startup.bat

    set JAVA_HOME=D:\JDK
    set CATALINA_HOME=D:\TOMCAT7
    set CATALINA_BASE=D:\PROJECTS\JAVA\Demo\inst
    
    SET JPDA_ADDRESS=8000
    SET JPDA_TRANSPORT=dt_socket
    
    %CATALINA_HOME%\bin\catalina.bat jpda start

    14.2        build编译

    通过cmd,进行到demo,执行build.bat

    D:\PROJECTS\JAVA\Demo>ant -f build.xml
    Buildfile: D:\PROJECTS\JAVA\Demo\build.xml
    
    usage:
         [echo]
         [echo] demo build file
         [echo] -----------------------------------
         [echo]
         [echo] Available targets are:
         [echo]
         [echo] prepare   --> Prepare for clean build
         [echo] build     --> Build the application
         [echo] jar       --> Create java jar file
         [echo] deploy    --> Deploy application
         [echo] dist      --> Create binary distribution
         [echo]
    
    prepare:
       [delete] Deleting directory D:\PROJECTS\JAVA\Demo\bin
    
    compile:
        [mkdir] Created dir: D:\PROJECTS\JAVA\Demo\bin
        [javac] D:\PROJECTS\JAVA\Demo\build.xml:48: warning: 'includeantruntime' was
     not set, defaulting to build.sysclasspath=last; set to false for repeatable bui
    lds
        [javac] Compiling 9 source files to D:\PROJECTS\JAVA\Demo\bin
        [javac] 注: D:\PROJECTS\JAVA\Demo\src\demo\action\UserAction.java使用或覆盖
    了已过时的 API。
        [javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
        [javac] 注: 某些输入文件使用了未经检查或不安全的操作。
        [javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
         [copy] Copying 3 files to D:\PROJECTS\JAVA\Demo\bin
    
    jar:
          [jar] Building jar: D:\PROJECTS\JAVA\Demo\htdocs\WEB-INF\lib\demo-1.0.jar
    
    deploy:
    
    BUILD SUCCESSFUL
    Total time: 1 second
    
    D:\PROJECTS\JAVA\Demo>

    14.3        startup编译

    运行startup

     

    15       运行效果

     

    16       总结

    本文主要依据以下链接进行配置:

    http://www.supergloo.com/blog/index.php/category/hibernate-synchronizer/

    资料下载:

    Apache ANT官网:http://ant.apache.org/bindownload.cgi

    Tomcat官网:http://tomcat.apache.org/

    JDK官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html

    Eclipse官网:http://www.eclipse.org/downloads/

    hibernate synchronizer:http://sourceforge.net/projects/hibernatesynch/?source=navbar

    (详细代码请参照Demo例子)

    进行本配置,只需要解压Apache ANT、Tomcat、Eclipse、hibernate synchronizer和安装JDK,通过build.bat、startup.bat便可以开启编译程序。

    DEMO源码下载:http://dl.vmall.com/c0a5kbff7h

    PDF下载:https://files.cnblogs.com/yongfeng/20130610.pdf

    Top
    关注
    评论

    博文分享:



    许可协议:

    Creative Commons License

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

  • 相关阅读:
    第八讲、原型模式
    第七讲、建造者模式
    第六讲、抽象工厂模式
    第五讲、工厂方法模式
    第四讲、简单工厂模式
    第三讲、策略模式
    第二讲、备忘录模式
    第一讲、单例模式
    二、中国黑客
    java 17
  • 原文地址:https://www.cnblogs.com/yongfeng/p/3131210.html
Copyright © 2020-2023  润新知