【数据库方面】:
(最好先自己创建一个用户,创建一个表空间)
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>