版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 信息理工學(xué)院</b></p><p> 課程設(shè)計(jì)(實(shí)訓(xùn))報(bào)告</p><p> 系 部 _ 信息工程系__ 專 業(yè) _____________</p><p> 班 級 學(xué) 號 ____________ </p><p> 姓
2、 名 _______________課 題 _____________</p><p> 指導(dǎo)教師 報(bào)告成績 _ _ </p><p> 日 期:2011年 12 月 28 日</p><p><b> 目 錄</b></p><p><b&g
3、t; 目 錄I</b></p><p> 第1章基礎(chǔ)知識1</p><p> 1.1MySql數(shù)據(jù)庫1</p><p> 1.2JSP與Servlet1</p><p> 1.3 Struts框架3</p><p> 第2章 總體設(shè)計(jì)5</p><p&g
4、t; 2.1 需求分析5</p><p> 2.2 數(shù)據(jù)庫設(shè)計(jì)5</p><p> 2.3 功能模塊簡介6</p><p> 2.4 框架的應(yīng)用9</p><p> 第3章 詳細(xì)設(shè)計(jì)13</p><p> 第3章 詳細(xì)設(shè)計(jì)13</p><p> 3.1 新聞顯示功能1
5、3</p><p> 3.2 用戶注冊功能13</p><p> 3.3 修改注冊信息功能13</p><p> 3.4 管理新聞功能13</p><p> 3.5 添加新聞功能14</p><p> 3.6管理用戶14</p><p><b> 3.7注銷14
6、</b></p><p> 第4章 功能實(shí)現(xiàn)15</p><p> 4.1 新聞顯示功能15</p><p> 4.2 用戶注冊功能17</p><p> 4.3 修改注冊信息功能19</p><p> 4.4 管理新聞功能20</p><p> 4.5 修改新
7、聞功能22</p><p> 4.6管理用戶24</p><p><b> 4.7注銷25</b></p><p><b> 第5章 總結(jié)27</b></p><p> 第6章參考文獻(xiàn)27</p><p><b> 基礎(chǔ)知識</b>&
8、lt;/p><p><b> MySql數(shù)據(jù)庫</b></p><p> 今天MySQL已被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫。</p><p> MySQL是一個真正的多用戶、多線程SQL數(shù)據(jù)庫服務(wù)
9、器。系統(tǒng)采用加載純Java數(shù)據(jù)庫驅(qū)動程序的方式操作數(shù)據(jù)庫,目前mysql還不支持橋連接。</p><p> SQL(結(jié)構(gòu)化查詢語言)是世界上最流行的和標(biāo)準(zhǔn)化的數(shù)據(jù)庫語言。MySQL是以一個客戶機(jī)/服務(wù)器結(jié)構(gòu)的實(shí)現(xiàn),它由一個服務(wù)器守護(hù)程序mysqld和很多不同的客戶程序和庫組成,并且能夠支持多平臺。</p><p> JSP與Servlet</p><p> J
10、ava Servlet是一種獨(dú)立于平臺和協(xié)議的服務(wù)器端的Java應(yīng)用程序,可以生成動態(tài)的Web頁面。</p><p> Java Servlet是位于Web 服務(wù)器內(nèi)部的服務(wù)器端的Java應(yīng)用程序,與傳統(tǒng)的從命令行啟動的Java應(yīng)用程序不同,Servlet由Web服務(wù)器進(jìn)行加載,該Web服務(wù)器必須包含支持Servlet的Java虛擬機(jī)。</p><p> Java Servlet與Ap
11、plet 的比較:</p><p><b> 相似之處:</b></p><p> 它們不是獨(dú)立的應(yīng)用程序,沒有main()方法。</p><p> 它們不是由用戶或程序員調(diào)用,而是由另外一個應(yīng)用程序(容器)調(diào)用。</p><p> 它們都有一個生存周期,包含init()和destroy()方法。</p&g
12、t;<p><b> 不同之處:</b></p><p> Applet具有很好的圖形界面(AWT),與瀏覽器一起,在客戶端運(yùn)行。</p><p> Java Servlet則沒有圖形界面,運(yùn)行在服務(wù)器端。</p><p> Java Servlet與CGI(Common Gateway Interface) 的比較:&l
13、t;/p><p> 與傳統(tǒng)的CGI和許多其他類似CGI的技術(shù)相比,Java Servlet具有更高的效率,更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資。在未來的技術(shù)發(fā)展過程中,Servlet有可能徹底取代CGI。</p><p><b> 高效</b></p><p> 在傳統(tǒng)的CGI中,每個請求都要啟動一個新的進(jìn)程,如果CGI程序
14、本身的執(zhí)行時(shí)間較短,啟動進(jìn)程所需要的開銷很可能反而超過實(shí)際執(zhí)行時(shí)間。而在Servlet中,每個請求由一個輕量級的Java線程處理(而不是重量級的操作系統(tǒng)進(jìn)程)。</p><p> 在傳統(tǒng)CGI中,如果有N個并發(fā)的對同一CGI程序的請求,則該CGI程序的代碼在內(nèi)存中重復(fù)裝載了N次;而對于Java Servlet,處理請求的是N個線程,只需要一份Servlet類代碼。在性能優(yōu)化方面,Servlet也比CGI有著更多
15、的選擇。</p><p><b> 方便</b></p><p> Java Servlet提供了大量的實(shí)用工具例程,例如自動地解析和解碼HTML表單數(shù)據(jù)、讀取和設(shè)置HTTP頭、處理Cookie、跟蹤會話狀態(tài)等。</p><p><b> 功能強(qiáng)大</b></p><p> 在Java Se
16、rvlet中,許多使用傳統(tǒng)CGI程序很難完成的任務(wù)都可以輕松地完成。例如,Java Servlet能夠直接和Web服務(wù)器交互,而普通的CGI程序不能。Servlet還能夠在各個程序之間共享數(shù)據(jù),使得數(shù)據(jù)庫連接池之類的功能很容易實(shí)現(xiàn)。</p><p><b> 可移植性好</b></p><p> Java Servlet用Java編寫,Servlet API具有完
17、善的標(biāo)準(zhǔn)。因此,為IPlanet Enterprise Server寫的Servlet無需任何實(shí)質(zhì)上的改動即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務(wù)器都直接或通過插件支持Servlet。</p><p><b> 節(jié)省投資</b></p><p> 不僅有許多廉價(jià)甚至免費(fèi)的Web服務(wù)器可供個人或小規(guī)模網(wǎng)站使用,而且對于
18、現(xiàn)有的服務(wù)器,如果它不支持Servlet的話,要加上這部分功能也往往是免費(fèi)的(或只需要極少的投資)。</p><p> Java Servlet與JSP(JavaServer Pages) 的比較:</p><p> JavaServer Pages(JSP)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動態(tài)HTML混合編碼的技術(shù),JSP并沒有增加任何本質(zhì)上不能用Servlet實(shí)現(xiàn)的功能。但是,在 JS
19、P中編寫靜態(tài)HTML更加方便,不必再用println語句來輸出每一行HTML代碼。更重要的是,借助內(nèi)容和外觀的分離,頁面制作中不同性質(zhì)的任務(wù)可以方便地分開:比如,由頁面設(shè)計(jì)者進(jìn)行HTML設(shè)計(jì),同時(shí)留出供Java Servlet程序員插入動態(tài)內(nèi)容的空間。</p><p> 1.3 Struts框架</p><p> 在我學(xué)習(xí)Struts框架時(shí),我本人更愿意看到Struts的本質(zhì),其實(shí)S
20、trurts框架就是一個核心類ActionServlet,這個類把所有請求都劫走了,然后根據(jù)請求的URL轉(zhuǎn)發(fā)到相應(yīng)的Action上,讓Action處理相應(yīng)的系統(tǒng)業(yè)務(wù),表單數(shù)據(jù)由Struts替我們進(jìn)行封裝FormBean中,我們只需取出來進(jìn)行操作。在有Struts框架編程時(shí)我們不需要認(rèn)真考慮里面的機(jī)制,而是要學(xué)會如何更好的去運(yùn)用它。</p><p> 如果有一天我愿意,我會在我做的項(xiàng)目中手動編寫一個框架。<
21、/p><p> Strusts框架的基本組成如下:</p><p> 1,Client browser(客戶瀏覽器) 來自客戶瀏覽器的每個 HTTP 請求創(chuàng)建一個事件。Web 容器將用一個 HTTP 響應(yīng)作出響應(yīng)。 2,Controller(控制器)
22、60; 控制器接收來自瀏覽器的請求,并決定將這個請求發(fā)往何處。 就 Struts 而言,控制器是以 servlet 實(shí)現(xiàn)的一個命令設(shè)計(jì)模式。 struts-config.xml 文件配置控制器命令?! ?,業(yè)務(wù)邏輯 業(yè)務(wù)邏輯更新模型的狀態(tài),并幫助控制應(yīng)用程序的流程。 就 Struts 而言,這是通過作為實(shí)際業(yè)務(wù)邏輯“瘦”包裝的
23、Action 類完成的?! ?,Model(模型)的狀態(tài) 模型表示應(yīng)用程序的狀態(tài)。業(yè)務(wù)對象更新應(yīng)用程序的狀態(tài)。 ActionForm bean 在會話級或請求級表示模型的狀態(tài),而不是在持久級。 JSP 文件使用 JSP 標(biāo)記讀取來自 ActionForm bean 的信息。
24、60; 5,View(視圖) 視圖就是一個 JSP 文件。其中沒有流程邏輯,沒有業(yè)務(wù)邏輯,也沒有模型信息 —— 只有標(biāo)記。 標(biāo)記是使</p><p><b> 第2章 總體設(shè)計(jì)</b></p><p><b> 2.1 需求分析</b></p
25、><p> 本系統(tǒng)是新聞發(fā)布系統(tǒng)。由于網(wǎng)站新聞需要頻繁性更新,每次更新管理員都要到服務(wù)器上更新,給管理員管理網(wǎng)站造成不便,因這種需求本系統(tǒng)誕生了。</p><p> 在系統(tǒng)開發(fā)過程中尋找需求是一件十分重要的工作,在認(rèn)真分析和調(diào)查后確定了本系統(tǒng)的需求要求。</p><p> 本系統(tǒng)參與者:管理員、普通用戶、瀏覽者。</p><p><b
26、> 系統(tǒng)功能模塊:</b></p><p><b> 新聞瀏覽</b></p><p><b> 用戶登陸</b></p><p><b> 用戶注冊</b></p><p><b> 用戶修改信息</b></p>
27、<p><b> 管理新聞</b></p><p><b> 添加新聞</b></p><p><b> 管理用戶</b></p><p><b> 注銷</b></p><p><b> 圖2-1</b><
28、;/p><p><b> 2.2 數(shù)據(jù)庫設(shè)計(jì)</b></p><p> 數(shù)據(jù)庫命名為mynews,三張表user,news,admin。</p><p> User表字段(username,password,phone,qq)</p><p><b> 圖2-2</b></p>&
29、lt;p> News表字段(id,title,author,message,post_time,username)</p><p><b> 圖2-3</b></p><p> Admin表字段(username,password)</p><p><b> 圖2-4</b></p><p
30、> 2.3 功能模塊簡介</p><p><b> 新聞瀏覽</b></p><p> 首頁顯示網(wǎng)站所有新聞列表,根據(jù)新聞的數(shù)量分頁,網(wǎng)站顧客可以自由瀏覽新聞。</p><p><b> 用戶登陸</b></p><p> 用戶登界面,用戶需根據(jù)自己的類型(普通用戶,管理員)進(jìn)行選擇
31、性登陸,登錄時(shí)需要填寫驗(yàn)證碼。注意本系統(tǒng)部分功能只有在登陸后才被激活,且不同用戶類型登陸后所具有的功能也不同。</p><p> 圖2-5是用戶登錄用例圖</p><p><b> 圖2-5</b></p><p><b> 用戶注冊</b></p><p> 注冊模塊僅服務(wù)于普通用戶,在網(wǎng)
32、站上注冊的用戶身份僅是普通用戶,管理員需到服務(wù)器注冊信息。</p><p> 圖2-6新用戶注冊狀態(tài)圖</p><p><b> 圖2-6</b></p><p><b> 用戶修改信息</b></p><p> 普通用戶登陸后才能修改自己的信息,為了確保系統(tǒng)安全系統(tǒng)管理員不能在客戶端修改信
33、息,必須到服務(wù)器數(shù)據(jù)庫直接修改信息。</p><p> 圖2-7用戶修改信息序列圖</p><p><b> 圖2-7</b></p><p><b> 管理新聞</b></p><p> 用戶登陸后此模塊被激活,為了確保其他用戶在本站的利益,用戶僅可以管理自己的新聞,管理新聞包括(刪除,修
34、改),系統(tǒng)管理員可以管理所有用戶發(fā)表的新聞。</p><p> 圖2-8用戶管理新聞用例圖</p><p><b> 圖2-8</b></p><p><b> 添加新聞</b></p><p> 用戶登錄后可以發(fā)布新聞,發(fā)布的新聞將在系統(tǒng)首頁新聞列表中顯示出來,用戶在發(fā)表新聞時(shí)若不填寫作者
35、,系統(tǒng)默認(rèn)當(dāng)前用戶為作者。發(fā)表時(shí)間不用填寫,由系統(tǒng)根據(jù)服務(wù)器時(shí)間默認(rèn)。</p><p><b> 管理用戶</b></p><p> 此模塊專屬于系統(tǒng)管理員,系統(tǒng)管理員登陸后,可以查看本系統(tǒng)存在的所有普通用戶的信息,信息包括(用戶名,密碼,聯(lián)系電話,即時(shí)通信QQ)。</p><p> 管理員可以根據(jù)需要,對系統(tǒng)中的任何用戶進(jìn)行封號處理。&
36、lt;/p><p> 圖2-9管理員管理用戶用例圖</p><p><b> 圖2-9</b></p><p><b> 注銷</b></p><p> 當(dāng)用戶登錄后,不再進(jìn)行操作時(shí),為了減少服務(wù)器資源的浪費(fèi)和自身賬戶的安全性,可以進(jìn)行注銷。</p><p><b&
37、gt; 2.4 框架的應(yīng)用</b></p><p> 使用struts框架需要搭建環(huán)境</p><p> 拷貝struts lib下的所有jar到WEB-INF/lib下</p><p> 修改web.xml文件,配置ActionServlet</p><p> 指定struts-config.xml的位置</p&
38、gt;<p> ActionServlet的日志輸出等級</p><p> 配置Apache的第三方組件的日志輸出等級</p><p> 當(dāng)Tomcat啟動的時(shí)候執(zhí)行ActionServlet的初始化方法</p><p> 提供struts-config.xml文件</p><p> 應(yīng)用struts創(chuàng)建登錄項(xiàng)目<
39、;/p><p> 創(chuàng)建jsp頁面(login.jsp,success.jsp,error.jsp)</p><p> 創(chuàng)建LoginActionForm.java,做數(shù)據(jù)收集的。屬性名與表單元素名一致</p><p> 創(chuàng)建LoginAction.java</p><p> 配置struts-config.xml文件</p>
40、<p> ActionServlet</p><p> 由Struts提供:org.apache.struts.action.ActionServlet</p><p> 是一個Servlet,需要在web.xml中配置</p><p> ActionForm</p><p><b> 封裝頁面提交的數(shù)據(jù)&l
41、t;/b></p><p> 繼承自org.apache.struts.action.ActionForm </p><p> 需要在struts-config.xml中配置</p><p> 與JSP的交互:從頁面獲取數(shù)據(jù)loginActionForm.getUsername(); 發(fā)送數(shù)據(jù)到頁面request.setAttribute(&quo
42、t;username",username);</p><p> Action[****Action.java]</p><p><b> 封裝一類客戶操作</b></p><p> 繼承自org.apache.struts.action.Action,實(shí)現(xiàn)execute方法</p><p> 需要在st
43、ruts-config.xml中配置</p><p> struts-config.xml</p><p> 配置Form Bean和Action Bean</p><p> 服務(wù)器啟動時(shí),Struts裝載struts-config.xml信息</p><p> 服務(wù)器啟動后,根據(jù)web.xml加載ActionServlet讀取str
44、uts-config.xml文件內(nèi)容到內(nèi)存。</p><p> 輸入用戶名密碼提交表單、提交到action屬性的login.do,通過ActionServlet讀struts-config.xml文件找到 action下的path屬性找到.do,通過name屬性找form-beans中的form-bean的name屬性得到ActionForm的包名類名,先實(shí)例化form,把表單的值填充給form,調(diào)用form的
45、validate方法驗(yàn)證、ActionErrors返回null表示驗(yàn)證通過,否則失敗返回input指定的頁面.驗(yàn)證通過會實(shí)例化Action,執(zhí)行Action的excute方。</p><p> 整個項(xiàng)目的Struts-config.xml配置文件代碼:</p><p> <?xml version="1.0" encoding="UTF-8&quo
46、t;?></p><p> <!DOCTYPE struts-config PUBLIC</p><p> "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"</p><p> "struts-config_1_3.dtd">
47、;</p><p> <struts-config></p><p> <form-beans></p><p> <form-bean name="registerFormBean" type="actionForm.RegisterActionForm"></form-bea
48、n></p><p> <form-bean name="loginFormBean" type="actionForm.LoginActionForm"></form-bean></p><p> <form-bean name="modifyraf" type="actionF
49、orm.RegisterActionForm"></form-bean></p><p> <form-bean name="addArticle" type="actionForm.ArticleActionForm"></form-bean></p><p> <form-bean n
50、ame="editArtile" type="actionForm.EditArticleActionForm"></form-bean></p><p> </form-beans></p><p> <action-mappings></p><p> <action
51、path="/reg" type="action.RegisterAction" name="registerFormBean" scope="request"></p><p> <forward name="success" path="/success.jsp"><
52、;/forward></p><p> <forward name="error" path="/error.jsp"></forward></p><p> <forward name="userExisting" path="/isExistingUser.jsp"&
53、gt;</forward></p><p><b> </action></b></p><p> <action path="/log" type="action.LoginAction" name="loginFormBean" scope="request&q
54、uot;></p><p> <forward name="success" path="/success.jsp"></forward></p><p> <forward name="error" path="/error.jsp"></forward&g
55、t;</p><p><b> </action></b></p><p> <action path="/exit" type="action.ExitAction"></p><p> <forward name="success" path=&
56、quot;/index.jsp"></forward></p><p><b> </action></b></p><p> <action path="/modifyusermess" type="action.ModifyUserGetOldMess" scope=&quo
57、t;request"></p><p> <forward name="showoldmess" path="/modifyMessage.jsp"></forward></p><p> <forward name="error" path="/error.jsp&qu
58、ot;></forward></p><p> <forward name="login" path="/login.jsp"></forward></p><p><b> </action></b></p><p> <action p
59、ath="/usernewmess" type="action.ModifyMessageAction" name="modifyraf" scope="request"></p><p> <forward name="success" path="/success.jsp"&g
60、t;</forward></p><p> <forward name="error" path="/error.jsp"></forward></p><p><b> </action></b></p><p> <action path=&
61、quot;/addArtilce" name="addArticle" type="action.AddArticleAction" scope="request"></p><p> <forward name="success" path="/success.jsp"></f
62、orward></p><p> <forward name="error" path="/error.jsp"></forward></p><p> <forward name="login" path="/login.jsp"></forward>
63、</p><p><b> </action></b></p><p> <action path="/articleTurnPage" type="action.ArticleTurnPageAction" scope="request" ></p><p&g
64、t; <forward name="success" path="/index.jsp"></forward></p><p><b> </action></b></p><p> <action path="/managerATP" type="a
65、ction.ArticleTurnPageAction" scope="request"></p><p> <forward name="success" path="/managerArticle.jsp"></forward></p><p> <forward name=&
66、quot;error" path="/login.jsp"></forward></p><p><b> </action></b></p><p> <action path="/deleteArticle" type="action.DeleteArticleAc
67、tion" scope="request"></p><p> <forward name="success" path="/success.jsp"></forward></p><p> <forward name="error" path="/e
68、rror.jsp"></forward></p><p><b> </action></b></p><p> <action path="/editArticle" name="editArtile" type="action.EditArticleAction&q
69、uot;></p><p> <forward name="success" path="/success.jsp"></forward></p><p> <forward name="error" path="error.jsp"></forward>
70、;</p><p><b> </action></b></p><p> </action-mappings></p><p> </struts-config></p><p><b> 第3章 詳細(xì)設(shè)計(jì)</b></p><p>
71、;<b> 第3章 詳細(xì)設(shè)計(jì)</b></p><p> 3.1 新聞顯示功能</p><p> 首頁(index.jsp)負(fù)責(zé)顯示新聞列表,點(diǎn)擊新聞標(biāo)題將顯示出新聞詳細(xì)內(nèi)容,新聞標(biāo)題上加有鏈接,鏈接到showNewsDeatil.Jsp頁面,此頁面負(fù)責(zé)顯示新聞詳細(xì)內(nèi)容(標(biāo)題,發(fā)表時(shí)間,內(nèi)容,作者)。根據(jù)新聞條數(shù)NewsTurnPageAction.java負(fù)責(zé)新
72、聞列表分頁,點(diǎn)擊“上一頁”“下一頁”實(shí)現(xiàn)分頁。</p><p> 新聞內(nèi)容都存與UserBean 的實(shí)例化對象user中,數(shù)據(jù)封裝好后存放到session中供用戶讀取。</p><p> 3.2 用戶注冊功能</p><p> register.jsp頁面負(fù)責(zé)提交新用戶注冊信息,信息提交給Struts,有RegisterActionForm.java把表單數(shù)據(jù)
73、接收過來封裝,Register.java從FormBean(RegisterActionForm.java)中把數(shù)據(jù)提取出來,進(jìn)行檢測,首先檢測用戶名,檢查是否已被注冊,此過程用到myutils包中的UserUtils類。</p><p> 此系統(tǒng)支持漢化用戶名,所以用戶名還要進(jìn)行編碼處理,用以保障用漢字注冊用戶名的用戶。</p><p> 注冊成功返回success.jsp 否則返回
74、error.jsp頁面。</p><p> 3.3 修改注冊信息功能</p><p> 此模塊登陸后才能被激活,此模塊是普通用戶設(shè)計(jì)的,管理員不可以在客戶端修改信息,modifyUserMess.jsp頁面負(fù)責(zé)修改。</p><p> 當(dāng)用戶登陸后,點(diǎn)擊修改,GetUserOldMessAction.java負(fù)責(zé)查詢用戶信息,得到信息后,把信息存放到UserM
75、essage.java的實(shí)例化對象userMess中,然后modifyUserMess.jsp頁面引入userMess對象獲得舊的信息,修改后提交給ActionServlet.java類,ActionServlet根據(jù)Struts-config.xml中的URL配置再轉(zhuǎn)發(fā)到ModifyUserMessAction.java,經(jīng)過處理后最終存入數(shù)據(jù)庫中。</p><p> 3.4 管理新聞功能</p>
76、<p> 此模塊登錄后被激活,普通用戶登陸后僅可以管理自己的新聞,管理項(xiàng)目包括(刪除,修改)。</p><p> 管理員登陸后可管理數(shù)據(jù)庫中所有的新聞,管理項(xiàng)目包括(刪除,修改)。</p><p> 刪除新聞基本實(shí)現(xiàn)流程:managerUserAction.jsp顯示新聞列表,單擊“刪除”——>confirmDeleteNews.Jsp——>DeleteNe
77、wsAction.java最終SqlUtils.java工具類根據(jù)接收到的id號,從數(shù)據(jù)庫的news表把相應(yīng)的新聞刪除。</p><p> 編輯新聞基本實(shí)現(xiàn)流程:單擊“修改”——>modifyNews.jsp(負(fù)責(zé)顯示當(dāng)前新聞,并提交新新聞)——>ModifyNewsAction.java(處理后存入數(shù)據(jù)庫)。</p><p> 3.5 添加新聞功能</p>
78、<p> 添加新聞的最低用戶級別是普通用戶,用戶登錄后可以在addNews.jsp頁面添加新聞,新聞提交給Struts,ActionServlet.java負(fù)責(zé)分發(fā)給相應(yīng)的Action類處理,給據(jù)配置文件的FormBean把提交的新聞信息封裝,然后AddNews.java類從FormBean(AddNewsActionForm.java)中取出數(shù)據(jù)處理后存入news表中。</p><p> 添加新聞
79、基本流程:addNews.jsp——>AddNewsAction.java——>SqlUtils.java(工具類)——>news新聞表。</p><p><b> 3.6管理用戶</b></p><p> 此模塊系統(tǒng)管理員專有,系統(tǒng)管理員登錄后,此模塊被激活。</p><p> managerUserList.jsp頁
80、面負(fù)責(zé)顯示用戶列表,管理員可以根據(jù)需要對個別用戶進(jìn)行封號處理。點(diǎn)擊刪除,把對應(yīng)用戶的用戶名最終傳遞給SqlUtils.java(工具類),由工具類實(shí)施刪除。</p><p> 封號實(shí)現(xiàn)流程:點(diǎn)擊“刪除”——>confirmDeleteUser.jap——>DeleteUserAction.java——>SqlUtils.java(工具類:根據(jù)接收到的用戶名,在數(shù)據(jù)庫mynews的User表中刪
81、除相應(yīng)用戶)。</p><p><b> 3.7注銷</b></p><p> ExitAction.java負(fù)責(zé)注銷,當(dāng)用戶登錄后,不再進(jìn)行操作點(diǎn)擊導(dǎo)航欄上的“注銷”系統(tǒng)會銷毀當(dāng)前session。</p><p> 基本實(shí)現(xiàn)流程:點(diǎn)擊“注銷”——>ExitAction.java(銷毀當(dāng)前session對象)。</p>
82、<p><b> 第4章 功能實(shí)現(xiàn)</b></p><p> 4.1 新聞顯示功能</p><p> NewsBean.java部分代碼(負(fù)責(zé)新聞數(shù)據(jù)封裝):</p><p> private CachedRowSetImpl row; </p><p> private int pageSize;
83、</p><p> private int pageCount;</p><p> private int rowCount;</p><p> private int currentPage;</p><p> public NewsBean(){</p><p> pageSize= 10;</p&
84、gt;<p> currentPage = 1;</p><p> String sql = "select * from news ";</p><p> List<String> parameters = new ArrayList<String>();</p><p> row = SqlUti
85、ls.querySql(sql, parameters);</p><p><b> try {</b></p><p> row.last();</p><p> rowCount = row.getRow();</p><p> pageCount = (rowCount%pageSize==0)?(rowC
86、ount/pageSize):(rowCount/pageSize+1);</p><p> } catch (SQLException e) {</p><p> e.printStackTrace();</p><p> rowCount = 0;</p><p> pageCount = 0;</p><
87、;p><b> }</b></p><p><b> }</b></p><p> public NewsBean(String username){</p><p> pageSize= 10;</p><p> currentPage = 1;</p><p
88、> String sql;</p><p> boolean ok;</p><p> List<String> parameters = new ArrayList<String>();</p><p> ok = UserUtils.isExistingUser(username);</p><p>
89、<b> if(ok){</b></p><p> sql = "select * from news where username = ?";</p><p> parameters.add(username);</p><p><b> }else{</b></p><p
90、> sql = "select * from news";</p><p><b> }</b></p><p> row = SqlUtils.querySql(sql, parameters);</p><p><b> try {</b></p><p>
91、row.last();</p><p> rowCount = row.getRow();</p><p> pageCount = (rowCount%pageSize==0)?(rowCount/pageSize):(rowCount/pageSize+1);</p><p> } catch (SQLException e) {</p>&
92、lt;p> e.printStackTrace();</p><p> rowCount = 0;</p><p> pageCount = 0;</p><p><b> }</b></p><p><b> }</b></p><p> showNew
93、sList.jsp主要代碼(負(fù)責(zé)首頁新聞題目列表):</p><p> <%NewsBean news = null;</p><p> news = (NewsBean)session.getAttribute("news");</p><p> if(news==null){</p><p> res
94、ponse.sendRedirect("newsTurnPage.do");</p><p><b> }else{</b></p><p> news.setPageSize(12);</p><p> CachedRowSetImpl row = news.getRow();</p><p&
95、gt; int pageCount = news.getPageCount();</p><p> int currentPage = news.getCurrentPage();</p><p> int rowCount = news.getRowCount();</p><p> int pageSize = news.getPageSize();&l
96、t;/p><p><b> %></b></p><p> <table width="520" align="center"></p><p><b> <tr></b></p><p> <th height=&qu
97、ot;50" colspan="3"> </th></p><p><b> </tr></b></p><p><b> <%</b></p><p> row.absolute((currentPage-1)*pageSize+
98、1);</p><p> String str;//聲明一個截取時(shí)間的臨時(shí)字符串</p><p> for(int i = 1; i<= pageSize;i ++){</p><p> str = row.getString("post_time");</p><p><b> %>&
99、lt;/b></p><p><b> <tr ></b></p><p> <td height="22" width="10" valign="middle"><img src="inc_pic/icon.jpg" width="9&q
100、uot; height="9" /></td></p><p> <td width="400" align="left"><a href='showNewsDeatil.jsp?id=<%=row.getRow() %>'</p><p> target=&qu
101、ot;_blank" ><%=row.getString("title") %></a></td></p><p> <td align="center"><%=str.substring(0,11) %></td></p><p><b> &l
102、t;/tr></b></p><p> <% if(!row.next())break;</p><p><b> }</b></p><p><b> %></b></p><p><b> <tr></b></
103、p><p> <th height="30" colspan="3"> </th></p><p><b> </tr></b></p><p><b> </table></b></p><p&
104、gt;<b> 圖4-1</b></p><p> 4.2 用戶注冊功能</p><p> RegisterAction.java部分代碼(負(fù)責(zé)處理注冊動作)</p><p> package action;</p><p> import myutils.*;</p><p> .
105、.//部分包省略</p><p> import actionForm.RegisterActionForm;</p><p> public class RegisterAction extends Action {</p><p><b> /**</b></p><p><b> * 注冊用戶&
106、lt;/b></p><p> * 先查詢用戶是否存在</p><p> * 根據(jù)查詢結(jié)果來處理是否執(zhí)行注冊</p><p><b> */</b></p><p><b> @Override</b></p><p> public ActionForwar
107、d execute(ActionMapping mapping, ActionForm form,</p><p> HttpServletRequest request, HttpServletResponse response)</p><p> throws Exception {</p><p> RegisterActionForm raf=(R
108、egisterActionForm)form;</p><p> String username=StringUtils.StringEcode(raf.getUsername());</p><p> String password=StringUtils.StringEcode(raf.getPassword());</p><p> String pho
109、ne=StringUtils.StringEcode(raf.getPhone());</p><p> String qq=StringUtils.StringEcode(raf.getQq());</p><p> boolean isExistingUser=UserUtils.isExistingUser(username);</p><p> i
110、f(isExistingUser){</p><p> return mapping.findForward("userExisting");</p><p><b> }else{</b></p><p> boolean ok = UserUtils.addUser(username, password,phone
111、,qq);</p><p><b> if(ok){</b></p><p> return mapping.findForward("success");</p><p><b> }else{</b></p><p> return mapping.findForwa
112、rd("error");</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><
113、;b> 圖4-2</b></p><p> 4.3 修改注冊信息功能</p><p> GetUserMessAction.java(負(fù)責(zé)向用戶返回舊信息)</p><p> package action;</p><p><b> /</b></p><p><
114、b> /部分包省略</b></p><p> import org.apache.struts.action.ActionMapping;</p><p> public class GetUserMessAction extends Action {</p><p> public ActionForward execute(Action
115、Mapping mapping, ActionForm form,</p><p> HttpServletRequest request, HttpServletResponse response)</p><p> throws Exception {</p><p> UserLogin login = null;</p><p&
116、gt; HttpSession session = null;</p><p><b> try {</b></p><p> session = request.getSession(true);</p><p> login = (UserLogin)session.getAttribute("login");&
117、lt;/p><p> } catch (Exception e) {</p><p> return mapping.findForward("error");</p><p><b> }</b></p><p> if(login!=null){</p><p> R
118、esultSet rs = null;</p><p> UserMessage usermess = new UserMessage();</p><p> String username = login.getUsername();</p><p> String password = login.getPassword();</p><
119、;p> //查詢當(dāng)前用戶信息</p><p> rs = UserUtils.queryUserMess(username);</p><p> if(rs.next()){</p><p> String phone = rs.getString(3);</p><p> String qq = rs.getString(4
120、);</p><p> usermess.setUsername(username);</p><p> usermess.setPassword(password);</p><p> usermess.setPhone(phone);</p><p> usermess.setQq(qq);</p><
121、p> request.setAttribute("usermess", usermess);</p><p> return mapping.findForward("showoldmess");</p><p><b> }else{</b></p><p> return ma
122、pping.findForward("error");</p><p><b> }</b></p><p><b> }else</b></p><p> return mapping.findForward("login");</p><p&
123、gt;<b> }</b></p><p><b> }</b></p><p> UserModifyMessAction.java部分代碼(處理用戶提交的新信息)</p><p> package action;</p><p> public class UserModifyMess
124、Action extends Action {</p><p><b> @Override</b></p><p> public ActionForward execute(ActionMapping mapping, ActionForm form,</p><p> HttpServletRequest request, Http
125、ServletResponse response)</p><p> throws Exception {</p><p> RegisterActionForm raf = (RegisterActionForm)form;</p><p> String username = StringUtils.StringEcode(raf.getUsername(
126、));</p><p> String password = raf.getPassword();</p><p> String phone = raf.getPhone();</p><p> String qq = raf.getQq();</p><p> boolean ok = UserUtils.updateUserMe
127、ss(username, password, phone, qq);</p><p><b> if(ok){</b></p><p> return mapping.findForward("success");</p><p><b> }else{</b></p><p&
128、gt; return mapping.findForward("error");</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 圖4-3&l
129、t;/b></p><p> 4.4 管理新聞功能</p><p> managerNewsList.jsp(負(fù)責(zé)新聞管理頁面新聞列表)部分代碼:</p><p> <table width="260" height="50" border="0" align="center&q
130、uot;></p><p><b> <tr></b></p><p> <td> </td></p><p><b> </tr></b></p><p><b> </table></b&
131、gt;</p><p> <table align="center" border="0" cellspacing="1" bgcolor="#000000"> </p><p><b> <%</b></p><p> row.absol
132、ute((currentPage-1)*pageSize+1);</p><p> String str;//聲明一個截取時(shí)間的臨時(shí)字符串</p><p> for(int i = 1; i<= pageSize;i ++){</p><p> str = row.getString("post_time");</p>
133、<p><b> %></b></p><p> <tr bgcolor="#F1F0EB"></p><p> <td height="22"><%=(i+ (currentPage-1)*pageSize)%></td></p><p&
134、gt; <td align="left"><%=row.getString("title") %></td></p><p> <td align="center"><%=row.getString("author") %></td></p>&
135、lt;p> <td align="center"><%=str.substring(0,11) %></td></p><p> <td align="center" width="50"><a href='confirmDeleteNews.jsp?id=<%=row.get
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- jsp課程設(shè)計(jì)-新聞發(fā)布系統(tǒng)
- jsp課程設(shè)計(jì)(論文)-新聞發(fā)布系統(tǒng)
- jsp課程設(shè)計(jì)---基于jsp的新聞發(fā)布系統(tǒng)
- 新聞發(fā)布系統(tǒng)課程設(shè)計(jì)
- 新聞發(fā)布系統(tǒng)課程設(shè)計(jì)
- 新聞發(fā)布系統(tǒng)課程設(shè)計(jì)
- 新聞發(fā)布系統(tǒng)課程設(shè)計(jì)
- java課程設(shè)計(jì)-- 新聞發(fā)布系統(tǒng)
- java課程設(shè)計(jì)報(bào)告《新聞發(fā)布系統(tǒng)》
- jsp新聞發(fā)布系統(tǒng) 畢業(yè)設(shè)計(jì)
- jsp程序設(shè)計(jì)基于jsp新聞發(fā)布系統(tǒng)
- web開發(fā)課程設(shè)計(jì)-新聞發(fā)布系統(tǒng)
- web高級程序課程設(shè)計(jì)---新聞發(fā)布系統(tǒng)
- java-web新聞發(fā)布系統(tǒng)課程設(shè)計(jì)
- jsp+oracle新聞發(fā)布系統(tǒng)論文
- 新聞發(fā)布系統(tǒng)
- 新聞發(fā)布系統(tǒng)
- jsp+ORACLE新聞發(fā)布系統(tǒng)論文.doc
- web應(yīng)用基礎(chǔ)課程設(shè)計(jì)-----新聞管理與發(fā)布系統(tǒng)
- 新聞發(fā)布系統(tǒng) (2)
評論
0/150
提交評論