JBuilder开发Struts+Hibernate框架
2008-01-05 08:08:30 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備胶绮崝锕傚礈濞嗘挸绀夐柕鍫濇川绾剧晫鈧箍鍎遍幏鎴︾叕椤掑倵鍋撳▓鍨灈妞ゎ厾鍏橀獮鍐閵堝懐顦ч柣蹇撶箲閻楁鈧矮绮欏铏规嫚閺屻儱寮板┑鐐板尃閸曨厾褰炬繝鐢靛Т娴硷綁鏁愭径妯绘櫓闂佸憡鎸嗛崪鍐簥闂傚倷娴囬鏍垂鎼淬劌绀冮柨婵嗘閻﹂亶姊婚崒娆掑厡妞ゃ垹锕ら埢宥夊即閵忕姷顔夐梺鎼炲労閸撴瑩鎮橀幎鑺ョ厸闁告劑鍔庢晶鏇犵磼閳ь剟宕橀埞澶哥盎闂婎偄娲ゅù鐑剿囬敃鈧湁婵犲﹤鐗忛悾娲煛鐏炶濡奸柍瑙勫灴瀹曞崬鈻庤箛鎾寸槗缂傚倸鍊烽梽宥夊礉鎼达絽鍨濇い鏍仜妗呴梺鍛婃处閸ㄦ壆绮婚幎鑺ュ€甸柨婵嗙凹缁ㄨ棄霉閻樿崵鐣烘慨濠冩そ濡啫鈽夊▎鎰€烽梺璇插閻噣宕¢幎鑺ュ仒妞ゆ洍鍋撶€规洖鐖奸、妤佸緞鐎n偅鐝┑鐘愁問閸n垳寰婇崜褉鍋撶粭娑樻搐缁犳煡鏌涢妷顔煎闁藉啰鍠栭弻锝夊棘閹稿孩鍠愰梺鑽ゅ枎缂嶅﹪寮诲☉鈶┾偓锕傚箣濠靛洨浜俊鐐€ら崜娆撴偋閸℃稈鈧棃宕橀鍢壯囧箹缁厜鍋撻懠顒€鍤紓鍌氬€风欢锟犲窗濡ゅ懎绠伴柟闂寸劍閸嬧晠鏌i幋锝嗩棄缁绢厸鍋撻梻浣虹帛閸旀洜绮旈棃娴虫盯宕橀鍏兼К闂侀€炲苯澧柕鍥у楠炴帡骞嬪┑鎰磻闁诲氦顫夐幐椋庣矆娓氣偓閸╃偤骞嬮敂钘変汗闂佸湱绮敮鈺傚閳ь剛绱撴担鐟板姢鐟滄壆鍋熼崚鎺戔枎閹惧疇鎽曞┑鐐村灦閻喖鈻介鍫熺厵閻熸瑥瀚慨鍥ㄣ亜閵夛妇绠炴慨濠冩そ閺屽懘鎮欓懠璺侯伃婵犫拃鍌氬祮闁哄瞼鍠栭幖褰掝敃閿濆懐锛撻梻浣瑰缁诲嫰宕戝☉銏犵厴闁瑰濮崑鎾绘晲鎼存ê浜炬い鎾寸⊕濞呭﹪鏌$仦鐣屝f繛纰变邯楠炲繒浠﹂挊澶婅厫闂傚倷鐒﹂惇褰掑磹閺囥垹绠犻柟閭﹀枟椤洟鏌熼幆褏鎽犲┑顖涙尦閺屾盯骞橀弶鎴犵シ闂佸憡鎸稿畷顒勨€旈崘顔嘉ч柛鈩冾殘娴犳悂姊洪懡銈呮毐闁哄懏鐩幃楣冩倻閽樺)銊ф喐婢舵劕纾婚柟鍓х帛閺呮煡骞栫划鐟板⒉闁诲繐绉瑰铏圭磼濡闉嶅┑鐐插级閿曘垺淇婇悽绋跨妞ゆ牗姘ㄩ悿鈧梻鍌氬€搁悧濠勭矙閹邦喛濮抽柤娴嬫櫇绾捐棄霉閿濆牊顥夐柣鎾村姈閹便劌螣缁嬪灝顬嬪┑鈥冲级閸旀瑩鐛Ο鍏煎珰闁肩⒈鍓﹀Σ浼存⒒娴gǹ鏆遍柟纰卞亰瀹曟劖绻濆В绋挎喘瀵埖鎯旈幘瀛樻澑婵$偑鍊栧濠氬Υ鐎n亶鍟呴柕澶涜礋娴滄粍銇勯幘璺轰粶婵℃彃顭烽弻锝夋晲閸パ冨箣濡ょ姷鍋炵敮锟犵嵁鐎n喖绫嶉柍褜鍓熼幃妤佺節濮橆厸鎷洪柣鐔哥懃鐎氼參宕曞Δ鍛厱婵☆垵銆€閸嬫捇鎮㈤幓鎺戠阀濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻戦妵鍕箻閸楃偟浠肩紒鐐劤椤兘寮婚悢鐓庣鐟滃繒鏁☉銏$厓闂佸灝顑呴悘锕傛煏閸パ冾伃妤犵偞甯″畷鍗烆渻閹屾缂傚倸鍊搁崐椋庣矆娓氣偓钘濋梺顒€绉撮弸浣糕攽閻樿櫕鐨戠€规挷绶氶弻娑㈠焺閸愵亖濮囬梺绋匡功閸忔﹢寮诲☉妯锋斀闁糕剝顨忔导鈧俊鐐€栧褰掑礉閺囥垹鐓橀柟杈鹃檮閸婂鏌涢妷銏℃珖閺嶏繝姊绘担鍛婂暈闁圭ǹ顭烽幃鐑芥晜閻e备鏀虫繝鐢靛Т濞诧箓宕甸崘顔界厓闁告繂瀚弳鐔兼煥濞戞瑧鐭掓慨濠囩細閵囨劙骞掗幋婊冩瀳闂備礁鎲¢悷銉︻殽閹间礁鐓濋柟鐐灱閸亪鏌涢銈呮灁闁告ɑ鎮傞弻锝堢疀閺囩偘鎴风紒缁㈠幖閻栫厧鐣烽幋锕€绠婚悹鍥皺閻も偓濠电偠鎻徊浠嬪箟閿熺姴纾规い鏍仦閳锋垹鐥鐐村櫣濞存粌缍婇幃璺衡槈閺嵮冨Е闂佺硶鏂侀崑鎾愁渻閵堝棗绗掗柛鐕佸亰閹啫煤椤忓懐鍘告繛杈剧到濠€杈ㄦ櫠椤忓牊鐓冮悷娆忓閻忔挳鏌熼鐣屾噰鐎殿喖鐖奸獮瀣偐鏉堫煈鏁囬梻鍌氬€风粈浣革耿鏉堛劎浠氶梻浣侯攰婵倗鍒掓惔銊ョ闁圭儤顨呯猾宥夋煕椤愩倕鏋庡ù鐘烘缁辨挻鎷呴崜鎻掑壍濡炪倖娲樻繛濠囧极閸愵喖纾兼繛鎴炶壘楠炲牓姊绘担鍛婃儓婵炲眰鍨藉畷婵嗙暆閸曨剙鈧爼鏌eΟ鑲╁笡闁绘挻娲熼弻鐔兼嚋椤掆偓婵$厧霉濠婂嫬鍔ら柍瑙勫灴閺佸秹宕熼鈩冩線闂備胶枪閿曘儵鎮ч悩鑼殾婵犻潧顑嗛弲婵嬫煃瑜滈崜鐔煎灳閿曞倸閿ゆ俊銈傚亾闁绘帒鐏氶妵鍕箳瀹ュ牆鍘$紓浣哄Т婢т粙鍩€椤掆偓閸樻粓宕戦幘鏂ユ斀闁绘ǹ浜粣鏃堟煕鐎n偒娈旈柍瑙勫灴椤㈡瑧娑甸悜鐣屽弽婵犵數鍋涢幏鎴犲緤閸啣锝夊箛閺夎法顔婇梺鐟板暱绾绢參宕伴幘璇茬闁绘ḿ绮崵鎴︽煠缁嬭法浠涙慨锝嗗姍濮婂宕掑顑藉亾閻戣姤鍤勯柤鍝ユ暩娴犳碍绻濋悽闈涗粶妞ゆ洦鍙冨畷妤€螣娓氼垰娈ㄥ銈嗗姂閸婃牜鈧碍姘ㄩ埀顒傛嚀婢瑰﹪宕伴弽褉鏋旈柕濠忓缁♀偓闂佹眹鍨藉ḿ褎鐗庣紓浣哄亾濠㈡ḿ绮旈悷閭﹀殨闁哄被鍎辩粻鐢告煙閻戞ḿ绠橀柛鐐垫暬閺岋綁鎮╅悜姗嗕哗闁诲繐绻堥崝宀勵敊韫囨稑唯鐟滃宕戦幘鑸靛枂闁告洦鍓欑喊宥呪攽閳藉棗浜濈紒璇插€块敐鐐剁疀濞戞瑦鍎梺闈╁瘜閸橀箖鏁嶅⿰鍐f斀闁宠棄妫楅悘鐘绘煙绾板崬浜伴柨婵堝仜椤撳ジ宕堕埡鍐跨闯濠电偠鎻紞渚€藟閹捐绀夌€广儱顦伴悡娆戠磼鐎n亞浠㈤柡鍡涗憾閺岋綁鏁愰崶褍骞嬪Δ鐘靛仜椤戝寮崘顔肩劦妞ゆ帒鍊绘稉宥呪攽閻樺磭顣查柛瀣剁秮閺屾盯濡烽幋婵嗘殶濡ょ姴娲幃妤冩喆閸曨剙纰嶇紓浣割槹閹告娊鍨鹃弮鍫濈妞ゆ柨妲堣閺屾盯鍩勯崗鐙€浜Λ鍕吋閸モ晝锛濇繛杈剧到婢瑰﹪宕曢幇鐗堢厱闁靛ǹ鍎遍。宕囩磼椤旂⒈鍎忔い鎾冲悑瀵板嫮鈧綆浜栭崑鎾绘煥鐎c劋绨婚梺鐟版惈缁夊爼藝閿旈敮鍋撳▓鍨灈闁诲繑绻堥崺鐐哄箣閿曗偓閻擄繝鏌涢埄鍐炬畼濞寸媭鍨跺娲川婵犲海鍔堕梺鍛婃处閸欏骸煤閸涘﹣绻嗛柕鍫濈箳閸掍即鏌涢悤浣哥仸鐎规洘鍔欏畷褰掝敃閿濆懎浼庢繝纰樻閸ㄦ娊宕㈣缁傚秵銈i崘鈺佲偓鍨叏濡厧浜鹃悗姘炬嫹

核心提示:引言:Struts是Apache Software Foundation支持的Jakarta项目的一部分,它一个优秀的Web应用框架,JBuilder开发Struts+Hibernate框架,该框架的主要体系设计师和开发者者是Craig R.McClanahan,Craig是Tomcat4的主设计师和java Web
引言:
Struts是Apache Software Foundation支持的Jakarta项目的一部分,它一个优秀的Web应用框架。该框架的主要体系设计师和开发者者是Craig R.McClanahan,Craig是Tomcat4的主设计师和java Web Services Developer Pack实现包的主设计师,他领导着Sun的JavaServer Faces规范开发,同时也是Java EE平台的Web Layer Archiecture。
Hibernate是一个优秀的ORM中间件,它可以为任何一个需要访问关系数据库的Java应用服务,它的工作原理是通过文件把值对象和数据库表之间建立起一个映射关系,这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。
下面我们通过使用这两种技术来实现一个简单的文章发布应用,在该应用中,我们可以浏览文章,可以发布文章。
step1:
在JBuilder中新建一个名为myArticles的工程,接着在工程中新建一个名为myArticlesWeb的Web Module,选中支持Struts1.1。
step2:
往工程中添加需要的jar文件,包括hibernate3.jar和hibernate下载包lib目录下的全部jar文件,以及MySQL数据库的驱动。
step3:
创建数据库myhibernate和表articles,创建的Schema如下:
CREATE DATABASE MYHIBERNATE;
USE MYHIBERNATE;
CREATE TABLE ARTICLES( id BIGINT NOT NULL, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, writeDate DATE, PRIMARY KEY(id));
step4:
创建持久化类EntityArticle.java,代码如下:
package com.ouxingning.hibernate;
/** * <p>Title: articlesManage project</p> * * <p>Description: manage articles</p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author ouxingning * @version 1.0 */import java.io.*;
import java.sql.Date;
public class EntityArticle implements Serializable {
private Long id;
private String title;
private String content;
private String remark;
private Date writeDate;
public EntityArticle() {
}
private void readObject(ObjectInputStream ois) throws IOException,
ClassNotFoundException {
ois.defaultReadObject();
}
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
}
public void setId(Long id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setContent(String content) {
this.content = content;
}
public void setRemark(String remark) {
this.remark = remark;
}
public void setWriteDate(Date writeDate) {
this.writeDate = writeDate;
}
public Long getId() {
return id;
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
public String getRemark() {
return remark;
}
public Date getWriteDate() {
return writeDate;
}}
step5:
创建对象-关系映射文件EntityArticle.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
package="com.ouxingning.hibernate">
<class name="EntityArticle" table="ARTICLES" lazy="false">
<comment>Article elements.</comment>
<id name="id">
<generator class="increment"/>
</id>
<property name="title" column="title" type="string" not-null="true"/>
<property name="content" column="content" type="text" not-null="true"/>
<property name="writeDate" column="writeDate" type="date"/>
</class></hibernate-mapping>
step6:
创建Hibernate配置文件hibernate.cfg.xml,如下:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>
<session-factory >
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/myhibernate?useUnicode=true&characterEncoding=GBK</property>
<property name="connection.username">root</property>
<property name="connection.passWord">ouxingning</property>
<mapping resource="com/ouxingning/hibernate/EntityArticle.hbm.xml"/>
</session-factory></hibernate-configuration>
step7:
创建Hibernate的业务逻辑BusinessService.java,供Struts的Action调用,代码如下:
package com.ouxingning.hibernate;
/** * <p>Title: articlesManage project</p> * * <p>Description: manage articles</p> * * <p>Copyright: Copyright (c) 2005</p> * * <p>Company: </p> * * @author ouxingning * @version 1.0 */import org.hibernate.*;
import org.hibernate.cfg.*;import java.sql.Date;
import java.util.*;
import com.ouxingning.hibernate.EntityArticle;
public class BusinessService {
private static sessionFactory sessionFactory;
static {
//Create the SessionFactory
try {
sessionFactory = new Configuration().configure().
buildSessionFactory();
} catch (Exception ex) {
ex.printStackTrace();
}
}
//find all instances of EntityArticle
public List findAllArticles() {
List articles = new ArrayList();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
articles = session.createQuery("from EntityArticle").list();
tx.commit();
session.close();
return articles;
}
//save an persistent instance of EntityAnticle
public void saveArticle(EntityArticle article) {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
EntityArticle myarticle = new EntityArticle();
myarticle.setTitle(article.getTitle());
myarticle.setContent(article.getContent());
myarticle.setWriteDate(article.getWriteDate());
myarticle.setRemark(article.getRemark());
session.save(myarticle);
tx.commit();
session.close();
}
//find an instance of EntityArticle by its indentifier property
public EntityArticle findArticleByID(Long id) {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
EntityArticle ea = (EntityArticle) session.load(EntityArticle.class, id);
tx.commit();
session.close();
return ea;
}
//delete the instance of EntityArticle
public void deleteArticle(EntityArticle ea) {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.delete(ea);
tx.commit();
session.close();
}
//update the instance of EntityArticle public void updateArticle(EntityArticle ea) {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.update(ea);
tx.commit();
session.close();
}
public BusinessService() {
}
public static void main(String args[]) {
BusinessService bs = new BusinessService();
EntityArticle ea = new EntityArticle(); /*
ea.setTitle("欧兴宁'title");
ea.setContent("欧兴宁的内容");
ea.setRemark("欧兴宁的备注");
//change the type java.util.Date to java.sql.Date
java.util.Date ud = new java.util.Date();
ea.setWriteDate(new java.sql.Date(ud.getTime()));
bs.saveArticle(ea);
System.out.println("good");
List results = bs.findAllArticles();
for(int i=0;i<results.size();i++){
ea = (EntityArticle)results.get(i);
System.out.print(ea.getId() + "\t");
System.out.print(ea.getTitle() + "\t");
System.out.print(ea.getContent() + "\t");
System.out.println(ea.getWriteDate());
}*/ for (int i = 0; i < 9; i++) {
Long id = new Long(i);
ea = bs.findArticleByID(id);
System.out.print(ea.getId() + "::");
System.out.print(ea.getTitle() + "\t");
System.out.print(ea.getWriteDate() + "\t");
System.out.println(ea.getContent());
}
System.out.println("end");
}}
step8:
创建用于显示列表的表现层文件articleList.jsp,代码如下:
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%><%@taglib uri="/WEB-INF/struts-nested.tld" prefix="nested"%><%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%><%@taglib uri="/WEB-INF/struts-template.tld" prefix="template"%><%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%><%@taglib uri="/WEB-INF/struts-Html.tld" prefix="html"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@page contentType="text/html;
charset=GBK"%><%@page import="com.ouxingning.hibernate.*"%><%@page import="java.util.*"%><html:html locale="true"><head>
<meta http-equiv="Content-Type" content="text/html;
charset=gb2312"><title>文章列表</title>
<html:base/></head><body>
<table width="780" border="0" align="center">
<tr>
<td align="center" valign="middle">
<h1>文章列表</h1>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<hr size="1">
</td>
</tr>
<logic:iterate id="article" name="articles" type="com.ouxingning.hibernate.EntityArticle">
<tr> <td align="left" valign="middle" bgcolor="#FFFFFF">
<bean:write name="article" property="id"/>
、
<html:link forward="showArticle" paramId="articleID" paramName="article" paramProperty="id">
<bean:write name="article" property="title"/>
</html:link>
[
<bean:write name="article" property="writeDate"/>
]
</td>
</tr>
</logic:iterate>
</table></body></html:html>
step9:
创建用于显示每篇文章内容的表现层文件showArticle.jsp,代码如下:
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%><%@taglib uri="/WEB-INF/struts-nested.tld" prefix="nested"%><%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%><%@taglib uri="/WEB-INF/struts-template.tld" prefix="template"%><%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%><%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@page contentType="text/html; charset=GBK"%><%@page import="com.ouxingning.hibernate.*"%><%@page import="java.util.*"%><html:html locale="true"><head> <meta http-equiv="Content-Type" content="text/html;
charset=gb2312"><title><bean:write name="article" property="title"/></title>
<html:base/></head><body>
<table width="780" border="0" align="center">
<tr>
<td align="center" valign="middle">
<h1><bean:write name="article" property="title"/></h1>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<hr size="1">
</td>
</tr>
<tr>
<td align="left" valign="middle" bgcolor="#FFFFFF">
<bean:write name="article" property="content"/>
</td>
</tr>
<tr>
<td align="center" valign="middle">
<hr size="1">
</td>
</tr>
<tr>
<td align="right" valign="middle">
Created at: <bean:write name="article" property="writeDate"/>
</td>
</tr>
</table></body></html:html>
step10:
创建用于提交文章的表现层文件writeArticle.jsp,代码如下:
<%@taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles"%><%@taglib uri="/WEB-INF/struts-nested.tld" prefix="nested"%><%@taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%><%@taglib uri="/WEB-INF/struts-template.tld" prefix="template"%><%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%><%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@page contentType="text/html; charset=GBK"%><html:html locale="true"><head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>写文章</title> <html:base/></head><body>
<html:errors/> <html:form action="/writeArticleAction" method="post">
<table width="780" border="0" align="center">
<tr>
<td colspan="2" align="center" valign="middle">
<h1>写文章</h1>
</td>
</tr>
<tr>
<td colspan="2" align="center" valign="middle">
<hr size="1">
</td>
</tr>
<tr>
<td align="right" valign="middle">文章标题:</td>
<td align="left" valign="middle">
<html:text property="title" size="81"/>
</td>
</tr>
<tr>
<td align="right" valign="top">文章内容:</td>
<td align="left" valign="middle">
<html:textarea cols="80" rows="20" property="content"> </html:textarea>
</td>
</tr>
<tr align="center" valign="middle">
<td align="right" valign="top">
<html:submit value="发表文章" property="Submit"/>
</td>
<td align="left" valign="middle">
<html:reset value="清除内容" property="Reset"/>
</td>
</tr>
</table>
</html:form></body></html:html>
step11:
创建ArticleActionForm.java,代码如下:
package com.ouxingning.Struts;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionMapping;import javax.servlet.http.HttpServletRequest;import org.apache.struts.*;import org.apache.struts.action.*;public class ArticleActionForm extends ActionForm {
private String content;
private String title;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public ActionErrors validate(ActionMapping actionMapping,
HttpServletRequest httpServletRequest) {
ActionErrors errors = new ActionErrors();
if ((title == null) (title.length() < 1)) {
errors.add("title", new ActionError("writeArticle.err.title"));
}
if ((content == null) (content.length() < 1)) {
errors.add("content", new ActionError("writeArticle.err.content"));
}
return errors;
} public void reset(ActionMapping actionMapping,
HttpServletRequest servletRequest) {
content = null;
title = null;
}}
step12:
创建writeArticleAction.java,代码如下:
package com.ouxingning.Struts;import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;import com.ouxingning.hibernate.*;
import com.ouxingning.Struts.*;public class WriteArticleAction extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
ArticleActionForm articleActionForm = (ArticleActionForm) actionForm;
BusinessService bs = new BusinessService();
EntityArticle ea = new EntityArticle();
ArticleActionForm aaf = (ArticleActionForm)actionForm;
ea.setTitle(aaf.getTitle());
ea.setContent(aaf.getContent());
//change java.util.Date to java.sql.Date
java.util.Date ud = new java.util.Date();
ea.setWriteDate(new java.sql.Date(ud.getTime()));
//persistant the instance of EntityArticle
bs.saveArticle(ea);
return actionMapping.findForward("sUCcess");
}}
step13:
创建ArticleListAction.java,代码如下:
package com.ouxingning.Struts;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.Action;import java.util.*;
import com.ouxingning.hibernate.*;
public class ArticleListAction extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
BusinessService bs = new BusinessService();
List articles = bs.findAllArticles();
servletRequest.setAttribute("articles",articles);
return actionMapping.findForward("showArticles");
}}
step14:
创建ShowArticleAction.java,代码如下:
package com.ouxingning.Struts;import org.apache.struts.action.ActionMapping;import org.apache.struts.action.ActionForm;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForward;import org.apache.struts.action.Action;import com.ouxingning.hibernate.*;public class ShowArticleAction extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
BusinessService bs = new BusinessService();
EntityArticle ea = new EntityArticle();
ea = bs.findArticleByID(new Long(servletRequest.getParameter("articleID")));
servletRequest.setAttribute("article", ea);
return actionMapping.findForward("showArticle");
}}
step15:
创建个名叫SetCharacterEncodingFilter.java的Filter用于处理中文乱码问题,代码如下:
package com.ouxingning.Struts;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class SetCharacterEncodingFilter extends HttpServlet implements Filter { private FilterConfig filterConfig; //Handle the passed-in FilterConfig public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
//Process the request/response pair
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) {
try {
request.setCharacterEncoding("GBK");
filterChain.doFilter(request, response);
} catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
} catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}
}
//Clean up resources
public void destroy() {
}}
step16:
JBuilder自动生成的web.xml文件,如下:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>myArticles</display-name> <jsp-config> <taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-template.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>
</jsp-config>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern> </servlet-mapping> <filter>
<filter-name>setcharacterencodingfilter</filter-name>
<filter-class>com.ouxingning.Struts.SetCharacterEncodingFilter</filter-class>
</filter> <filter-mapping>
<filter-name>setcharacterencodingfilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
step17:
JBuilder自动生成的struts-config.xml文件,如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"><struts-config>
<form-beans>
<form-bean name="articleActionForm" type="com.ouxingning.Struts.ArticleActionForm" /> </form-beans> <global-forwards>
<forward contextRelative="true" name="articles" path="/articleListAction.do" redirect="true" />
<forward contextRelative="true" name="showArticle" path="/showArticleAction.do" /> </global-forwards> <action-mappings>
<action input="/pages/articleList.jsp" path="/articleListAction" scope="request" type="com.ouxingning.Struts.ArticleListAction">
<forward contextRelative="true" name="showArticles" path="/pages/articleList.jsp" redirect="false" />
</action>
<action input="/pages/writeArticle.jsp" name="articleActionForm" path="/writeArticleAction" scope="request" type="com.ouxingning.Struts.WriteArticleAction">
<forward name="success" path="/index.jsp" />
</action>
<action input="/pages/articleList.jsp" path="/showArticleAction" scope="request" type="com.ouxingning.Struts.ShowArticleAction">
<forward contextRelative="true" name="showArticle" path="/pages/showArticle.jsp" />
</action> </action-mappings></struts-config>
总结:
在这个简单的文章发布应用中,我们使用了Struts作为表现层框架,使用了Hibernate作为持久化层框架,大大增强的应用的可扩展性和可维护性。各位对Struts或Hibernate感爱好的朋友可以继续扩展该应用,在扩展过程中,《Struts in Action》,《Hibernate in Action》以及Hibernate的文档都是很好的参考资料。
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››Struts2配置文件中redirect传递中文参数乱码的解决...
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››开发一个自己的HTML在线编辑器(一)
- ››开发一个自己的HTML在线编辑器(二)
- ››开发者在App Store上赚的钱比在Android Market上多...
- ››开发者应深入学习的10个Android开源应用项目
- ››开发移动 Web Ajax 应用
- ››开发者眼中的iPhone与Android
更多精彩
赞助商链接