1. 環(huán)境說明
安裝Eclipse和安裝MyEclipse組件的過程在這里不進(jìn)行介紹。可以參考其它資料完成Eclipse環(huán)境的安裝與資源的配置。
接下來的篇幅將給出一個在MyEclipse開發(fā)環(huán)境下的一個Web工程實例。說明在MyEclipse的集成開發(fā)環(huán)境下,如何利用Struts進(jìn)行Web工程開發(fā)。
例子工程的環(huán)境:
Windows 2000 Professional或者更高的版本。
J2SDK 5.0
Apache Tomcat 5.0
MySQL 4.0.14b
Eclipse-SDK-3.1
MyEclipse 4.0
SQLyog407(可選)
2. 例子工程說明
本例子是利用struts架構(gòu),實現(xiàn)用戶logon的Web工程。在這個工程中,用戶可以訪問三個頁面,index.jsp、logon.jsp、menu.jsp。他們的關(guān)系如下圖所示:
?
其中,左上角的方框代表struts結(jié)構(gòu)中/WEB-INF/struts-config.xml中定義的,<global-forwards>,也就是在整個Web工程中,只要有l(wèi)ogon的動作發(fā)生,都會使畫面轉(zhuǎn)移到logon.jsp。那么處理logon.jsp畫面的formbeen是上圖上放右側(cè)的模塊表示的formbean來完成——logonForm。
LogonFrom處理后會有兩個結(jié)果,“success”的時候,畫面會轉(zhuǎn)移到menu.jsp,失敗的話,回到logon畫面。
在logon畫面,用戶需要輸入用戶名和密碼,點擊submit,進(jìn)行登錄認(rèn)證。輸入內(nèi)容的檢測是在logonForm的bean中檢查。判斷操作在logonAction的bean中完成,在logonAction的bean中,需要訪問MySql數(shù)據(jù)庫的Account表格,進(jìn)行用戶和密碼的查詢。查詢成功的話,證明用戶認(rèn)證通過。
3. 建立工程
3.1 v創(chuàng)建新的Web Project
啟動MyEclipse,通過Wizard,建立一個Web工程。如下圖:
?
點擊project后,MyEclipse彈出工程的對話框,我們在所羅列的工程中選中MyEclipse下面的J2EE Projects的Web Project。如下圖所示:
?
在Wizard的下一頁,必要的輸入信息是Project Name、Context root URL。最后點擊finish,一個空的WebProject就已經(jīng)建立起來了
3.2 加載Struts
在新創(chuàng)建的Web Project中加載struts。
在MyEclipse集成開發(fā)環(huán)境下,已經(jīng)集成了struts開發(fā)的環(huán)境,用戶可以根據(jù)自己的實際需要,加載struts的環(huán)境。加載過程如下圖:
?
右鍵點擊剛剛創(chuàng)建好的工程,點擊MyEclipse屬性,在擴(kuò)展的右鍵菜單里面,選擇Add Struts Capabilities。
MyEclipse集成環(huán)境就會自動將Struts所需要的目錄結(jié)構(gòu)進(jìn)行創(chuàng)建,并將需要的環(huán)境資源自動引用到相應(yīng)的目錄中去。
我們還要對自動生成的Struts進(jìn)行修正,首先,修改WEB-INF/web.xml 將<web-app>標(biāo)簽中的屬性刪除。<web-app XXXXXXXXXXXXXXX> -> <web-app>
其次要添加本工程的標(biāo)簽定義庫,添加<taglib></taglib>
<taglib>
??? <taglib-uri>/WEB-INF/app.tld</taglib-uri>
??? <taglib-location>/WEB-INF/app.tld</taglib-location>
? </taglib>
? <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>
4. 完善工程
4.1 添加index畫面
在加載完Struts結(jié)構(gòu)之后,就可以在這個工程中添加內(nèi)容了。我們可以添加一個畫面JSP。添加JSP很簡單,點擊工程的右鍵,添加JSP。Wizard會彈出一個添加的對話框。如下圖:
?
在File Name欄中改變文件名稱,改成index.jsp把這個jsp作為Web工程的第一個畫面。
Template To Use 欄可以選擇第五項(選擇選擇其他項也可以)。
對于新生成的jsp文件進(jìn)行必要的修改。
Index.jsp文件:
<taglib>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ 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" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <head>
??? <title>My JSP 'index.jsp' starting page</title>
???
??? <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">
???
??? <!--
??? <link rel="stylesheet" type="text/css" href="styles.css">
??? -->
? </head>
?
? <body>
? <h3><bean:message key="index.heading"/></h3>
<html:link page="/logon.jsp"><bean:message key="index.logon"/></html:link>
</body>
</html>
其中藍(lán)色和橙色部分是修改的內(nèi)容,藍(lán)色部分是今后自動添加jsp文件必須修改的地方,讓這個頁面用到的tag都能在這個工程中定義的tag集合中找到。
橙色部分是畫面的主要顯示內(nèi)容。<h3></h3>的內(nèi)容是一段文本,內(nèi)容被struts結(jié)構(gòu)的靜態(tài)文本集合中的index.heading給替換掉了。這個文本的內(nèi)容可以在工程的src\com\yourcompany\struts\ApplicationResources.properties文件中找到。Struts結(jié)構(gòu)推薦用戶將頁面上的靜態(tài)文本用ApplicationResources的形式替換。這樣可以在大量的維護(hù)頁面文字時候,感到便捷很多,同時,也大大減輕了多國語言版本網(wǎng)頁的維護(hù)。
<html:link page="/logon.jsp">相當(dāng)于html語言中的<a herf=xxxxx>。這個tag是在/WEB-INF/struts-html.tld中可以找到并在顯示頁面的時候,被轉(zhuǎn)義成<a herf=xxxxx>
4.2 添加logon畫面
添加方法跟添加index畫面相同。修改內(nèi)容稍微有些差別。
Logon.jsp的內(nèi)容:
<taglib>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ 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" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
? <head>
??? <html:base />
???
??? <title>logon.jsp</title>
???
??? <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>
??? <html:form action="/logon.do" method="post"? focus="userName">
????? <table border="0">
??????? <tr>
????????? <td><bean:message key="prompt.username"/></td>
????????? <td><html:text property="userName" /></td>
??????? </tr>
??????? <tr>
????????? <td>Password:</td>
????????? <td><html:password property="password" /></td>
??????? </tr>
??????? <tr>
????????? <td colspan="2" align="center"><html:submit /></td>
??????? </tr>
????? </table>
??? </html:form>
? </body>
</html:html>
其中,藍(lán)色部分是引用本工程的tag標(biāo)示庫,紅色的部分是表單屬性名稱的修改,和指定action動作的名稱。
4.3 修改WEB-INF/struts-config.xml
畫面上出現(xiàn)了form,那么根據(jù)struts的結(jié)構(gòu)要求,就必須在WEB-INF/struts-config.xml中明確這個form的formbean(表單內(nèi)容校驗的java class)是什么。執(zhí)行這個form的action(表單執(zhí)行的內(nèi)部邏輯)是什么,以及action的結(jié)果會產(chǎn)生怎樣的畫面遷移。這些都是在WEB-INF/struts-config.xml中定義的。也就是標(biāo)準(zhǔn)的MVC架構(gòu)所要求的。
<taglib>
<struts-config>
? <form-beans >
??? <form-bean name="logonForm" type="com.yourcompany.forms.
LogonForm" />
? </form-beans>
? <global-forwards >
??? <forward name="logon" path="/logon.jsp" />
? </global-forwards>
? <action-mappings >
??? <action
????? path="/logon"
????? type="com.yourcompany.actions.LogonAction"
????? name="logonForm"
????? scope="request"
????? input="/logon.jsp">
????? <forward name="success" path="/menu.jsp" />
????? <forward name="fails" path="/logon.jsp" />
??? </action>
? </action-mappings>
? <message-resources parameter="com.yourcompany.struts.
ApplicationResources" />
</struts-config>
其中<action>部分是說明action的屬性。
Path 指定Action處理的URL
Type 指定Action的類名
Name 指定Action主力的ActionForm名,與<form-beans >元素的name屬性匹配。
Scope 指定ActionForm存在的范圍
Input 指定包含客戶提交表單的網(wǎng)頁,如果ActionForm的Validate方法返回錯誤,則因該把用戶請求轉(zhuǎn)發(fā)到這個網(wǎng)頁。
Validate 如果取值為true,則表示ActionServlet應(yīng)該調(diào)用ActionForm的validate方法
Forward 就是Action的execute方法執(zhí)行完畢后,把客戶請求在轉(zhuǎn)發(fā)給相應(yīng)的頁面。
4.4 添加formbean和actionbean
添加方法跟JSP相同,但是在選擇superclass的時候,formbean要選擇ActionForm作為類的父類。Actionbean的父類是Action
下面是各自的代碼
LogonForm.java文件內(nèi)容:
<taglib>
package com.yourcompany.forms;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class LogonForm extends ActionForm {
private static final long serialVersionUID
= 7322786881443789688L;
// ------------------------------
--------------------------- Instance Variables
??? private String username = null;
??? private String password = null;
// -------------------------
-------------------------------- Methods
??? public String getUserName() {
return (this.username);
??? }
??? public void setUserName(String username) {
??????? this.username = username;
??? }
??? public String getPassword() {
return (this.password);
??? }
??? public void setPassword(String password) {
??????? this.password = password;
??? }
public void reset(ActionMapping mapping,
HttpServletRequest request) {
this.password = null;
this.username = null;
}
}
LogonAction.java文件:
package com.yourcompany.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.yourcompany.forms.LogonForm;
public class LogonAction extends Action {
public ActionForward execute(ActionMapping
mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
String userName = null;
String password = null;
if (form != null) {
userName = ((LogonForm) form).getUserName();
password = ((LogonForm) form).getPassword();
}
if(userName.equals(“test1”) && password.
equals(“test1”)){
return (mapping.findForward("success"));
}
else{
return (mapping.findForward("fails"));
}
}
}
4.5 添加menu畫面
與添加index畫面的方法相同。下面是menu.jsp文件的內(nèi)容
<taglib>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ 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" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
? <head>
??? <html:base />
??????? <title>menu.jsp</title>
??????? <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>
? <h3><bean:message key="menu.message"/></h3>
? </body>
</html:html>
5. 調(diào)試工程
如果本地機(jī)器已經(jīng)安裝了Tomcat5,那么可以在MyEclilpse的環(huán)境下調(diào)試工程了。
指定Tomcat5 的web application service 如下圖:
?
將Enable選項打開,并且指定Tomcat的安裝目錄。
配置目前的工程到Tomcat中去。
?
點選工具欄上的被紅線圈出的按鈕
在彈出來的對話框中選擇,我們創(chuàng)建的工程,和添加Tomcat5 的web application service
?
然后就可以按下工具欄上的啟動服務(wù)按鈕,調(diào)試這個Web工程了。
?
每一次改動工程中的文件后,要想看看改動后的效果,那么就在配置工程中,重新發(fā)布這個工程到tomecat5去。
6. Tomcat下如何配置mysql的數(shù)據(jù)庫連接池
6.1 配置server.xml
配置Tomcat的server.xml文件,路徑:【TOMCAT_HOME】\common\lib下的server.xml文件在</host>之前加入以下內(nèi)容以添加JNDI數(shù)據(jù)源:
<taglib>
<Context path="/DBTest" docBase="DBTest"
??????? debug="5" reloadable="true" crossContext="true">
? <Logger className="org.apache.catalina.logger.FileLogger"
???????????? prefix="localhost_DBTest_log." suffix=".txt"
???????????? timestamp="true"/>
? <Resource name="jdbc/TestDB"
?????????????? auth="Container"
?????????????? type="javax.sql.DataSource"/>
? <ResourceParams name="jdbc/TestDB">
??? <parameter>
????? <name>factory</name>
??? <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
??? </parameter>
??? <!-- Maximum number of dB connections in pool. Make sure you
???????? configure your mysqld max_connections large enough to handle
???????? all of your db connections. Set to 0 for no limit.
???????? -->
??? <parameter>
????? <name>maxActive</name>
????? <value>100</value>
??? </parameter>
??? <!-- Maximum number of idle dB connections to retain in pool.
???????? Set to 0 for no limit.
???????? -->
??? <parameter>
????? <name>maxIdle</name>
????? <value>30</value>
??? </parameter>
??? <!-- Maximum time to wait for a dB connection to become available
???????? in ms, in this example 10 seconds. An Exception is thrown if
???????? this timeout is exceeded.? Set to -1 to wait indefinitely.
???????? -->
??? <parameter>
????? <name>maxWait</name>
????? <value>10000</value>
??? </parameter>
??? <!-- MySQL dB username and password for dB connections? -->
??? <parameter>
???? <name>username</name>
???? <value>root</value>
??? </parameter>
??? <parameter>
???? <name>password</name>
???? <value> </value>
??? </parameter>
??? <!-- Class name for mm.mysql JDBC driver -->
??? <parameter>
?????? <name>driverClassName</name>
?????? <value>org.gjt.mm.mysql.Driver</value>
??? </parameter>
??? <!-- The JDBC connection url for connecting to your MySQL dB.
???????? The autoReconnect=true argument to the url makes sure that the
???????? mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
???????? connection.? mysqld by default closes idle connections after 8 hours.
???????? -->
??? <parameter>
????? <name>url</name> <value>jdbc:mysql://192.168.0.208:3306
/db_test_account?autoReconnect=true</value>
??? </parameter>
? </ResourceParams>
</Context>
注意:
*其中藍(lán)色字體表示你這個應(yīng)用的路徑和別名,也就是你訪問自己配置的這個web站點的名字,注意區(qū)分大小寫,必須一致,否則系統(tǒng)無法正常運(yùn)行(例:http://localhost:8080/DBTest)
*其中紅色字體表示數(shù)據(jù)源的名字,注意將會被web.xml和你訪問數(shù)據(jù)庫的程序調(diào)用
6.2 配置web.xml
配置Web用程序的web.xml文件
<taglib>
<?xml version="1.0" encoding="ISO-8859-1"?>
??? <!DOCTYPE web-app PUBLIC
??? "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
??? "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
? <description>MySQL Test App</description>
? <resource-ref>
????? <description>DB Connection</description>
????? <res-ref-name>jdbc/TestDB</res-ref-name>
????? <res-type>javax.sql.DataSource</res-type>
????? <res-auth>Container</res-auth>
? </resource-ref>
</web-app>
6.3 訪問數(shù)據(jù)庫的程序片段
<taglib>
package swt.db.DBUtility;
import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class DBTest {
? String foo = "Not Connected";
? int bar = -1;
????
? public void init() {
??? try{
????? Context ctx = new InitialContext();
????? if(ctx == null )?
????????? throw new Exception("Boom - No Context");
????? DataSource ds =?
??????????? (DataSource)ctx.lookup(
?????????????? "java:comp/env/jdbc/TestDB");
????? if (ds != null) {
??????? Connection conn = ds.getConnection();?????
??????? if(conn != null)? {
??????????? foo = "Got Connection "+conn.toString();
??????????? Statement stmt = conn.createStatement();
??????????? ResultSet rst =?
??????????????? stmt.executeQuery(
????????????????? " select UserName from t_account ");
??????????? if(rst.next()) {
?????????????? foo=rst.getString(1);
?????????????? bar=208;
??????????? }
??????????? conn.close();
??????? }
????? }
??? }catch(Exception e) {
????? e.printStackTrace();
??? }
}
public String getFoo() { return foo; }
public int getBar() { return bar;}
}
6.4 Jsp頁面(index.jsp)
<taglib>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import ="swt.db.DBUtility.*" %>
<html>
? <head>
??? <title>DB Test</title>
? </head>
? <body>
? <%
??? DBTest tst = new DBTest();
??? tst.init();
? %>
? <h2>Results</h2>
??? Foo <%= tst.getFoo() %><br>
??? Bar <%= tst.getBar() %>
? </body>
</html>
啟動Tomcat在瀏覽器上輸入http://localhost:8080/DBTest
備注:
連接池配置(Database?Connection?Pool?(DBCP)?Configurations)
DBCP使用的是Jakarta-Commons?Database?Connection?Pool?要使用連接池需要如下的組件即jar文件
Jakarta-Commons?DBCP?1.1?對應(yīng)commons-dbcp-1.1.jar。
Jakarta-Commons?Collections?2.0?對應(yīng)commons-collections.jar。
Jakarta-Commons?Pool?1.1?對應(yīng)commons-pool-1.1.jar。
這三個jar文件要與你的JDBC驅(qū)動程序一起放到【TOMCAT_HOME】\common\lib目錄下以便讓tomcat和你的web應(yīng)用都能夠找到。
7. Tomcat5.0下配置Hibernate3.0應(yīng)用
7.1 在Tomcat下建立數(shù)據(jù)庫連接池,如6中所示
7.2 在Struts應(yīng)用中添加Hibernate3.0支持
?
?
?
注意:hibernate.cfg.xml文件一定要存放到跟目錄下,默認(rèn)的也就是/web應(yīng)用/src,這個部署這個應(yīng)用的時候hibernate.cfg.xml才會出現(xiàn)在classes目錄下,也就是hibernate存放配置文件的默認(rèn)錄入下.
?
由于我們采用Tomcat提供的數(shù)據(jù)庫連接池,所以這里我們將是用自己創(chuàng)建的SessionFactory類。點擊完成MyEclipse會自動把Hibernate所需的的類庫加入到當(dāng)前應(yīng)用中。接下來就是配置Hibernate連接數(shù)據(jù)庫的所需的參數(shù),以及性能參數(shù)(可選)。
?
既然我們選用應(yīng)用服務(wù)器所提供的數(shù)據(jù)庫連接池,那么在這里我們只須要指定數(shù)據(jù)源的名字:java:comp/env/jdbc/TestDB,其中jdbc/TestDB就是我們在Tomcat中配置的數(shù)據(jù)源,也就是我們上面提到的jdbc/TestDB,資源名稱一定要匹配。其他的參數(shù)由于已經(jīng)在Tomcat中配置過了,所以在這里就不用配置了,Dialect一定要指定跟我們數(shù)據(jù)庫匹配的語言。 既然我們選用應(yīng)用服務(wù)器所提供的數(shù)據(jù)庫連接池,那么在這里我們只須要指定數(shù)據(jù)源的名字:java:comp/env/jdbc/TestDB,其中jdbc/TestDB就是我們在Tomcat中配置的數(shù)據(jù)源,也就是我們上面提到的jdbc/TestDB,資源名稱一定要匹配。其他的參數(shù)由于已經(jīng)在Tomcat中配置過了,所以在這里就不用配置了,Dialect一定要指定跟我們數(shù)據(jù)庫匹配的語言。
?
我們可以在這里配置Hibernate一些調(diào)整性能的參數(shù)(針對不同的數(shù)據(jù)庫有些屬性可能無效)。
?
在這里我們設(shè)置show_sql為true,這樣在開發(fā)調(diào)試過程成控制臺可以打印真正在數(shù)據(jù)庫端執(zhí)行的sql語句便于查找問題。其他一些屬性可以參閱http://www.hibernate.org。
到這里Hibernate的配置已經(jīng)基本完成,下面創(chuàng)建SessionFactory用來和數(shù)據(jù)庫進(jìn)行交互(Hibernate官方文檔提供)。
package com.db;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
??? private static Log log =
LogFactory.getLog(HibernateUtil.class);
??? private static final SessionFactory sessionFactory;
??? static {
??????? try {
??????????? sessionFactory = new Configuration().configure().
buildSessionFactory();
??????? } catch (Throwable ex) {
??????????? log.error("Initial SessionFactory
creation failed.", ex);
??????????? throw new ExceptionInInitializerError(ex);
??????? }
??? }
??? public static final ThreadLocal session = new ThreadLocal();
??? public static Session currentSession()? {
??????? Session s = (Session) session.get();
??????? if (s == null) {
??????????? s = sessionFactory.openSession();
??????????? session.set(s);
??????? }
??????? return s;
??? }
??? public static void closeSession() {
??????? Session s = (Session) session.get();
??????? if (s != null)
??????????? s.close();
??????? session.set(null);
??? }
}
后面將會提到如何使用HibernateUtil,下面建立我們所需的數(shù)據(jù)庫
(略)我們可以使用208上的db_test_account這個數(shù)據(jù)庫中的表message來測試我們的Hibernate配置是否成功。數(shù)據(jù)庫樣例:
建表語句:
CREATE TABLE `message` (
`Id` varchar(50) NOT NULL default '0',
`text` varchar(50) default NULL,
`nextMessage` int(4) default NULL,
PRIMARY KEY (`Id`)
) TYPE=MyISAM
創(chuàng)建O/R Mapping:
?
點擊Edit
?
點擊New添加MySQL的驅(qū)動,保存
?
激活Database Explorer,保存。
選擇Database Explorer,創(chuàng)建數(shù)據(jù)庫鏈接:
點擊創(chuàng)建新的數(shù)據(jù)庫,添加所需必要的參數(shù)
?
保存,然后右鍵點擊該數(shù)據(jù)庫選擇open database,測試是否配置成功,如果不能連接查看該連接的配置參數(shù)。
?
?
點擊完成后MyEclipse會自動生成POJO和Map文件,并更新Hibernate的配置文件(主要是加載Map文件)。ID Generator選項可以根據(jù)你的需要進(jìn)行選擇,具體含義請參閱hibernate官方文檔。下面建立一個測試用的jsp頁面來看看Hibernate是否好用。
//MyJsp.jsp
<%@ page language="java" import="com.db.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+":
//"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
? <head>
??? <base href="<%=basePath%>">
???
??? <title>My JSP 'MyJsp.jsp' starting page</title>
???
??? <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">
???
??? <!--
??? <link rel="stylesheet" type="text/css" href="styles.css">
??? -->
? </head>
?
? <body>
??? <%???
org.hibernate.Session s = HibernateUtil.currentSession();
String hql = " from Message where text='b'";
try {
org.hibernate.Query query = s.createQuery(hql);
java.util.List msgList = query.list();
hello.Message msg = (hello.Message) msgList.get(0);
out.println(msg.getId());
out.println(msg.getText());
out.println(msg.getNextmessage());
} catch (org.hibernate.HibernateException e) {
e.printStackTrace();
}
HibernateUtil.closeSession();
??? %>
? </body>
</html>
正常的結(jié)果如下:
?