【數據庫方面】:
(最好先自己創建一個用戶,創建一個表空間)
1.配置數據源
在 Myeclipse Database explorer perspective中的 DB browser 中 右鍵new 一個數據源
選者 oracle thin 配置jdbc:oracle:thin:@localhost:1521/APP1 添加用戶名和密碼 然後導入class12.jar包
2.創建表
create table hb1(id number primary key,uname varchar2(20)not null,upass varchar2(10));
3.因爲oracle不支持自動編號,所以要先創建一個序列
create sequence my_seq1 nocycle maxvalue 1000 start with 01;
4.使用下列語句增加數據(不需要)
insert into hb1(id,uname,upass)values(my_seq.nextval,'gm','gm');
到此數據庫部分結束
(以下以hb1表,my_seq1序列爲例)
【myeclipse方面】:
1.創建web-project
2.添加struts組件 選擇struts 1.2
3.在struts控制文件struts-config.xml中,創建 Jsp Form and Action,比如創建一個add(開戶)功能,給addForm添加forward導向顯示頁面
,其他如del update 等功能和add功能類似
4.添加hibernate支持,選擇hibernate3.1 最好兩個library都勾上,然後 點copy checked library jars to project...(注意這裏一定要選擇此項,來把對應的jar支持添加到項目中)。最後一步,不需要選者創建 create sessionFactory,自己手工創建
5.在 hibernate.cfg.xml控制文件中,在Specify additional Hibernate properties選項中添加show_sql 值爲true,爲了頁面操作完後在控制檯打印出sql語句的信息
6.打開數據源,連接數據庫
7.把對應的表添加hibernate持久層選者hibernate Reserve Engerning...,添加的時候,要在src下先創建一個com.pojo包,把表對應添加到這個包中,不要直接添加到src下。選者要添加的Hibernate mapping file 以及 java data object(不需要創建abstract class抽象內)
另外,添加的時候選擇 sequence 選項。
8.添加完表映射文件後,在pojo包下的Hb1.hbm.xml配置文件中,配置如下:
<hibernate-mapping>
<class name="com.pojo.Hb1" table="HB1" schema="SCOTT">
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="sequence" >
<param name="sequence">MY_SEQ1</param> (這裏很關鍵)
</generator>
9.創建一個com.DAO包,在包下創建一個 Hb1dao.java文件
這個文件中包含了所有的業務方法。具體代碼如下
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.pojo.Hb;
import com.pojo.Hb1;
public class HBDAO {
public static Session session;//創建數據庫的連接對象
//private connection conn;
public HBDAO(){
Configuration cfg = new Configuration().configure();//創建配置對象
SessionFactory sf = cfg.buildSessionFactory();//創建連接工廠
//使用hibernate.cfg.xml配置連接數據庫
session = sf.openSession();//打開數據庫的會話 --相當於使用connection conn
//conn = session.connection();
}
public void closeSession(){
if(session!=null){
session.close();
session = null;
}
}
//增加
public void AddUser(Hb1 user){
Transaction tx = session.beginTransaction();
session.saveOrUpdate(user);
tx.commit();
}
//查詢全部內容操作
public List<Hb1> getAll(){
Query query = session.createQuery("from Hb1");
//分頁操作
query.setFirstResult(0);//0代表第一頁
query.setMaxResults(2);//每頁顯示個數
List<Hb1> list = query.list();
return list;
}
//修改
public void UpdateUser(Integer id,Hb1 user){ //傳入的user是update.jsp頁面中生成的新的用戶信息,id是必須要正確的
Transaction tx = session.beginTransaction(); //開始一個事務,爲了能夠往數據庫中添加數據,如果沒有事務的話
//Query query = session.createQuery("update Hb1 user"+ // 可能會導致不能添加
// "set user.uname=:newuname,user.upass = : newpass" +"where user.id = ?");
//query.setInteger(0, id);
//query.setString("newuname", newuname);
//query.setString("newpass", newpass);
//query.executeUpdate();
//Hb1 user = (Hb1)query.uniqueResult();
Query query = session.createQuery("from Hb1 p where p.id = ?"); //
query.setInteger(0, id); //
Hb1 olduser = (Hb1)query.uniqueResult();//以上三句,實現了通過id查找數據庫中原始數據的功能
olduser.setUname(user.getUname());
olduser.setUpass(user.getUpass());
session.save(olduser);
session.flush(); //當有大量數據需要修改時,使用此語句
tx.commit(); //提交事務
}
//刪除
public static void DelUser(Integer id){
/*Transaction tx = session.beginTransaction();
Hb1 user = (Hb1)session.get(Hb1.class, id);
session.delete(user);
tx.commit();
*/
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Hb1 p where p.id = ?");
query.setInteger(0, id);
Hb1 user = (Hb1)query.uniqueResult();
session.delete(user);
//query.executeUpdate();
tx.commit();
}
//查詢特定內容
public Hb1 getOnebyId (Integer id){
Query query = session.createQuery("from Hb1 p where p.id = ?");
query.setInteger(0, id);
Hb1 user = (Hb1)query.uniqueResult();
return user;
}
//模糊查詢
public List<Hb1> getOnebyName(String name){
Query query = session.createQuery("from Hb1 p where p.uname like ?");
query.setString(0, "%"+name+"%");
List<Hb1> list = query.list();
return list;
}
}
10.在對應的界面中添加以上對應的方法。比如
在addaction中調用adduser方法
String name = addForm.getUname();
String pass = addForm.getUpass();
Hb1 user = new Hb1(name,pass);
HBDAO dao = new HBDAO();
if( name != null& pass!=null){
dao.AddUser(user);
List<Hb1>list = dao.getAll(); //注意這裏,當添加完數據後,要調用查詢數據庫的方法,讀一次數據庫,
dao.closeSession(); //並把讀出來的數據存放在 List 列表中
request.getSession().setAttribute("rs", list); //設置"rs",爲了在show頁面中,調用logic:iterate標籤時
request.removeAttribute("AddForm"); //使用,然後調用removeAttribute清空在頁面填寫完後的內
return mapping.findForward("show"); //容
}
11.在顯示頁面中,首先要添加 struts標籤庫
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
在顯示頁面中有個迭代器
<body>
<center>
<table border="1">
<tr><td>id</td><td>name</td><td>password</td></tr>
<logic:iterate id="user" name = "rs" scope = "session">
<tr>
<td>
${user.id}
</td>
<td>
${user.uname}
</td>
<td>
${user.upass}
</td>
</tr>
</logic:iterate>
</table>
</center>
</body>
顯示的效果如下
id name password
${user.id} ${user.uname} ${user.upass}
12.配置過濾器和國際化
(過濾器):爲了能往oracle數據庫中添加中文數據
1.首先創建一個fiter包,包下創建一個Myfiter.java文件。創建包時注意添加一下繼承接口RequestProcessor
package com.fiter;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
public class Myfiter2 extends RequestProcessor {
@Override
protected boolean processPreprocess(HttpServletRequest request,
HttpServletResponse response) {
try {
request.setCharacterEncoding("gb2312");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
}
2.創建完後在 struts-config.xml中配置一個controller:
<controller processorClass = "com.fiter.Myfiter2">
</controller>
另外注意的是,把每個jsp文件(比如add.jsp del.jsp)中的頁頂<%@ page language="java" pageEncoding="gbk"%>。這樣才能在頁面中顯示中文。
(國際化):爲了不同國家的人,都能方便使用此頁面
1.首先在 IE 瀏覽器Internet選項--語言--添加語言首選項(中文或者其他語言)
struts 在每個form中,都提供了 validate方法和reset方法,前者爲了錯誤判斷,後者爲了初始化設置頁面選項框中,默認顯示“請輸入您的姓名”等等
比如在addForm中的validate方法中,代碼如下
if(uname.length()==0 ){
ActionErrors error1 = new ActionErrors();
error1.add("uname", new ActionMessage("nullname"));//uanme爲對應的add.jsp中的 errpr對應的uname
return error1; //uname : <html:text property="uname"/><html:errors property="uname"/><br/>
}
if(upass.length()<=2){
ActionErrors error2 = new ActionErrors();
error2.add("upass",new ActionMessage("shortpass"));
return error2;
}
return null;
2.其中 nullname 對應了com.yourcompany.struts包下的
ApplicationResouces_cn.properties中的內容
nullname = /u60a8/u8f93/u5165/u7684/u7528/u6237/u540d/u4e3a/u7a7a(您輸入的用戶名爲空)
shortpass = /u60a8/u8f93/u5165/u7684/u5bc6/u7801/u957f/u5ea6/u5c0f/u4e8e3
nullid = /u60a8/u8f93/u5165/u7684/u5e10/u53f7/u4e3a/u7a7a
在java安裝包下的bin文件夾下有一個 native2acci ,將中文轉換爲如上語言
ApplicationResouces_en.properties中的內容
nullname = your input name is null
shortpass = your input password is less than 3
nullid = your input id is null
3.最後一步:struts-config.xml中配置一個controller:
</controller>
<message-resources parameter="com.yourcompany.struts.ApplicationResources_cn" />
</struts-config>