說(shuō)明:

  這個(gè)手冊(cè)只是為初學(xué)者制作的環(huán)境配置和快速開(kāi)發(fā)的一些基本方法,為的是廣大愛(ài)好者能快速上手,少走我走過(guò)的彎路,里面沒(méi)有任何關(guān)于java模式和其他相關(guān)的說(shuō)明。本人水平有限,也沒(méi)有能力去討論關(guān)于模式設(shè)計(jì)和開(kāi)發(fā)細(xì)節(jié)的一些內(nèi)容。

?

?

  建議:

  如果你還不清楚struts和hibernate的一些基本原理,希望能先去了解一下這方面的相關(guān)內(nèi)容。

  推薦:

  Hibernate中文手冊(cè)》作者認(rèn)為要學(xué)Hibernate看這個(gè)就足夠了,里面幾乎包括了所有的細(xì)節(jié),不過(guò)可能不太適合快速入門(mén)。

  地址:http://www.hibernate.org/hib_docs/v3/reference/zh- cn/html_single/

  關(guān)于struts的資料就很多了,這里推薦一個(gè)可以下載一些入門(mén)教程的網(wǎng)站。

  地址:http://www.wnetw.com/jclub/index.jsp

  強(qiáng)烈建議入門(mén)的朋友先了解一下基本的原理!否則本文可能對(duì)你沒(méi)有任何幫助。

  相關(guān)工具下載:(注意版本)

  mysql5.0 http://www.mysql.org
  eclipse 3.1.1 http://www.eclipse.org
  myeclipse4.0.3 http://www.myeclipseide.com
  tomcat5.5

  安裝:

  關(guān)于tomcat和mysql的安裝就不多說(shuō)了,需要注意的是最好保證你的 jdk是1.5的版本,并配置好你的環(huán)境變量,不然可能會(huì)遇到一些問(wèn)題。

  把eclipse解開(kāi),再去安裝剛下載的myeclipse,在安裝的時(shí)候需要把路徑指定到剛才解開(kāi)的eclipse上,由于myeclipse是個(gè)收費(fèi)軟件,所以需要注冊(cè)。不過(guò)一般按照Chinese的習(xí)慣,去google一個(gè)注冊(cè)碼就可以了:}

  開(kāi)發(fā)環(huán)境部署:

  好了,現(xiàn)在保證你的mysql和tomcat服務(wù)能夠正常啟動(dòng),myeclipse能夠正常打開(kāi)(如果不能,可以去找一下相關(guān)的說(shuō)明或者給作者留言)。下面我們就要開(kāi)始真正的開(kāi)始部署一個(gè)傳說(shuō)中的tomcat+struts+hibernate+mysql結(jié)構(gòu)的工程了!(faint!前言就寫(xiě)的我好累)

  首先,在myeclipse里新建一個(gè)工程。在左邊的Package Exporler面版里點(diǎn)右鍵選擇new->project…

  在跳出菜單里選擇MyEclipse->J2EE Projects->Web Project。

  點(diǎn)擊next后進(jìn)入如下畫(huà)面:


  工程名為:test

  結(jié)束后點(diǎn)擊Finish。

  好了,如果成功的話你就會(huì)在 Package Exporler里看到一個(gè)新的test工程!現(xiàn)在我們先配置一下數(shù)據(jù)庫(kù)方面的東西。首先在你的mysql 里建立一個(gè)數(shù)據(jù)庫(kù)webases,再在里面新建一個(gè)表admin,里面三個(gè)字段分別為id,name,password其中id為自動(dòng)取值的主鍵(mysql具體的操作可以自己找資料,不是本文涉及范圍)。

  再回到myeclipse ,選中window->Open Perspective->Other…

  可以看到現(xiàn)在跳出一個(gè)名為Select Perspective的菜單,在里面選中MyEclipse Databases Exporler,可以看到現(xiàn)在到了下面的頁(yè)面。

  按以上圖示輸入相關(guān)字段后點(diǎn)擊Finish便建立了一個(gè)數(shù)據(jù)庫(kù)連接,在新出現(xiàn)的JDBC for Mysql上點(diǎn)右鍵,選擇Open connection…,確認(rèn)用戶名和密碼正確后點(diǎn)OK,如果一切順利的話你會(huì)看到下面的畫(huà)面:

  這說(shuō)明你已經(jīng)和數(shù)據(jù)庫(kù)建立了正確的連接。現(xiàn)在我們?cè)倩氐絯indow->Open Perspective- >Other…里的MyEclipse,也就是我們剛進(jìn)來(lái)的時(shí)候看到的畫(huà)面。

  右鍵點(diǎn)擊你剛建立的工程 test并選擇MyEclipse->Add struts Capabilities…在跳出的菜單里按照如下輸入并確定:

  好了,現(xiàn)在你已經(jīng)為你的工程增加了struts,接下來(lái)和上面一樣在右鍵工程后選擇MyEclipse- >Add Hibernate Capabilities…一路確定下來(lái)為你的工程添加Hibernate。(為方便起見(jiàn)我們?cè)谶x擇路徑時(shí)把HibernateSessionFactory.java放在了src/com下面,其實(shí)最好建立個(gè)單獨(dú)的目錄如 src/com/hibernate)

  為了更好的演示我們不建立通常的登陸頁(yè)面而是建立個(gè)注冊(cè)頁(yè)面。選擇 src目錄下的hibernate.cfg.xml文件。照如下填寫(xiě)并保存。這樣hibernate就為你建立了數(shù)據(jù)庫(kù)的連接池。

  下面我們?cè)龠x擇WebRoot/WEB-INF/struts-config.xml文件,在畫(huà)面中點(diǎn)擊右鍵選擇new- >Form, Action and JSP。如下填寫(xiě)

  再選擇JSP選項(xiàng),如下

  最后選擇Finish。

  再新建一個(gè)一個(gè)success.jsp的頁(yè)面,

  在剛才struts- config.xml文件里右鍵選擇addAdmin選擇Properties,在菜單里選擇Forwords,再點(diǎn)add,如下圖填寫(xiě)

  最后你的struts-config.xml就是下面這個(gè)樣子:


  下面我們轉(zhuǎn)到hibernate。換到剛才我們建立數(shù)據(jù)庫(kù)的頁(yè)面,選擇你的admin的表點(diǎn)右鍵選擇Create Hibernate Mapping。選擇好打包路徑后選擇Finish。如圖:

  在你剛才選擇的路徑下(我為方便是src/com/yourcompanyname/)下新建立的文件 AdminDAOFactory.java文件并輸入以下內(nèi)容:

package com.yourcompanyname;

import java.util.Iterator;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.hibernate.SessionFactory;

public class AdminDAOFactory {
?Session session;
?Transaction tx;
?public void add(Admin admin) throws HibernateException {
??/**
?? * Creation Date: 11-17-2005
?? * TODO Add a new admin user.
?? * @param An object of Admin
?? * @return void
?? * @author Coder Guo
?? */
??try {
???session = SessionFactory.currentSession();
???tx = session.beginTransaction();
???//Add a new admin
???session.save(admin);
???tx.commit ();
??}catch(HibernateException e){
???throw e;
??}finally{
???if (tx!=null) {
????tx.rollback();
???}
???SessionFactory.closeSession();
??}
?}
}

?再打開(kāi)com.yourcompany.struts.action下的AddAdminAction.java添加(其中如果有錯(cuò)誤選中好按ctrl+shift+o自動(dòng)添加包)

public class AddAdminAction extends Action {

?// --------------------------------------------------------- Instance Variables

?// --------------------------------------------------------- Methods

?/**
? * Method execute
? * @param mapping
? * @param form
? * @param request
? * @param response
? * @return ActionForward
? * @author Coder Guo
? */
?public ActionForward execute(
??ActionMapping mapping,
??ActionForm form,
??HttpServletRequest request,
??HttpServletResponse response) {
??AddAdminForm addAdminForm = (AddAdminForm) form;
??
??// TODO Add a new admin
??Admin admin = new Admin();
??admin.setName(addAdminForm.getName ());
??admin.setPassword(addAdminForm.getPassword ());
??AdminDAOFactory adminDAO = new AdminDAOFactory ();
??adminDAO.add(admin);
??
??return mapping.findForward("success");
?}

}

?再打開(kāi)com.yourcompanyname.struts.form下的AddAdminForm.java,修改(如果有錯(cuò)誤按照上面說(shuō)的方法導(dǎo)入包)
?public ActionErrors validate(
??ActionMapping mapping,
??HttpServletRequest request) {

??// TODO Auto-generated method stub
??ActionErrors errors = new ActionErrors();
??
??Session session = SessionFactory.currentSession();
??Transaction tx = session.beginTransaction ();
??Query query = session.createQuery("select admin from Admin as admin where admin.name = '" + this.name + "'");
??Iterator it = query.iterate ();
??if (it.hasNext()){
???errors.add ("addAdmin.err.name",new ActionMessage("form.addAdmin.err.name"));
??}
??tx.commit();
??SessionFactory.closeSession ();
??return errors;
?}

?public void reset(ActionMapping mapping, HttpServletRequest request) {

??// TODO Auto-generated method stub
??this.name=null;
??this.password=null;
?}

  再打開(kāi)com\yourcompanyname\struts下的ApplicationResource.properties在這里面添加錯(cuò)誤信息:

Form.addAdmin.err.name=err

  最后,(汗,好累啊-_-!)打開(kāi)addAdmin.jsp修改成如下:

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page language="java"%>
<%@ taglib uri="<%@ taglib uri="

<script language = "javascript">
<!--
function
check(){
?if (loginForm.userName.value == "" || loginForm.password.value == ""){
??alert("請(qǐng)輸入完整的信息!");
??loginForm.userName.focus();
??return false;
?}
}
//-->
</script>
?
?<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
? <head>
??? <html:base />
???
??? <title>login.jsp</title>
??? <link href="css/webcss.css" rel="stylesheet" type="text/css">
???
??? <meta http-equiv="pragma" content="no- cache">
??? <meta http-equiv="cache-control" content="no- cache">
??? <meta http-equiv="expires" content="0">???
??? <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
??? <meta http- equiv="description" content="This is my page">
? </head>
?

? <body>
? <center>
? ?<p>&nbsp;</p>
? ?<p>&nbsp;</p>
? ?<table width="300" border="0" cellpadding="0" cellspacing="0">
? ?<html:form action="/addAdmin" focus="name" method="GET">
??? ?<tr align="center" valign="middle">
????? ?<td colspan="2" class="typt_normal">新增管理員</td>
??? ?</tr>
??? ?<tr>
????? ?<td width="100" align="center" valign="middle" class="typt_normal">名稱: </td>
????? ?<td width="200" align="left"><html:text property="name" styleClass="text_s"/><html:errors property="addAdmin.err.name"/></td>
??? ?</tr>
??? ?<tr>
????? ?<td width="100" align="center" valign="middle" class="typt_normal">密碼: </td>
????? ?<td width="200" align="left"><html:password property="password" styleClass="text_s"/></td>
??? ?</tr>
??? ?<tr>?
????? ?<td colspan="2" align="center" valign="middle"><html:submit value="提交" onclick="return check ();"/><html:reset value="重置"></html:reset></td>
????? ?</tr>
?</html:form>
? ?</table>
?</center>
?</body>

</html:html>

  其中可以看到如何在struts的標(biāo)簽中使用javascript的方法。

  配置好myeclipse于tomcat的連接。在window->Preferences做如下設(shè)定:

  在項(xiàng)目文件點(diǎn)右鍵->“myeclipse”->“Add and remove project deployment”,如下圖:

  好了,我們的配置工作基本結(jié)束了,在myeclipse上開(kāi)啟tomcat服務(wù)

  現(xiàn)在打開(kāi)瀏覽器,輸入

  http://127.0.0.1:8080/test/addAdmin.jsp就可以看到你的jsp頁(yè)面了!

?