jsp新聞發(fā)布課程設(shè)計(jì)---新聞發(fā)布系統(tǒng)_第1頁
已閱讀1頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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">&nbsp;</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">&nbsp;</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>&nbsp;</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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論