Struts2的配置

第一步:下載並部署jar包

    (第一種方法:新建一個web project-->右鍵項目-->Build Path-->Add Libraries-->User Library-->User Libraries-->new-->填寫SH-->選擇jar包資源位置-->全選jar包-->確定-->確定)

   (第二種方法:window-->preferences-->輸入user-->選擇user -->User Libraries-->new-->填寫SH-->選擇jar包資源位置-->全選jar包-->確定-->確定-->新建一個web project-->右鍵 項目-->Build Path-->Add Libraries-->勾選SH-->確定)

  (導入源碼:任意打開項目中jar包的一個類,添加struts2.rar)

第二步:web.xml的配置.配置Struts2的核心控制器:

   <filter>
     <filter-name>Struts2</filter-name>
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>

<!-- URL映射 所有的請求都會經過過濾器 -->
  <filter-mapping>
     <filter-name>Struts2</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>

第三步:struts.xml配置.將已有的struts.xml拷貝到src下.進行配置,如下一個登陸/註冊/註銷的一個struts.xml的配置

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!--配置常量,修改struts2框架的一些行爲  -->
    <!-- 開啓動態方法,value改爲true -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <package name="default" namespace="/" extends="struts-default">
        <!-- 如果沒有配置 class 屬性, Struts 將把 ActionSupport 作爲其默認值 -->
        <!-- 默認Action 只針對sturts請求,對jsp請求無效-->
        <default-action-ref name="defaultAction"></default-action-ref>
        <!-- 全局結果配置 -->
        <global-results>
           <result name="error">/page/fail.jsp</result>
        </global-results>
        <action name="defaultAction">
            <result name="success">/index.jsp</result>
        </action>
    </package>
    <!-- 用戶模塊 -->
    <package name="user" namespace="/" extends="struts-default,default">
        <!-- login請求發送給UserAction的doLogin方法處理 -->
        <action name="login" class="com.house.action.UserAction" method="doLogin">
            <result name="success" type="redirectAction">${nextAction}</result> <!-- 權限分配 轉到下一個action -->
        </action>
        <!-- 普通用戶 -->
        <action name="common">
            <result>/page/house_list.jsp</result>
        </action>
        <!-- 管理員 -->
        <action name="manager">
            <result>/page/manage.jsp</result>
        </action>
        <!-- 退出 -->
        <action name="out" class="com.house.action.UserAction" method="doOut">
            <result name="success">/index.jsp</result> <!-- 權限分配 轉到下一個action -->
        </action>
        <!-- 註冊請求 -->
        <action name="register" class="com.house.action.UserAction" method="doRegister">
            <result name="success">/index.jsp</result>
        </action>
        
        <!-- 動態方法配置 -->
        <action name="douser" class="com.house.action.UserAction2" >
            <result name="loginsucc">/page/house_list.jsp</result>
            <result name="regsucc">/index.jsp</result>
        </action>
        
        <!-- 通配符* -->
        <action name="*User" class="com.house.action.UserAction2" method="{1}" >
            <result name="loginsucc">/page/house_list.jsp</result>
            <result name="regsucc">/index.jsp</result>
        </action>
    </package>
</struts>

第四步:配置智能提示和去掉紅叉

   配置智能提示: 首先,複製struts.xml配置文件中的http://struts.apache.org/dtds/struts-2.3.dtd ; 然後,window-->preferences-->輸入xml-->選擇xml catalog  -->Add --> 關於Location, 選擇FileSystem --> JavaWeb/jar/struts2-->xmlspy-->...-->struts-2.3.dtd -->   Key Type 選擇System Id --> Key 中粘貼 -->OK

   去掉紅叉:window-->preferences-->輸入vali-->選擇validation -->除了第一個,其餘全部第二列的勾勾去掉

第五步:編寫UserAction

package com.house.action;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.house.biz.UserBiz;
import com.house.pojo.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
                                                       
@SuppressWarnings("serial")                             
public class UserAction extends ActionSupport implements ModelDriven<User> {          

    private User user;                                                                        // 使用ModelDriven方式接受參數(Action和JavaBean的方法的綜合方法)
    private UserBiz biz = new UserBiz();                                        // 1.實現ModelDriven<User>接口
    //下一個action的名字,用於實現動態結果的配置                       // 2.重寫接口的getModel()方法,取得Action中的user對象
    private String nextAction;                                                            // 3.form表單中的name屬性的值爲實體類的屬性名
                                                                                                            // 4.尤爲注意:一定要注意實體類的屬性名的命名規範,駝峯命名法
    public String getNextAction() {
        return nextAction;
    }

    public void setNextAction(String nextAction) {
        this.nextAction = nextAction;
    }
    //登錄
    public String doLogin() throws UnsupportedEncodingException {        
        // 調用業務邏輯層
        User temp = biz.login(user.getUserName(), user.getUserPass());
        if (temp != null) {
            //map存儲的是session作用域的對象  //使用ActionContext訪問Servlet API
            Map<String, Object> map = ActionContext.getContext().getSession();
            map.put("loginUser", temp);
            
            //Cookie不支持中文,設置編碼
            //解碼
            //URLDecoder.decode(temp.getUserName(),"UTF-8");
            //壓縮編碼 轉碼
            String loginName = URLEncoder.encode(temp.getUserName(),"UTF-8");
            //耦合的方式
            HttpServletResponse response = ServletActionContext.getResponse();
            //添加Cookie
            Cookie cookie = new Cookie("user", loginName);
            cookie.setMaxAge(10*24*3600);
            cookie.setPath("/");
            //向客戶端添加Cookie
            response.addCookie(cookie);
            
            if("1".equals(temp.getIsAdmin())){
                nextAction = "common";
            } else if("0".equals(temp.getIsAdmin())){
                nextAction = "manager";
            }
            return "success";
        }
        return "error";
    }
    //註銷用戶
    public String doOut(){
        Map<String, Object> map = ActionContext.getContext().getSession();
        if(map.containsKey("loginUser")){
           map.remove("loginUser");
          // return "success";
        }
        return "success";
    }
    //註冊
    public String doRegister() {
        user.setIsAdmin("1");
        if (biz.saveUser(user)) {
            return "success";
        }
        return "error";
    }
    //重寫ModelDriven 實現類的getModel()方法
    public User getModel() {
        if (user == null) {
            user = new User();
        }
        return user;
    }
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------

 其中UserBiz的類如下
   package com.house.biz;

import java.io.Serializable;
import java.util.List;
import com.house.pojo.User;
import com.house.util.Hib3Util;

@SuppressWarnings("unchecked")
public class UserBiz {
   //實現登錄
    public User login(String userName, String userPass) {
        String hql = "from User where userName=? and userPass=?";
        Object[] params = { userName, userPass };
        List<User> list = Hib3Util.getList(hql, params);
        if (list.size() > 0) {
            return list.get(0);
        }
        return null;

    }
   //實現註冊
    public boolean saveUser(User user) {
        Serializable ser = Hib3Util.save(user);
        if (ser == null) {
            return false;
        }
        return true;
    }
}

------------------------------------------------------------------------------------------------------------------

其中,Hib3Util工具類如下

package com.house.util;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;


/**
 * 工具類(封裝)
 */
@SuppressWarnings("rawtypes")
public class Hib3Util {
    private static SessionFactory factory;
    //靜態代碼塊(程序開始自動運行),得到SessionFactory對象  
    static{
        //1.讀取並解析配置文件
        Configuration conf = new Configuration().configure();
        //2.讀取並解析映射信息,創建SessionFactory對象
        factory = conf.buildSessionFactory();
    }
    /**
     * 打開Session
     * @return
     */
    public static Session getSession(){
        return factory.getCurrentSession();
    }
    
    /**
     * 保存對象到數據庫中(插入)
     */
    public static void save(Object obj){
        Transaction tran = null;
        try {
            Session session = getSession();
            //開啓事務
            tran = session.beginTransaction();
            //執行持久化操作
            session.save(obj);
            //提交事務
            tran.commit();
        } catch (Exception e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
    }
    
    /**
     * 查詢
     */
    public static Object getObject(Class cls,Serializable id){
        Transaction tran = null;
        Object obj = null;
        try {
            //打開Session
            Session session = getSession();
            //開啓事物
            tran = session.beginTransaction();
            //執行持久化操作
            obj = session.get(cls, id);
            //提交事物
            tran.commit();
        } catch (Exception e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return obj;
    }
    
    /**
     * 查詢2
     */
    public static Object loadObject(Class cls,Serializable id){
        Object obj = null;
        try {
            Session session = getSession();
            //執行持久化操作
            obj = session.load(cls, id);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
    
    /**
     * 刪除
     */
    public static void delete(Object obj){
        Transaction tran = null;
        try {
            //打開Session
            Session session = getSession();
            //開啓事務
            tran = session.beginTransaction();
            //執行持久化操作
            session.delete(obj);
            //提交事務
            tran.commit();
        } catch (Exception e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
    }
    
    /**
     * 更新
     */
    public static void update(Object obj){
        Transaction tran = null;
        try {
            //打開Session
            Session session = getSession();
            //開啓事務
            tran = session.beginTransaction();
            //執行持久化操作
            session.update(obj);
            //提交事務
            tran.commit();
        } catch (Exception e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
    }
    
    /**
     * 根據HQL語句,得到查詢結果
     * @param hql
     * @param params 參數Object[]
     * @return
     */
    public static List getList(String hql,Object[] params){
        Transaction tran = null;
        List list = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.創建Query對象, session.creatQuery();
            Query query = session.createQuery(hql);
            //判斷是否有參數傳遞
            if(params!=null){
                for (int i = 0; i < params.length; i++) {
                    query.setParameter(i, params[i]);
                }
            }
            //4.執行查詢,得到結果
            list = query.list();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return list;
    }
    
    
    /**
     * 根據查詢實體查詢(動態查詢)
     * @param hql
     * @param queryObject 查詢實體
     * @return
     */
    public static List getList(String hql,Object queryObject){
        Transaction tran = null;
        List list = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.創建Query對象, session.creatQuery();
            Query query = session.createQuery(hql);
            //判斷是否有參數傳遞
            if(queryObject!=null){
                query.setProperties(queryObject);
            }
            //4.執行查詢,得到結果
            list = query.list();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return list;
    }
    
    /**
     * 查詢得到iterator
     * @param hql
     * @return
     */
    public static Iterator getIterator(String hql){
        //Transaction tran = null;
        Iterator it = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            //tran=session.beginTransaction();
            //3.創建Query對象, session.creatQuery();
            Query query = session.createQuery(hql);
            //4.執行查詢,得到結果
            it = query.iterate();
        } catch (HibernateException e) {
            e.printStackTrace();
        }
        return it;
    }
    /**
     * 查詢結果是唯一的
     * @param hql
     * @return
     */
    public static Object getUniqueResult(String hql){
        Transaction tran = null;
        Object obj = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.創建Query對象, session.creatQuery();
            Query query = session.createQuery(hql);
            //判斷是否有參數傳遞
            
            //4.執行查詢,得到結果
            obj = query.uniqueResult();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return obj;
    }
    
    /**
     * 實體的更新刪除
     * @param hql
     * @return
     */
    public static int executeUpdate(String hql){
        Transaction tran = null;
        int row = 0;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.創建Query對象, session.creatQuery();
            Query query = session.createQuery(hql);
            //判斷是否有參數傳遞
            
            //4.執行查詢,得到結果
            row = query.executeUpdate();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return row;
    }
    
    /**
     * 分頁
     * @param hql    查詢語句
     * @param params 參數
     * @param index  頁數
     * @param size   每頁記錄數
     * @return
     */
    public static List getList(String hql,Object[] params,Integer index,Integer size){
        Transaction tran = null;
        List list = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.創建Query對象, session.creatQuery();
            Query query = session.createQuery(hql);
            //判斷是否有參數傳遞
            if(params!=null){
                for (int i = 0; i < params.length; i++) {
                    query.setParameter(i, params[i]);
                }
            }
            
            //設置分頁
            //設置從第幾條開始讀取
            query.setFirstResult((index-1)*size);
            //設置每頁顯示的條數
            query.setMaxResults(size);
            
            //4.執行查詢,得到結果
            list = query.list();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return list;
    }
    
    /**
     * Criteria查詢
     * @param cls 實體.class
     * @param criterions 查詢條件集合
     * @return
     */
    public static List QueryByCriteria(Class cls,List<Criterion> criterions){
        Transaction tran = null;
        List list = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.Criteria對象
            Criteria criteria = session.createCriteria(cls);
            //添加查詢條件
            if(criterions!=null && criterions.size()>0){
                for (Criterion criterion : criterions) {
                    criteria.add(criterion);
                }
            }
            
            //4.執行查詢,得到結果
            list = criteria.list();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return list;
    }
    
    /**
     * Criteria 查詢 + 排序
     * @param cls 實體.class
     * @param criterions 查詢條件集合
     * @param ordername 排序的屬性名
     * @param isdesc 是否降序
     * @return
     */
    public static List QueryByCriteria(Class cls,List<Criterion> criterions,String orderName,Boolean isDesc){
        Transaction tran = null;
        List list = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.Criteria對象
            Criteria criteria = session.createCriteria(cls);
            //添加查詢條件
            if(criterions!=null && criterions.size()>0){
                for (Criterion criterion : criterions) {
                    criteria.add(criterion);
                }
            }
            //排序
            if(orderName!=null){
                if(isDesc){
                    criteria.addOrder(Order.desc(orderName));
                }else{
                    criteria.addOrder(Order.asc(orderName));
                }
            }
            
            //4.執行查詢,得到結果
            list = criteria.list();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 投影查詢(查詢n個屬性)
     * @param cls
     * @param projection 投影實例
     * @return
     */
    public static List QueryByCriteriaProjection(Class cls,Projection projection){
        Transaction tran = null;
        List list = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.Criteria對象
            Criteria criteria = session.createCriteria(cls);
            //投影查詢
            if(projection!=null){
                criteria.setProjection(projection);
            }
            //4.執行查詢,得到結果
            list = criteria.list();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 得到唯一結果
     * @param cls
     * @param projection
     * @return
     */
    public static Object QueryByUniqueResult(Class cls,Projection projection){
        Transaction tran = null;
        Object obj = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.Criteria對象
            Criteria criteria = session.createCriteria(cls);
            //投影查詢
            if(projection!=null){
                criteria.setProjection(projection);
            }
            //4.執行查詢,得到結果
            obj = criteria.uniqueResult();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return obj;
    }
    
    /**
     * 分頁
     * @param cls  Class對象
     * @param index  頁碼
     * @param size  每頁記錄數
     * @param orderName  排序名稱
     * @param isDesc  是否爲降序
     * @return
     */
    public static List QueryByCriteria(Class cls,Integer index,Integer size,String orderName,Boolean isDesc){
        Transaction tran = null;
        List list = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.Criteria對象
            Criteria criteria = session.createCriteria(cls);
            //排序
            if(orderName!=null){
                if(isDesc){
                    criteria.addOrder(Order.desc(orderName));
                } else{
                    criteria.addOrder(Order.asc(orderName));
                }
            }
            //分頁
            //設置從第幾條開始讀取
            criteria.setFirstResult((index-1)*size);
            //設置每頁顯示的條數
            criteria.setMaxResults(size);
            
            //4.執行查詢,得到結果
            list = criteria.list();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return list;
    }
    
    /**
     * 分頁/條件/排序
     * @param cls  Class對象
     * @param criterions 查詢條件集合  
     * @param index  頁碼
     * @param size  每頁記錄數
     * @param orderName  排序名稱
     * @param isDesc  是否爲降序
     * @return
     */
    public static List QueryByCriteria(Class cls,List<Criterion> criterions,Integer index,Integer size,String orderName,Boolean isDesc){
        Transaction tran = null;
        List list = null;
        try {
            //1.獲取Session
            Session session = getSession();
            //2.開啓事務
            tran=session.beginTransaction();
            //3.Criteria對象
            Criteria criteria = session.createCriteria(cls);
            
            //添加查詢條件
            if(criterions!=null && criterions.size()>0){
                for (Criterion criterion : criterions) {
                    criteria.add(criterion);
                }
            }
            
            //排序
            if(orderName!=null){
                if(isDesc){
                    criteria.addOrder(Order.desc(orderName));
                } else{
                    criteria.addOrder(Order.asc(orderName));
                }
            }
            
            //分頁
            //設置從第幾條開始讀取
            criteria.setFirstResult((index-1)*size);
            //設置每頁顯示的條數
            criteria.setMaxResults(size);
            
            //4.執行查詢,得到結果
            list = criteria.list();
            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        }
        return list;
    }  
}
------------------------------------------------------------------------------------------------------------------------------------
肯定還要配置ORM映射

pojo.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- 用戶ORM -->
    <class name="com.house.pojo.User" table="Users">
        <id name="id" column="id" type="java.lang.Integer">
            <generator class="sequence">
               <param name="sequence">seq_reuser</param>
            </generator>
        </id>
        <property name="userName" column="name" type="java.lang.String" />
        <property name="userPass" column="password" type="java.lang.String"></property>
        <property name="telephone" column="telephone" type="java.lang.String"></property>
        <property name="realName" column="username" type="java.lang.String"></property>
        <property name="isAdmin" column="isadmin" type="java.lang.String"></property>
    </class>
</hibernate-mapping>
-------------------------------------------------------------------------------------------------------------------------------------------

當然啦,hibernate.cfg.xml也不能少

hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!--數據庫URL -->
        <property name="connection.url">
            jdbc:oracle:thin:@localhost:1521:orcl
        </property>
        <!--數據庫用戶 -->
        <property name="connection.username">house</property>
        <!--數據庫用戶密碼 -->
        <property name="connection.password">house</property>
        <!--數據庫JDBC驅動 -->
        <property name="connection.driver_class">
            oracle.jdbc.driver.OracleDriver
        </property>
        <!--每個數據庫都有其對應的Dialect以匹配其平臺特性 -->
        <property name="dialect">
            org.hibernate.dialect.Oracle10gDialect
        </property>

        <!-- 顯示底層執行的SQL語句 -->
        <property name="show_sql">true</property>
        <!-- 格式化SQL語句 -->
        <property name="format_sql">true</property>
        <!-- 本地JDBC事務 -->
        <property name="hibernate.current_session_context_class">thread</property>

        <!-- 添加映射文件 -->
        <mapping resource="com/house/pojo/pojo.hbm.xml"/>
    </session-factory>
</hibernate-configuration>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章