第一步:下載並部署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>