解決辦法:將tomcat5.5\work\Catalina\localhost\peam\SESSIONS.ser刪除。如果正常關(guān)閉服務(wù)端,該文件是自動(dòng)刪除的。
分析:EOFException表示輸入過(guò)程中意外地到達(dá)文件尾或流尾的信號(hào),導(dǎo)致從session中獲取數(shù)據(jù)失敗。異常是tomcat本身的問(wèn)題,由于tomcat上次非正常關(guān)閉時(shí)有一些活動(dòng)session被持久化(表現(xiàn)為一些臨時(shí)文件),在重啟時(shí),tomcat嘗試去恢復(fù)這些session的持久化數(shù)據(jù)但又讀取失敗造成的。此異常不影響系統(tǒng)的使用。
解決辦法:將tomcat5.5\work\Catalina\localhost\peam\SESSIONS.ser刪除。如果正常關(guān)閉服務(wù)端,該文件是自動(dòng)刪除的。 當(dāng)增加Hibernate Capabilites后增加Struts Capabilites,運(yùn)行項(xiàng)目時(shí),控制臺(tái)報(bào)錯(cuò)信息:
/----------------------------------------------org.apache.commons.collections.SequencedHashMap ...... /---------------------------------------------- 解決方案: 下載commons-beanutils-1.7.0.zip; 將其中commons-beanutils.jar文件替換Tomcat6.0下WEB-INF/lib/commons-beanutils-1.7; 解決問(wèn)題. 這個(gè)錯(cuò)誤可能是myeclipse6.0版本的一個(gè)問(wèn)題,就是在整合web層和struts層出現(xiàn)的問(wèn)題 解決方法如下: 1)下載6.0.1版本的myeclipse開(kāi)發(fā) 2)下載最新的org.apache.commons.collections,講原來(lái)的去掉就行了,然后講最新的加進(jìn)去 <html:messages> 例如: Action方法中: Action的調(diào)用的方法,可以寫真Action實(shí)現(xiàn)類的父類 BaseDispatchAction 中: public ActionMessages saveMessage(HttpServletRequest request, String key) { protected ActionMessages saveMessage(ActionMessages messages, messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(key)); 頁(yè)面: <html:messages id="msg" message="true"><bean:write name="msg"/></html:messages> <html:errors> 如果Action中這樣設(shè)定(false),頁(yè)面的提示信息將不從資源文件里讀取: 源碼下載:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2857703 1. 準(zhǔn)備工具:MyEclipse 6.0.1 GA、mysql-connector-java-5.0.4-bin.jar、MySql GUI Tools 5.0(便于管理MySql數(shù)據(jù)庫(kù),不是必須) 環(huán)境:Tomcat 5.5、MySql 5.0 1.1. 新建工程 操作:[Menu] File/New/Web Project 工程名:login 2. Struts 部分
2.2. 創(chuàng)建 ActionForm 類 操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Form 類名:LoginForm 在 “Form Properties” 選項(xiàng)卡為 loginForm 新增兩個(gè)屬性:username、password; 在 “JSP” 選項(xiàng)卡鉤選 “Create JSP form” 選項(xiàng),將新建路徑改為 “/login.jsp”(login.jsp文件將被自動(dòng)創(chuàng)建)。 2.3. 創(chuàng)建 Action 類 操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Action 類名:LoginAction 在 “Form” 選項(xiàng)卡的 “Name” 項(xiàng)選擇 “loginForm”,”Input Source” 項(xiàng)輸入 “/login.jsp”。 2.4. 創(chuàng)建 index.jsp 文件 如果沒(méi)有,創(chuàng)建 index.jsp 文件,并添加一個(gè)指向 login.jsp 的鏈接:<a href=”login.jsp”>Login</a>。 2.5. 創(chuàng)建Forword類 操作:[Ctrl+N] MyEclipse/Web-Struts/Struts 1.2 Forword 類名:indexForword “Name” 項(xiàng)輸入 “indexForword” ,”Path” 項(xiàng)輸入 “/index.jsp” 。 2.6. 修改 LoginAction.java 文件 修改 LoginAction 類的 execute 方法: public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, 2.7. 修改 login.jsp 文件 修改 <html:form> 標(biāo)簽:<html:form action=”/login”>。 2.8. 測(cè)試 操作:[Menu] Run/Run,選擇 MyEclipse Server Application 方式運(yùn)行 (要正常執(zhí)行Run操作,需先安裝 Tomcat5.5 。) 點(diǎn)擊 index.jsp 頁(yè)面的 “Login” 鏈接,跳轉(zhuǎn)到 login.jsp 頁(yè)面。在 login.jsp 頁(yè)面輸入 “test/test”,應(yīng)該會(huì)登錄成功,然后跳轉(zhuǎn)到 index.jsp 頁(yè)面;輸入 “test/123″ ,應(yīng)該保持在 login.jsp 頁(yè)面。 如果測(cè)試成功,證明 Structs 運(yùn)行正常。 3. Spring 部分
操作:[Menu] MyEclipse/Project Capabilities/Add Spring Capabilities Spring 版本( Spring version )選擇 “Spring 1″; 開(kāi)發(fā)包(libraries)選擇 “Spring 1.2 AOP Libraries、Spring 1.2 Core Libraries、Spring 1.2 Persistence Core Libraries、Spring 1.2 Persistence JDBC Libraries” 四項(xiàng); JAR Library Installation 選擇 “copy checked…” ,”Library Folder” 項(xiàng)選擇 “/WebRoot/WEB-INF/lib”(這樣的話所需的類庫(kù)都將拷貝到項(xiàng)目目錄,方便以后的布署)。 點(diǎn)擊 “下一步(Next)” 創(chuàng)建配置文件,修改文件路徑(Folder)到 “WebRoot/WEB-INF” 目錄(以便和Struts配置文件一起管理),文件名稱為默認(rèn)的”applicationContext.xml”。 點(diǎn)擊 “完成(Finish)” 。 3.2. 配置 struts-config.xml 文件 添加 Spring 插件(在 <message-resources> 標(biāo)簽后面添加): <plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”> 修改 LoginAction 的配置(只需修改 type 屬性): <action-mappings > </action-mappings> 3.3. 修改 Spring 配置文件 applicationContext.xml <?xml version=”1.0″ encoding=”UTF-8″?> <beans> 3.4. 測(cè)試 同上一次測(cè)試。測(cè)試成功證明 Spring 運(yùn)行正常。 4. Hibernate 部分下面開(kāi)始 Hibernate 部分,將原例修改為使用數(shù)據(jù)庫(kù)進(jìn)行用戶名/密碼驗(yàn)證。 4.1. 創(chuàng)建 mysql 數(shù)據(jù)庫(kù)和表 添加表的代碼如下: CREATE TABLE user_table( insert into user_table (USERNAME,PASSWORD) values (’test’,'test’) 4.2. 創(chuàng)建 MyEclipse 數(shù)據(jù)庫(kù)驅(qū)動(dòng)(DB Driver) 操作:[Menu] MyEclipse/Prefrences/MyEclipse/Database Explorer/Database Driver/DB Brower 在 DB Brower 的菜單中選擇 “New” ,”Driver Name” 項(xiàng)輸入 “login-conn” ,”Connection URL” 項(xiàng)輸入 “jdbc:mysql://localhost:3306/test” ,然后輸入正確的用戶名(User Name)和密碼(Password)按實(shí)際情況輸入; 在 “Driver JARs” 項(xiàng)添加 “mysql-connector-java-5.0.4-bin.jar” (可從網(wǎng)上下載),在 “Driver classname” 里選擇 “com.mysql.jdbc.Driver” ,其它自選。 點(diǎn)擊 “完成(Finish)”。 4.3. 添加 Hibernate 功能支持 操作:[Menu] MyEclipse/Project Capabilities/Add Hibernate Capabilities Hibernate 版本(Hibernate Specification)選擇 “Hibernate 3.1″ ,開(kāi)發(fā)包(libraries)選擇 Hibernate 3.1 Core Libraries 一項(xiàng); JAR Library Installation 選擇 “copy checked…” ,”Library Folder” 選擇 “/WebRoot/WEB-INF/lib” 。 點(diǎn)擊 “下一步(Next)” 設(shè)置配置文件,選擇 “Spring configuration file (applicationContext.xml)” 。 “下一步(Next)” 設(shè)置 Spring-Hibernate,選擇 “Existing Spring configuration file” ,”SessionFactory ID” 項(xiàng)輸入 “sessionFactory” 。
“下一步(Next)” 創(chuàng)建數(shù)據(jù)源對(duì)象,在 Bean Id 中輸入 dataSource,”DataSource” 項(xiàng)選擇 “Use JDBC Dirver” ,DB Driver 項(xiàng)選擇 “login-conn” ,其余項(xiàng)會(huì)自動(dòng)填充; 記得選中 “Copy DB driver jar(s) to project and add to buidpath” 項(xiàng),以便將數(shù)據(jù)連接的庫(kù)文件復(fù)制到項(xiàng)目,方便以后的布署。 “下一步(Next)” 創(chuàng)建 SessionFactory 類,”Java package” 項(xiàng)設(shè)置為 “com.login.Hibernate” (沒(méi)有則點(diǎn)擊”New”按鈕添加),”Class name” 項(xiàng)修改為”SessionFactory” ,Java Compliance Level選擇和創(chuàng)建項(xiàng)目時(shí)選擇的Java版本。(本例中并沒(méi)有用到SessionFactory類,留作今后擴(kuò)展) 點(diǎn)擊 “完成(Finish)”。 4.4. 創(chuàng)建對(duì)象關(guān)系映射(ORM)的相關(guān)文件 操作:[Menu] Window/Open Perspective/MyEclipse Database Explorer 選中 user_table 表,點(diǎn)擊右鍵,在出現(xiàn)的菜單中選擇 “Hibernate Reverse Engnieering” 。 在彈出的窗口中保持 “Java package” 項(xiàng)為 “com.login” ; 選中 “Hibernate mapping file (*.hbm.xml) for each databases table” ,并保持 “Update hibernate…” 項(xiàng)選中; 選中 “Java Data Object” 項(xiàng),并保持 “Create abstract class” 選中; “Base persistent class” 項(xiàng)留空; 取消 “Java Data Access Object…” 項(xiàng)和 “Use custom templates” 項(xiàng)。 點(diǎn)擊 “下一步(Next)” ,再點(diǎn)擊 “下一步(Next)” ,在 “Configure reverse engineering details” 頁(yè)選中 “user_table” 表,在右邊出現(xiàn)的 “Class Name” 項(xiàng)中輸入 “com.login.User”,其它不變。 點(diǎn)擊 “完成(Finish)”。 完成此操作,會(huì)在 “com.login” 包下創(chuàng)建三個(gè)文件:AbstractUser.java、User.java、User.hbm.xml。 4.5. 創(chuàng)建 UserDAO.java 接口和 UserDAOImpl.java 類 UserDAO 和 UserDAOImpl 通過(guò) Hibernate 訪問(wèn)數(shù)據(jù)庫(kù)。 UseDAO.java 內(nèi)容如下: package com.login; public interface UserDAO { package com.login; import java.util.List; public class UserDAOImpl extends HibernateDaoSupport implements UserDAO { public boolean isValidUser(String username, String password) { 4.6. 修改 LoginAction.java 文件 使用 UseDAO 對(duì)象來(lái)驗(yàn)證: package com.login.struts.action; import javax.servlet.http.HttpServletRequest; public class LoginAction extends Action { public UserDAO getUserDAO() { public void setUserDAO(UserDAO userDAO) { public ActionForward execute(ActionMapping mapping, ActionForm form, LoginForm loginForm = (LoginForm) form; if( userDAO.isValidUser( username, password ) ){ 綠色字體為修改部分。 4.7. Spring 的最終配制文件 applicationContext.xml <?xml version=”1.0″ encoding=”UTF-8″?> <beans> <bean id=”dataSource” <!– 配置sessionFactory, 注意這里引入的包的不同 –> <bean id=”transactionManager” class=”org.springframework.orm.hibernate3.HibernateTransactionManager”> <bean id=”userDAO” class=”com.login.UserDAOImpl”> <bean id=”userDAOProxy” class=”org.springframework.transaction.interceptor.TransactionProxyFactoryBean”> <bean name=”/login” class=”com.login.struts.action.LoginAction” singleton=”false”> </beans> 4.8. 測(cè)試 同第一次測(cè)試。
在spring2.0中,bean沒(méi)有“singleton”這個(gè)屬性,而是在“scope”中對(duì)它進(jìn)行設(shè)定。“scope”可以設(shè)定為“singleton”和“prototype”默認(rèn)情況下是“singleton”即和原先的“singleton=true”性質(zhì)一樣,如果要實(shí)現(xiàn)單例模式則將“scope”設(shè)定為“prototype”,即和原先版本的“singleton=false”一樣。參考文檔鏈接地址:http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
根據(jù)用戶名和密碼進(jìn)行校驗(yàn)的方法 public boolean verify(String userName, String userPwd) { final String HQL="FROM UserTable u where u.userName=? and u.userPwd=?"; String[] hqlParameter=new String[2]; hqlParameter[0]=userName; hqlParameter[1]=userPwd; List list=this.getHibernateTemplate().find(HQL,hqlParameter); if(list.size()>0){ return true; } return false; } mysql-administrator的安裝與使用(圖文) <?xml version="1.0"?> <user_connections> <last_connection>0</last_connection> <password_storage_type>2</password_storage_type> <user_connection> <connection_name>NewConnection</connection_name> <username>root</username> <hostname>127.0.0.1</hostname> <port>3306</port> <schema>test</schema> <advanced_options/> <storage_path></storage_path> <notes></notes> <connection_type>0</connection_type> <storage_type>1</storage_type> <password_storage_type>2</password_storage_type> <password>root</password> </user_connection> </user_connections> 但是在備份的時(shí)候還是會(huì)出現(xiàn)錯(cuò)誤 根據(jù)提示選擇open options 選擇 password storage OK 電腦每次自己?jiǎn)?dòng)MySQLSystemTrayMonitor 就會(huì)在定制的時(shí)間備份數(shù)據(jù)庫(kù) Your account information: Name: fei zhao Email: feifeixia2003@yahoo.com.cn Password: nehaifrowa You can log in to your new account and edit your profile options at: http://www.mysql.com/login.php
http://www.net.cn/static/customercare/support/demo/outlook/outlook.htm
fei.zhao@centralsoft.com.cn 211.155.226.126 有些事情現(xiàn)在已經(jīng)很容易被忘記了,但是在開(kāi)發(fā)原創(chuàng)的 Mac OS 的時(shí)候,業(yè)界到處出現(xiàn)新的圖形用戶接口(GUI),人們所做的工作差別相當(dāng)小。Macintosh 的設(shè)計(jì)團(tuán)隊(duì)在很多事情上是正確的,這很大程度上是因?yàn)樗麄冊(cè)谧约赫诟墒裁催@個(gè)問(wèn)題上付出了難以想像的思考。雖然我要為 Internet Developer(英特網(wǎng)開(kāi)發(fā)者)書(shū)寫一些腳本方面的集體思想,但我還是想去看一些過(guò)去的 Macintosh 人機(jī)界面指南,并且看看這些指導(dǎo)原則如何才能用到 Web 界面上,我認(rèn)為這是很值當(dāng)?shù)摹N液苌偃フ铱梢钥截惖木唧w部件,而更多地尋找這個(gè)以友好聞名的界面后面隱藏的設(shè)計(jì)原則。 原則之一就是無(wú)模式。這個(gè)原則打動(dòng)了我,因?yàn)樗貏e適合于 Web。正如 Mac 的設(shè)計(jì)者描述的那樣,模式界面(在這種界面下,您能做什么取決于您當(dāng)前處于什么模式下)會(huì)“把用戶鎖定在一個(gè)操作上,用戶在該操作完成之前不允許進(jìn)行其它任何操作”。使用單純的老版本HTML時(shí),從某種意義上看,所有界面都是模式的,進(jìn)行任何修改都需要裝載一個(gè)新的頁(yè)面。舉例來(lái)說(shuō),假定您在填充一個(gè)表單時(shí)需要一些幫助,則您必須轉(zhuǎn)到包含幫助信息的新頁(yè)面,然后再回到原來(lái)的頁(yè)面,以完成表單的填寫。 換句話說(shuō),您或者處于“幫助”模式,或者處于“表單填寫”模式。這凸顯了 Web 的兩個(gè)主要的限制:無(wú)態(tài)(即當(dāng)點(diǎn)擊幫助連接時(shí),您在表單中已經(jīng)輸入的信息將會(huì)丟失)和遲延(即您必須等待頁(yè)面裝載)。因此我決定寫一點(diǎn)腳本來(lái)幫助處理這些問(wèn)題。這些腳本通過(guò)動(dòng)態(tài) HTML (DHTML)技術(shù)在您點(diǎn)擊連接時(shí)彈出一個(gè)帶有幫助信息的方框。在我的演示中,就是使用它們來(lái)彈出與表單填寫相關(guān)的上下文幫助信息。這些腳本也可以用在別的地方,比如彈出一篇論文的術(shù)語(yǔ)定義。上述的兩種情況都以合理的方式給出了上下文相關(guān)的信息,即無(wú)模式的方式。同時(shí),這個(gè)解決方案也避免了無(wú)態(tài)和遲延的問(wèn)題。 實(shí)際上,我寫的這些基本函數(shù)可以用在任何需要在頁(yè)面上移動(dòng)和改變對(duì)象可視性的地方。我做了一個(gè)快速下拉菜單的實(shí)例,就是為了演示同樣這些代碼的另外一種使用方式,您可能會(huì)用得到。 您可能會(huì)擔(dān)心有人還在使用版本比較老的瀏覽器,對(duì)此,我們可以相當(dāng)輕松地使這些腳本自然地回退到原來(lái)的狀態(tài),使那些使用老版本瀏覽器的用戶可以簡(jiǎn)單地從一個(gè)單獨(dú)的頁(yè)面上獲得信息。我將在下面的“如何使用腳本”的部分中解釋如何實(shí)現(xiàn)這個(gè)目標(biāo)。 腳本的目標(biāo)這個(gè)腳本將創(chuàng)建動(dòng)態(tài)菜單和彈出式對(duì)象。它包括一些跨瀏覽器的基本函數(shù),用于移動(dòng)和改變DHTML對(duì)象的可視性。在 Netscape 4.x 中,一個(gè) DHTML 對(duì)象是一個(gè)通過(guò)絕對(duì)位置定位的 DIV,而對(duì) Safari,Internet Explorer 4 和 5,或者 Netscape 6 來(lái)說(shuō),則是任何 HTML 元素。這些函數(shù)可以被用在大量的 DHTML 應(yīng)用中;這里還給出的兩個(gè)實(shí)例,向您演示如何創(chuàng)建一個(gè)彈出式的提示(tip)和下拉式菜單。腳本中的主要函數(shù)如下:
編碼的挑戰(zhàn)遺憾的是,由于長(zhǎng)期以來(lái)瀏覽器都是由各個(gè)廠商自行實(shí)現(xiàn),所以書(shū)寫跨瀏覽器和跨平臺(tái)的 DHTML 通常是拜占庭式的條件分支。為任何一個(gè)瀏覽器書(shū)寫這些腳本都是非常輕松的;為了使它們工作在 Netscape 4 及其升級(jí)版本,以及工作在 Internet Explorer 4 及其升級(jí)版本上,事情就要復(fù)雜一些了;而使它們可以回退到比較老版本的瀏覽器的狀態(tài),又增加了更多的復(fù)雜度。問(wèn)題在于各個(gè)瀏覽器在如何尋找和操作 Web 頁(yè)面上的對(duì)象方面都有很多獨(dú)特之處,雖然我們對(duì)這種狀態(tài)已經(jīng)比較熟悉了。為了方便,我寫了處理這些條件分支的代碼。 這些函數(shù)中有一些功能不能工作在更老一些的瀏覽器上,比如 Netscape 3。然而,使這些功能自然地退化并補(bǔ)臺(tái)困難。您只需進(jìn)行如下操作:
我發(fā)現(xiàn)的最大挑戰(zhàn)是必須考慮瀏覽器處理事件的不同方式。事件發(fā)生時(shí)(比如 click 或者 mouseover 事件)光標(biāo)的位置存儲(chǔ)在一個(gè)事件對(duì)象中,而不同瀏覽器對(duì)事件對(duì)象的處理有輕微的不同。當(dāng)事件發(fā)生時(shí),Netscape 4 和6都產(chǎn)生一個(gè)新的事件對(duì)象,您可以把這個(gè)對(duì)象作為一個(gè)參數(shù)傳遞到函數(shù)中;而 Internet Explorer 則使用一個(gè)獨(dú)立的全局 <a href="#" onclick="showPopup('popupName',
event);">click</a>
請(qǐng)注意,在事件邊上少了引號(hào)標(biāo)識(shí)。那是因?yàn)樗且粋€(gè)對(duì)象,而不是文本?,F(xiàn)在,在您的函數(shù)中就可以以如下方式使用傳入的事件對(duì)象了: function showPopup(nameOfPopup, eventObject) {
alert(eventObject.clientX);
}
一旦把對(duì)象傳遞給函數(shù),您就可以通過(guò)讀取 把事件對(duì)象作為參數(shù)進(jìn)行傳遞的唯一麻煩是在不支持事件對(duì)象的老版本瀏覽器上不能工作。為了繞開(kāi)這個(gè)問(wèn)題,我們?cè)?popup.js 文件中包含一個(gè)函數(shù),該函數(shù)為那些不存在事件對(duì)象的瀏覽器創(chuàng)建一個(gè)假的對(duì)象,在裝載文檔時(shí)運(yùn)行: function createFakeEventObj() {
// create a fake event object for older browsers
//to avoid errors in function call when we
//need to pass the event object
if (!window.event) {
window.event = false;
}
}
這個(gè)函數(shù)把 在 Mac 版的 Internet Explorer 5 上有一個(gè)問(wèn)題,即當(dāng)彈出層出現(xiàn)在文本的上方時(shí),只有部分內(nèi)容可以被顯示。但是當(dāng)我移動(dòng) DIV 標(biāo)識(shí),使之成為文檔體的第一個(gè)元素時(shí),這個(gè)問(wèn)題神秘地消失了。 還是在 Mac 版的 IE 5 上,由于某些原因, function resizeBlankDiv() {
// resize blank placeholder div so IE 5
// on mac will get all clicks in window
if ((navigator.appVersion.indexOf('MSIE 5') != -1)
&& (navigator.platform.indexOf('Mac') != -1)
&& getStyleObject('blankDiv')) {
getStyleObject('blankDiv').width =
document.body.clientWidth - 20;
getStyleObject('blankDiv').height =
document.body.clientHeight - 20;
}
}
遺憾的是,如果瀏覽器的尺寸被改變了,則只有一種方法可以恢復(fù)尺寸,即重新裝載整個(gè)文檔(您可能認(rèn)為,只要用 在 Mac 版的 Internet Explorer 5 上,當(dāng)您點(diǎn)擊一個(gè)連接時(shí),會(huì)出現(xiàn)一個(gè)絕對(duì)大的輪廓,這個(gè)輪廓會(huì)和將要彈出的內(nèi)容相重疊。為了解決這個(gè)問(wèn)題,我在連接上增加了一條風(fēng)格規(guī)則: .popupLink { outline: none }
Netscape 4 在 DIV 的命名上有一些怪異的問(wèn)題。以數(shù)字開(kāi)頭的名稱(比如“1div”),以及有些帶有下劃線的名稱(比如“my_div”)不能轉(zhuǎn)化為層,因此我通常都避免這兩種情況,把我的 DIV 按類似于 myDiv 或者 div1 的形式來(lái)命名。 Netscape 4 還有一個(gè)嚴(yán)重的缺陷,即當(dāng)窗口的尺寸被改變時(shí),所有的風(fēng)格規(guī)則都會(huì)丟失。我沒(méi)有把修復(fù)這個(gè)缺陷的代碼包含進(jìn)來(lái),因?yàn)橐呀?jīng)有好幾個(gè)這樣的代碼公布出來(lái)了,比如 Webmonke 上的這個(gè). 最后,在 Netscape 4 中,如果您把 <a href="javascript:myFunction();">clickme</a>
而必須采取象下面的做法: <a href="#" onclick="myFunction();
return false;">clickme</a>
實(shí)際上,這也是確保您的腳本在不能運(yùn)行這些函數(shù)的瀏覽器上自然退化的好方法。請(qǐng)注意“ 在這個(gè)演示中,我們討論的更深一些: <a href="#" onclick="return
!showPopup('nameFieldPopup', event);">
clickme</a>
我們不去深入到所有的細(xì)節(jié),只是大概看看這行代碼,它的意思是運(yùn)行 使用腳本如果要使用這些腳本來(lái)實(shí)現(xiàn)彈出機(jī)制,請(qǐng)按照如下這些步驟來(lái)進(jìn)行:
下面對(duì)相關(guān)的函數(shù)逐一進(jìn)行說(shuō)明:
在怎合struts+hibernate+spring時(shí),Tomcat出現(xiàn)了Error Listenerstart錯(cuò)誤碼,郁悶的很,在網(wǎng)上找了很多的資料,提問(wèn)的不少,但都沒(méi)有很標(biāo)準(zhǔn)的解釋以用解決的辦法,有的說(shuō)是jar包的版本沖突,有的說(shuō)是Tomcat的自身問(wèn)題,各解釋都有,基本上所有的方法我都試過(guò)了。就這個(gè)問(wèn)題搞了兩天。終于找到了解決的辦法:在web.xml時(shí)將:
<!-- 使用監(jiān)聽(tīng)方式載入Spring上下文 --> 改為: <!-- 使用監(jiān)聽(tīng)方式載入Spring上下文 --> 一、在Myeclipse軟件中部署 1、 在Myeclipse中,創(chuàng)建好工程后,在Myeclipse菜單欄中選擇 Windows -> Preferences -> Myeclipse -> Tomcat5,選擇"Enable";Tomact Home Directory要選擇你機(jī)器上Tomcat所安裝的目錄。然后,再Windows -> Preferences -> Myeclipse -> Tomcat5 ->JDK,確保這個(gè)是有對(duì)應(yīng)的jdk版本,若沒(méi)有,則通過(guò)"Add"添加其安裝路徑。ok 2、選擇工具欄上的 3、 在工具欄上選擇 4、 運(yùn)行程序。在IE中輸入http://localhost:8080/aa/WebRoot/index.jsp(aa為工程名字) 二、在Tomcat的server.xml配置文件中部署 1、在Tomcat下,找到conf文件下的server.xml,打開(kāi)。 2、在<Host>和</host>之間加上如下代碼: 1
2 <Context path="/虛擬目錄名" docBase="目標(biāo)目錄位置" debug="0" reloadable="true" > 3 </Context> (嚴(yán)格區(qū)分大小寫,當(dāng)path=""時(shí),此時(shí)的虛擬目錄直接為root--->http://localhost:8080/) path:表示在瀏覽器中輸入http://localhost:8080/虛擬目錄名 docBase:表示你的程序包的物理絕對(duì)路徑,默認(rèn)的絕對(duì)路徑是 %tomcat_home%/webapps reloadable :為true,則tomcat會(huì)自動(dòng)檢測(cè)應(yīng)用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動(dòng)裝載新的應(yīng)用程序,我們可以在不重起tomcat的情況下改變應(yīng)用程序;為false則不自動(dòng)加載。 (我覺(jué)得這種部署方法就好在這里,可以不用重新啟動(dòng)Tomcat。不知道前一種方法是不是在哪個(gè)地方進(jìn)行配置即可實(shí)現(xiàn)同樣的效果。若有,請(qǐng)高人指點(diǎn)?。?/span> 示例: 1
2 1 <!-- 我的自定義目錄--> 3 2 <Context path="/wess" debug="0" docBase="C:\Documents and Settings\tt\workspace\Welcome_SS\WebRoot" reloadable="true"> 4 3 </Context> 5 4 3、 啟動(dòng)Tomcat 在Myeclipse工具欄上選擇 4、 運(yùn)行程序。在IE地址中輸入http://localhost/wess/index.jsp(引用上面示例配置時(shí)的情況)
附: 在lib下的struts-config.xml可以添加下面三句進(jìn)行主頁(yè)默認(rèn)的配置,即在IE中只需輸入到主頁(yè)所在目錄,而不必寫出主頁(yè)。如上面的配置就可只輸入http://localhost/wess <welcome-file-list> |