开发基于StrutsHibernate框节能
民生法规 2020-11-03 00:03 字号: 大 中 小
Hibernate是一个优秀的ORM中间件,它可以为任何一个需要访问关系数据库的Java应用服务,它的工作原理是通过文件把值对象和数据库表之间建立起一个映射关系,这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。 HSb[C%}el
5@y8?ws~Y
下面我们通过使用这两种技术来实现一个简单的文章发布应用,在该应用中,我们可以浏览文章,可以发布文章。 y1`BV^QH
lL1Cc g
step1: C\14j*j"j
新建一个名为myArticles的工程,接着在工程中新建一个名为myArticlesWeb的Web Module,选中支持Struts1.1。 m,6nKp
_$`_P
step2: ZeGSo1
往工程中添加需要的jar文件,包括r和hibernate下载包lib目录下的全部jar文件,以及MySQL数据库的驱动。 "t0 *=yb
Q"wEB8R9
step3: /t?VR[^(
创建数据库myhibernate和表articles,创建的Schema如下: Q*nb4YKb
+jvS0!\06
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)); J}XSb2
b`o $uY
h |z//
step4: 1zZTliv
创建持久化类va,代码如下: n#V"7fS
` it`-}
package bernate;/** * pTitle: articlesManage project/p * * pDescription: manage articles/p * * pCopyright: Copyright (c) 2005/p * * pCompany: /p * * @author ouxingning * @version 1.0 */import .*;import te;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 { faultReadObject(); } private void writeObject(ObjectOutputStream oos) throws IOException { faultWriteObject(); } public void setId(Long id) { = id; } public void setTitle(String title) { tle = title; } public void setContent(String content) { ntent = content; } public void setRemark(String remark) { mark = remark; } public void setWriteDate(Date writeDate) { iteDate = 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; }} 3 tq9AWRW
lRAT%*qSU
vOr378k.
step5: KKd(t~7
创建对象-关系映射文件l,如下: *4I}?. k
R[=*^h[
?xml version="1.0"?!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" ""hibernate-mapping package="bernate" class name="EntityArticle" table="ARTICLES" lazy="false" commentArticle 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 ?-B G6k
^P SUcZMt
Jn)q{E
w0E" Cl? C
step6: Bq I.R-[
创建Hibernate配置文件l,如下: t)PIxQBM
r@wC{l~
!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" ""hibernate-configuration session-factory property name="show_sql"true/property property name="alect"SQLDialect/property property name="iver_class"iver/property property name="l"jdbc:mysql://localhost:3306/myhibernate?useUnicode=truecharacterEncoding=GBK/property property name="ername"root/property property name="ssword"ouxingning/property mapping resource="com/ouxingning/hibernate/l"/ /session-factory/hibernate-configuration XlAXJyC
0j.q$iSm
;6\QJ%$c
step7: 8vj fXYP
创建Hibernate的业务逻辑va,供Struts的Action调用,代码如下: 7Q^;LZ
gQjM_Ysvs
package bernate;/** * pTitle: articlesManage project/p * * pDescription: manage articles/p * * pCopyright: Copyright (c) 2005/p * * pCompany: /p * * @author ouxingning * @version 1.0 */import bernate.*;import g.*;import te;import il.*;import tityArticle;public class BusinessService { private static SessionFactory sessionFactory; static { //Create the SessionFactory try { sessionFactory = new Configuration().configure(). buildSessionFactory(); } catch (Exception ex) { intStackTrace(); } } //find all instances of EntityArticle public List findAllArticles() { List articles = new ArrayList(); Session session = enSession(); Transaction tx = ginTransaction(); articles = eateQuery("from EntityArticle").list(); mit(); ose(); return articles; } //save an persistent instance of EntityAnticle public void saveArticle(EntityArticle article) { Session session = enSession(); Transaction tx = ginTransaction(); EntityArticle myarticle = new EntityArticle(); tTitle(tTitle()); tContent(tContent()); tWriteDate(tWriteDate()); tRemark(tRemark()); ve(myarticle); mit(); ose(); } //find an instance of EntityArticle by its indentifier property public EntityArticle findArticleByID(Long id) { Session session = enSession(); Transaction tx = ginTransaction(); EntityArticle ea = (EntityArticle) ad(ass, id); mit(); ose(); return ea; } //delete the instance of EntityArticle public void deleteArticle(EntityArticle ea) { Session session = enSession(); Transaction tx = ginTransaction(); lete(ea); mit(); ose(); } //update the instance of EntityArticle public void updateArticle(EntityArticle ea) { Session session = enSession(); Transaction tx = ginTransaction(); date(ea); mit(); ose(); } public BusinessService() { } public static void main(String args[]) { BusinessService bs = new BusinessService(); EntityArticle ea = new EntityArticle(); /* tTitle("欧兴宁'title"); tContent("欧兴宁的内容"); tRemark("欧兴宁的备注"); //change the type te to te te ud = new te(); tWriteDate(new te(tTime())); veArticle(ea); intln("good"); List results = ndAllArticles(); for(int i=0;ze();i++){ ea = (EntityArticle)t(i); int(tId() + "\t"); int(tTitle() + "\t"); int(tContent() + "\t"); intln(tWriteDate()); }*/ for (int i = 0; i 9; i++) { Long id = new Long(i); ea = ndArticleByID(id); int(tId() + "::"); int(tTitle() + "\t"); int(tWriteDate() + "\t"); intln(tContent()); } intln("end"); }} wh2 /otS
,\SV@PwP(H
qv^??/H\
step8: d]Bq
创建用于显示列表的表现层文件p,代码如下: ]:gF1LLq
HwL5S\kj/
%@taglib uri="/WEB-INF/d" prefix="tiles"%%@taglib uri="/WEB-INF/d" prefix="nested"%%@taglib uri="/WEB-INF/d" prefix="logic"%%@taglib uri="/WEB-INF/d" prefix="temp虽然承重量不如大型塑料袋late"%%@taglib uri="/WEB-INF/d" prefix="bean"%%@taglib uri="/WEB-INF/d" prefix="html"%!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"""%@page contentType="text/html; charset=GBK"%%@page import="bernate.*"%%@page import="il.*"%html:html locale="true"head meta http-equiv="Content-Type" content="text/html; charset=gb2312"title文章列表/title html:base//headbody 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="tityArticle" 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 lh[}!t@,
Jy!ky6;!
step9: TPB_\A2H
创建用于显示每篇文章内容的表现层文件p,代码如下: 6h6
7E]]= XPf
%@taglib uri="/WEB-INF/d" prefix="tiles"%%@taglib uri="/WEB-INF/d" prefix="nested"%%@taglib uri="/WEB-INF/d" prefix="logic"%%@taglib uri="/WEB-INF/d" prefix="template"%%@taglib uri="/WEB-INF/d" prefix="bean"%%@taglib uri="/WEB-INF/d" prefix="html"%!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"""%@page contentType="text/html; charset=GBK"%%@page import="bernate.*"%%@page import="il.*"%html:html locale="true"head meta http-equiv="Content-Type" content="text/html; charset=gb2312"titlebean:write name="article" property="title"//title html:base//headbody table width="780" border="0" align="center" tr td align="center" valign="middle" h1bean: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 + aG '
|Y C eY
P .P zzb
step10: "s!5 @Az
创建用于提交文章的表现层文件p,代码如下: -q%~ 0Dc
)}Gu @7,
%@taglib uri="/WEB-INF/d" prefix="tiles"%%@taglib uri="/WEB-INF/d" prefix="nested"%%@taglib uri="/WEB-INF/d" prefix="logic"%%@taglib uri="/WEB-INF/d" prefix="template"%%@taglib uri="/WEB-INF/d" prefix="bean"%%@taglib uri="/WEB-INF/d" prefix="html"%!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"""%@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//headbody 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 /Pw/wN'%
LPZ5w]v0;_
e.2K-iNv
step11: E3aT]q8N
创建va,代码如下: v0,Mu-3w=
e%6P7R%g$
package ruts;import tionForm;import tionErrors;import tionMapping;import tpServletRequest;import ruts.*;import tion.*;public class ArticleActionForm extends ActionForm { private String content; private String title; public String getContent() { return content; } public void setContent(String content) { ntent = content; } public void setTitle(String title) { tle = title; } public String getTitle() { return title; } public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest) { ActionErrors errors = new ActionErrors(); if ((title == null) || (ngth() 1)) { d("title", new ActionError("tle")); } if ((content == null) || (ngth() 1)) { d("content", new ActionError("ntent")); } return errors; } public void reset(ActionMapping actionMapping, HttpServletRequest servletRequest) { content = null; title = null; }} sB!:9@~L
YQYM!t,
step12: + Wn7!9
创建va,代码如下: '!5AA`\
\B+ G
package ruts;import tionMapping;import tionForm;import tpServletRequest;import tpServletResponse;import tionForward;import tion;import bernate.*;import ruts.*;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; tTitle(tTitle()); tContent(tContent()); //change te to te te ud = new te(); tWriteDate(new te(tTime())); //persistant the instance of EntityArticle veArticle(ea); return ndForward("success"); }} e#V~5!~
*lAj cC#V
step13: ]6W?b+7
创建va,代码如下: ] 'H?#5i
3N}MyVJii
package ruts;import tionMapping;import tionForm;import tpServletRequest;import tpServletResponse;import tionForward;import tion;import il.*;import bernate.*;public class ArticleListAction extends Action { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest servletRequest, HttpServletResponse servletResponse) { BusinessService bs = new BusinessService(); List articles = ndAllArticles(); tAttribute("articles",articles); return ndForward("showArticles"); }} zC4i*nyX?
M_'N@LP
step14: ::{%+,
创建va,代码如下: y8k S\];
gq*1:Euwb
package ruts;import tionMapping;import tionForm;import tpServletRequest;import tpServletResponse;import tionForward;import tion;import bernate.*;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 = ndArticleByID(new Long(tParameter("articleID"))); tAttribute("article", ea); return ndForward("showArticle"); }} dm(cK4]vQ
D;XrR2m
step15: ){VjQ9c6
创建个名叫va的Filter用于处理中文乱码问题,代码如下: sdD-Vi[
r!VD=G9@
package ruts;import rvlet.*;import tp.*;import .*;import il.*;public class SetCharacterEncodingFilter extends HttpServlet implements Filter { private FilterConfig filterConfig; //Handle the passed-in FilterConfig public void init(FilterConfig filterConfig) throws ServletException { lterConfig = filterConfig; } //Process the request/response pair public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { try { tCharacterEncoding("GBK"); Filter(request, response); } catch (ServletException sx) { tServletContext().log(tMessage()); } catch (IOException iox) { tServletContext().log(tMessage()); } } //Clean up resources public void destroy() { }} %a)Gl(*+]
paWC^Gwe
step16: *C]8cqP f
JBuilder自动生成的l文件,如下: BQ#Y}p.[
]^JqVe A
?xml version="1.0" encoding="UTF-8"?web-app xmlns="" xmlns:xsi="" xsi:schemaLocation=" " version="2.4" display-namemyArticles/display-name jsp-config taglib taglib-uri/WEB-INF/d/taglib-uri taglib-location/WEB-INF/d/taglib-location /taglib taglib taglib-uri/WEB-INF/d/taglib-uri taglib-location/WEB-INF/d/taglib-location /taglib taglib taglib-uri/WEB-INF/d/taglib-uri taglib-location/WEB-INF/d/taglib-location /taglib taglib taglib-uri/WEB-INF/d/taglib-uri taglib-location/WEB-INF/d/taglib-location /taglib taglib taglib-uri/WEB-INF/d/taglib-uri taglib-location/WEB-INF/d/taglib-location /taglib taglib taglib-uri/WEB-INF/d/taglib-uri taglib-location/WEB-INF/d/taglib-location /taglib /jsp-config servlet servlet-nameaction/servlet-name tionServlet/servlet-class init-param param-nameconfig/param-name param-value/WEB-INF/l/param-value /init-param init-param param-namedebug/param-name param-value2/param-value /init-param init-param param-nameapplication/param-name param-valueApplicationResources/param-value /init-param load-on-startup2/load-on-startup /servlet servlet-mapping servlet-nameaction/servlet-name url-pattern*.do/url-pattern /servlet-mapping filter filter-namesetcharacterencodingfilter/filter-name tCharacterEncodingFilter/filter-class /filter filter-mapping filter-namesetcharacterencodingfilter/filter-name url-pattern/*/url-pattern dispatcherREQUEST/dispatcher dispatcherFORWARD/dispatcher dispatcherINCLUDE/dispatcher dispatcherERROR/dispatcher /filter-mapping servlet AK2
\!}7jz*u
step17: ESFH\ tgk
JBuilder自动生成的l文件,如下: Kz=PmgBS
?xml version="1.0" encoding="UTF-8"?!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" ""struts-config form-beans form-bean name="articleActionForm" type="ticleActionForm" / /form-beans global-forwards forward contextRelative="true" name="articles" path="/" redirect="true" / forward contextRelative="true" name="showArticle" path="/" / /global-forwards action-mappings action input="/pages/p" path="/articleListAction" scope="request" type="ticleListAction" forward contextRelative="true" name="showArticles" path="/pages/p" redirect="false" / /action action input="/pages/p" name="articleActionForm" path="/writeArticleAction" scope="request" type="iteArticleAction" forward name="success" path="/p" / /action action input="/pages/p" path="/showArticleAction" scope="request" type="owArticleAction" forward contextRelative="true" name="showArticle" path="/pages/p" / /action /action-mappings/struts-config
查看本文来源
双鸭山白癜风医院排名阜阳治疗白癜风专业医院保山白癜风好的医院-
-
逍遥智能门锁火了智能窗会成为下一个行业爆点么
智能门锁火了,智能窗会成为下一个行业爆点么?门窗对于家庭...
2020-09-30 | 民生法规
-
-
恩惠冠军赛傅园慧仰创世界最佳张雨霏余贺新各添
冠军赛傅园慧仰创世界最佳 张雨霏余贺新各添金傅园慧激情庆...
2020-09-16 | 民生法规
-
-
传闻意媒米兰前锋巴卡冬歇期可能加盟巴黎搭配
【传闻】意媒:米兰前锋巴卡冬歇期可能加盟巴黎意大利媒体...
2020-05-31 | 民生法规
-
-
科维亚特签约法拉利鱼雷与维特尔成队友搭配
科维亚特签约法拉利 “鱼雷”与维特尔成队友丹尼尔-科维亚...
2020-05-29 | 民生法规
-
-
扬言要揍麦迪的男人他是詹皇的第一带刀侍卫搭配
扬言要揍麦迪的男人 他是詹皇的第一带刀侍卫扬言要揍麦迪的...
2020-05-29 | 民生法规
-
-
花边性感小精再展颓废风全裸上身太大胆图搭配
花边|性感小精再展颓废风!全裸上身太大胆(图)颓废性感 ...
2020-05-27 | 民生法规