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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  信息理工學(xué)院</b></p><p>  課程設(shè)計(jì)(實(shí)訓(xùn))報(bào)告</p><p>  系 部 _ 信息工程系__ 專(zhuān) 業(yè) _____________</p><p>  班 級(jí) 學(xué) 號(hào) ____________ </p><p>  姓

2、 名 _______________課 題 _____________</p><p>  指導(dǎo)教師 報(bào)告成績(jī) _ _ </p><p>  日 期:2011年 12 月 28 日</p><p><b>  目 錄</b></p><p><b&g

3、t;  目 錄I</b></p><p>  第1章基礎(chǔ)知識(shí)1</p><p>  1.1MySql數(shù)據(jù)庫(kù)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ù)庫(kù)設(shè)計(jì)5</p><p>  2.3 功能模塊簡(jiǎn)介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 用戶(hù)注冊(cè)功能13</p><p>  3.3 修改注冊(cè)信息功能13</p><p>  3.4 管理新聞功能13</p><p>  3.5 添加新聞功能14</p><p>  3.6管理用戶(hù)14</p><p><b>  3.7注銷(xiāo)14

6、</b></p><p>  第4章 功能實(shí)現(xiàn)15</p><p>  4.1 新聞顯示功能15</p><p>  4.2 用戶(hù)注冊(cè)功能17</p><p>  4.3 修改注冊(cè)信息功能19</p><p>  4.4 管理新聞功能20</p><p>  4.5 修改新

7、聞功能22</p><p>  4.6管理用戶(hù)24</p><p><b>  4.7注銷(xiāo)25</b></p><p><b>  第5章 總結(jié)27</b></p><p>  第6章參考文獻(xiàn)27</p><p><b>  基礎(chǔ)知識(shí)</b>&

8、lt;/p><p><b>  MySql數(shù)據(jù)庫(kù)</b></p><p>  今天MySQL已被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)。</p><p>  MySQL是一個(gè)真正的多用戶(hù)、多線(xiàn)程SQL數(shù)據(jù)庫(kù)服務(wù)

9、器。系統(tǒng)采用加載純Java數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的方式操作數(shù)據(jù)庫(kù),目前mysql還不支持橋連接。</p><p>  SQL(結(jié)構(gòu)化查詢(xún)語(yǔ)言)是世界上最流行的和標(biāo)準(zhǔn)化的數(shù)據(jù)庫(kù)語(yǔ)言。MySQL是以一個(gè)客戶(hù)機(jī)/服務(wù)器結(jié)構(gòu)的實(shí)現(xiàn),它由一個(gè)服務(wù)器守護(hù)程序mysqld和很多不同的客戶(hù)程序和庫(kù)組成,并且能夠支持多平臺(tái)。</p><p>  JSP與Servlet</p><p>  J

10、ava Servlet是一種獨(dú)立于平臺(tái)和協(xié)議的服務(wù)器端的Java應(yīng)用程序,可以生成動(dòng)態(tài)的Web頁(yè)面。</p><p>  Java Servlet是位于Web 服務(wù)器內(nèi)部的服務(wù)器端的Java應(yīng)用程序,與傳統(tǒng)的從命令行啟動(dò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)用程序,沒(méi)有main()方法。</p><p>  它們不是由用戶(hù)或程序員調(diào)用,而是由另外一個(gè)應(yīng)用程序(容器)調(diào)用。</p><p>  它們都有一個(gè)生存周期,包含init()和destroy()方法。</p&g

12、t;<p><b>  不同之處:</b></p><p>  Applet具有很好的圖形界面(AWT),與瀏覽器一起,在客戶(hù)端運(yùn)行。</p><p>  Java Servlet則沒(méi)有圖形界面,運(yùn)行在服務(wù)器端。</p><p>  Java Servlet與CGI(Common Gateway Interface) 的比較:&l

13、t;/p><p>  與傳統(tǒng)的CGI和許多其他類(lèi)似CGI的技術(shù)相比,Java Servlet具有更高的效率,更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資。在未來(lái)的技術(shù)發(fā)展過(guò)程中,Servlet有可能徹底取代CGI。</p><p><b>  高效</b></p><p>  在傳統(tǒng)的CGI中,每個(gè)請(qǐng)求都要啟動(dòng)一個(gè)新的進(jìn)程,如果CGI程序

14、本身的執(zhí)行時(shí)間較短,啟動(dòng)進(jìn)程所需要的開(kāi)銷(xiāo)很可能反而超過(guò)實(shí)際執(zhí)行時(shí)間。而在Servlet中,每個(gè)請(qǐng)求由一個(gè)輕量級(jí)的Java線(xiàn)程處理(而不是重量級(jí)的操作系統(tǒng)進(jìn)程)。</p><p>  在傳統(tǒng)CGI中,如果有N個(gè)并發(fā)的對(duì)同一CGI程序的請(qǐng)求,則該CGI程序的代碼在內(nèi)存中重復(fù)裝載了N次;而對(duì)于Java Servlet,處理請(qǐng)求的是N個(gè)線(xiàn)程,只需要一份Servlet類(lèi)代碼。在性能優(yōu)化方面,Servlet也比CGI有著更多

15、的選擇。</p><p><b>  方便</b></p><p>  Java Servlet提供了大量的實(shí)用工具例程,例如自動(dòng)地解析和解碼HTML表單數(shù)據(jù)、讀取和設(shè)置HTTP頭、處理Cookie、跟蹤會(huì)話(huà)狀態(tài)等。</p><p><b>  功能強(qiáng)大</b></p><p>  在Java Se

16、rvlet中,許多使用傳統(tǒng)CGI程序很難完成的任務(wù)都可以輕松地完成。例如,Java Servlet能夠直接和Web服務(wù)器交互,而普通的CGI程序不能。Servlet還能夠在各個(gè)程序之間共享數(shù)據(jù),使得數(shù)據(jù)庫(kù)連接池之類(lèi)的功能很容易實(shí)現(xiàn)。</p><p><b>  可移植性好</b></p><p>  Java Servlet用Java編寫(xiě),Servlet API具有完

17、善的標(biāo)準(zhǔn)。因此,為IPlanet Enterprise Server寫(xiě)的Servlet無(wú)需任何實(shí)質(zhì)上的改動(dòng)即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務(wù)器都直接或通過(guò)插件支持Servlet。</p><p><b>  節(jié)省投資</b></p><p>  不僅有許多廉價(jià)甚至免費(fèi)的Web服務(wù)器可供個(gè)人或小規(guī)模網(wǎng)站使用,而且對(duì)于

18、現(xiàn)有的服務(wù)器,如果它不支持Servlet的話(huà),要加上這部分功能也往往是免費(fèi)的(或只需要極少的投資)。</p><p>  Java Servlet與JSP(JavaServer Pages) 的比較:</p><p>  JavaServer Pages(JSP)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)HTML混合編碼的技術(shù),JSP并沒(méi)有增加任何本質(zhì)上不能用Servlet實(shí)現(xiàn)的功能。但是,在 JS

19、P中編寫(xiě)靜態(tài)HTML更加方便,不必再用println語(yǔ)句來(lái)輸出每一行HTML代碼。更重要的是,借助內(nèi)容和外觀(guān)的分離,頁(yè)面制作中不同性質(zhì)的任務(wù)可以方便地分開(kāi):比如,由頁(yè)面設(shè)計(jì)者進(jìn)行HTML設(shè)計(jì),同時(shí)留出供Java Servlet程序員插入動(dòng)態(tài)內(nèi)容的空間。</p><p>  1.3 Struts框架</p><p>  在我學(xué)習(xí)Struts框架時(shí),我本人更愿意看到Struts的本質(zhì),其實(shí)S

20、trurts框架就是一個(gè)核心類(lèi)ActionServlet,這個(gè)類(lèi)把所有請(qǐng)求都劫走了,然后根據(jù)請(qǐng)求的URL轉(zhuǎn)發(fā)到相應(yīng)的Action上,讓Action處理相應(yīng)的系統(tǒng)業(yè)務(wù),表單數(shù)據(jù)由Struts替我們進(jìn)行封裝FormBean中,我們只需取出來(lái)進(jìn)行操作。在有Struts框架編程時(shí)我們不需要認(rèn)真考慮里面的機(jī)制,而是要學(xué)會(huì)如何更好的去運(yùn)用它。</p><p>  如果有一天我愿意,我會(huì)在我做的項(xiàng)目中手動(dòng)編寫(xiě)一個(gè)框架。<

21、/p><p>  Strusts框架的基本組成如下:</p><p>  1,Client browser(客戶(hù)瀏覽器)    來(lái)自客戶(hù)瀏覽器的每個(gè) HTTP 請(qǐng)求創(chuàng)建一個(gè)事件。Web 容器將用一個(gè) HTTP 響應(yīng)作出響應(yīng)。        2,Controller(控制器)  

22、60; 控制器接收來(lái)自瀏覽器的請(qǐng)求,并決定將這個(gè)請(qǐng)求發(fā)往何處。    就 Struts 而言,控制器是以 servlet 實(shí)現(xiàn)的一個(gè)命令設(shè)計(jì)模式。 struts-config.xml 文件配置控制器命令。  3,業(yè)務(wù)邏輯    業(yè)務(wù)邏輯更新模型的狀態(tài),并幫助控制應(yīng)用程序的流程。    就 Struts 而言,這是通過(guò)作為實(shí)際業(yè)務(wù)邏輯“瘦”包裝的

23、Action 類(lèi)完成的?! ?,Model(模型)的狀態(tài)    模型表示應(yīng)用程序的狀態(tài)。業(yè)務(wù)對(duì)象更新應(yīng)用程序的狀態(tài)。    ActionForm bean 在會(huì)話(huà)級(jí)或請(qǐng)求級(jí)表示模型的狀態(tài),而不是在持久級(jí)。    JSP 文件使用 JSP 標(biāo)記讀取來(lái)自 ActionForm bean 的信息。    

24、60;   5,View(視圖)    視圖就是一個(gè) JSP 文件。其中沒(méi)有流程邏輯,沒(méi)有業(yè)務(wù)邏輯,也沒(méi)有模型信息 —— 只有標(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)開(kāi)發(fā)過(guò)程中尋找需求是一件十分重要的工作,在認(rèn)真分析和調(diào)查后確定了本系統(tǒng)的需求要求。</p><p>  本系統(tǒng)參與者:管理員、普通用戶(hù)、瀏覽者。</p><p><b

26、>  系統(tǒng)功能模塊:</b></p><p><b>  新聞瀏覽</b></p><p><b>  用戶(hù)登陸</b></p><p><b>  用戶(hù)注冊(cè)</b></p><p><b>  用戶(hù)修改信息</b></p>

27、<p><b>  管理新聞</b></p><p><b>  添加新聞</b></p><p><b>  管理用戶(hù)</b></p><p><b>  注銷(xiāo)</b></p><p><b>  圖2-1</b><

28、;/p><p><b>  2.2 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p>  數(shù)據(jù)庫(kù)命名為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 功能模塊簡(jiǎn)介</p><p><b>  新聞瀏覽</b></p><p>  首頁(yè)顯示網(wǎng)站所有新聞列表,根據(jù)新聞的數(shù)量分頁(yè),網(wǎng)站顧客可以自由瀏覽新聞。</p><p><b>  用戶(hù)登陸</b></p><p>  用戶(hù)登界面,用戶(hù)需根據(jù)自己的類(lèi)型(普通用戶(hù),管理員)進(jìn)行選擇

31、性登陸,登錄時(shí)需要填寫(xiě)驗(yàn)證碼。注意本系統(tǒng)部分功能只有在登陸后才被激活,且不同用戶(hù)類(lèi)型登陸后所具有的功能也不同。</p><p>  圖2-5是用戶(hù)登錄用例圖</p><p><b>  圖2-5</b></p><p><b>  用戶(hù)注冊(cè)</b></p><p>  注冊(cè)模塊僅服務(wù)于普通用戶(hù),在網(wǎng)

32、站上注冊(cè)的用戶(hù)身份僅是普通用戶(hù),管理員需到服務(wù)器注冊(cè)信息。</p><p>  圖2-6新用戶(hù)注冊(cè)狀態(tài)圖</p><p><b>  圖2-6</b></p><p><b>  用戶(hù)修改信息</b></p><p>  普通用戶(hù)登陸后才能修改自己的信息,為了確保系統(tǒng)安全系統(tǒng)管理員不能在客戶(hù)端修改信

33、息,必須到服務(wù)器數(shù)據(jù)庫(kù)直接修改信息。</p><p>  圖2-7用戶(hù)修改信息序列圖</p><p><b>  圖2-7</b></p><p><b>  管理新聞</b></p><p>  用戶(hù)登陸后此模塊被激活,為了確保其他用戶(hù)在本站的利益,用戶(hù)僅可以管理自己的新聞,管理新聞包括(刪除,修

34、改),系統(tǒng)管理員可以管理所有用戶(hù)發(fā)表的新聞。</p><p>  圖2-8用戶(hù)管理新聞?dòng)美龍D</p><p><b>  圖2-8</b></p><p><b>  添加新聞</b></p><p>  用戶(hù)登錄后可以發(fā)布新聞,發(fā)布的新聞將在系統(tǒng)首頁(yè)新聞列表中顯示出來(lái),用戶(hù)在發(fā)表新聞時(shí)若不填寫(xiě)作者

35、,系統(tǒng)默認(rèn)當(dāng)前用戶(hù)為作者。發(fā)表時(shí)間不用填寫(xiě),由系統(tǒng)根據(jù)服務(wù)器時(shí)間默認(rèn)。</p><p><b>  管理用戶(hù)</b></p><p>  此模塊專(zhuān)屬于系統(tǒng)管理員,系統(tǒng)管理員登陸后,可以查看本系統(tǒng)存在的所有普通用戶(hù)的信息,信息包括(用戶(hù)名,密碼,聯(lián)系電話(huà),即時(shí)通信QQ)。</p><p>  管理員可以根據(jù)需要,對(duì)系統(tǒng)中的任何用戶(hù)進(jìn)行封號(hào)處理。&

36、lt;/p><p>  圖2-9管理員管理用戶(hù)用例圖</p><p><b>  圖2-9</b></p><p><b>  注銷(xiāo)</b></p><p>  當(dāng)用戶(hù)登錄后,不再進(jìn)行操作時(shí),為了減少服務(wù)器資源的浪費(fèi)和自身賬戶(hù)的安全性,可以進(jìn)行注銷(xiāo)。</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的日志輸出等級(jí)</p><p>  配置Apache的第三方組件的日志輸出等級(jí)</p><p>  當(dāng)Tomcat啟動(dòng)的時(shí)候執(zhí)行ActionServlet的初始化方法</p><p>  提供struts-config.xml文件</p><p>  應(yīng)用struts創(chuàng)建登錄項(xiàng)目<

39、;/p><p>  創(chuàng)建jsp頁(yè)面(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>  是一個(gè)Servlet,需要在web.xml中配置</p><p>  ActionForm</p><p><b>  封裝頁(yè)面提交的數(shù)據(jù)&l

41、t;/b></p><p>  繼承自org.apache.struts.action.ActionForm </p><p>  需要在struts-config.xml中配置</p><p>  與JSP的交互:從頁(yè)面獲取數(shù)據(jù)loginActionForm.getUsername(); 發(fā)送數(shù)據(jù)到頁(yè)面request.setAttribute(&quo

42、t;username",username);</p><p>  Action[****Action.java]</p><p><b>  封裝一類(lèi)客戶(hù)操作</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ù)器啟動(dòng)時(shí),Struts裝載struts-config.xml信息</p><p>  服務(wù)器啟動(dòng)后,根據(jù)web.xml加載ActionServlet讀取str

44、uts-config.xml文件內(nèi)容到內(nèi)存。</p><p>  輸入用戶(hù)名密碼提交表單、提交到action屬性的login.do,通過(guò)ActionServlet讀struts-config.xml文件找到 action下的path屬性找到.do,通過(guò)name屬性找form-beans中的form-bean的name屬性得到ActionForm的包名類(lèi)名,先實(shí)例化form,把表單的值填充給form,調(diào)用form的

45、validate方法驗(yàn)證、ActionErrors返回null表示驗(yàn)證通過(guò),否則失敗返回input指定的頁(yè)面.驗(yàn)證通過(guò)會(huì)實(shí)例化Action,執(zhí)行Action的excute方。</p><p>  整個(gè)項(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>  首頁(yè)(index.jsp)負(fù)責(zé)顯示新聞列表,點(diǎn)擊新聞標(biāo)題將顯示出新聞詳細(xì)內(nèi)容,新聞標(biāo)題上加有鏈接,鏈接到showNewsDeatil.Jsp頁(yè)面,此頁(yè)面負(fù)責(zé)顯示新聞詳細(xì)內(nèi)容(標(biāo)題,發(fā)表時(shí)間,內(nèi)容,作者)。根據(jù)新聞條數(shù)NewsTurnPageAction.java負(fù)責(zé)新

72、聞列表分頁(yè),點(diǎn)擊“上一頁(yè)”“下一頁(yè)”實(shí)現(xiàn)分頁(yè)。</p><p>  新聞內(nèi)容都存與UserBean 的實(shí)例化對(duì)象user中,數(shù)據(jù)封裝好后存放到session中供用戶(hù)讀取。</p><p>  3.2 用戶(hù)注冊(cè)功能</p><p>  register.jsp頁(yè)面負(fù)責(zé)提交新用戶(hù)注冊(cè)信息,信息提交給Struts,有RegisterActionForm.java把表單數(shù)據(jù)

73、接收過(guò)來(lái)封裝,Register.java從FormBean(RegisterActionForm.java)中把數(shù)據(jù)提取出來(lái),進(jìn)行檢測(cè),首先檢測(cè)用戶(hù)名,檢查是否已被注冊(cè),此過(guò)程用到myutils包中的UserUtils類(lèi)。</p><p>  此系統(tǒng)支持漢化用戶(hù)名,所以用戶(hù)名還要進(jìn)行編碼處理,用以保障用漢字注冊(cè)用戶(hù)名的用戶(hù)。</p><p>  注冊(cè)成功返回success.jsp 否則返回

74、error.jsp頁(yè)面。</p><p>  3.3 修改注冊(cè)信息功能</p><p>  此模塊登陸后才能被激活,此模塊是普通用戶(hù)設(shè)計(jì)的,管理員不可以在客戶(hù)端修改信息,modifyUserMess.jsp頁(yè)面負(fù)責(zé)修改。</p><p>  當(dāng)用戶(hù)登陸后,點(diǎn)擊修改,GetUserOldMessAction.java負(fù)責(zé)查詢(xún)用戶(hù)信息,得到信息后,把信息存放到UserM

75、essage.java的實(shí)例化對(duì)象userMess中,然后modifyUserMess.jsp頁(yè)面引入userMess對(duì)象獲得舊的信息,修改后提交給ActionServlet.java類(lèi),ActionServlet根據(jù)Struts-config.xml中的URL配置再轉(zhuǎn)發(fā)到ModifyUserMessAction.java,經(jīng)過(guò)處理后最終存入數(shù)據(jù)庫(kù)中。</p><p>  3.4 管理新聞功能</p>

76、<p>  此模塊登錄后被激活,普通用戶(hù)登陸后僅可以管理自己的新聞,管理項(xiàng)目包括(刪除,修改)。</p><p>  管理員登陸后可管理數(shù)據(jù)庫(kù)中所有的新聞,管理項(xiàng)目包括(刪除,修改)。</p><p>  刪除新聞基本實(shí)現(xiàn)流程:managerUserAction.jsp顯示新聞列表,單擊“刪除”——>confirmDeleteNews.Jsp——>DeleteNe

77、wsAction.java最終SqlUtils.java工具類(lèi)根據(jù)接收到的id號(hào),從數(shù)據(jù)庫(kù)的news表把相應(yīng)的新聞刪除。</p><p>  編輯新聞基本實(shí)現(xiàn)流程:?jiǎn)螕簟靶薷摹薄?gt;modifyNews.jsp(負(fù)責(zé)顯示當(dāng)前新聞,并提交新新聞)——>ModifyNewsAction.java(處理后存入數(shù)據(jù)庫(kù))。</p><p>  3.5 添加新聞功能</p>

78、<p>  添加新聞的最低用戶(hù)級(jí)別是普通用戶(hù),用戶(hù)登錄后可以在addNews.jsp頁(yè)面添加新聞,新聞提交給Struts,ActionServlet.java負(fù)責(zé)分發(fā)給相應(yīng)的Action類(lèi)處理,給據(jù)配置文件的FormBean把提交的新聞信息封裝,然后AddNews.java類(lèi)從FormBean(AddNewsActionForm.java)中取出數(shù)據(jù)處理后存入news表中。</p><p>  添加新聞

79、基本流程:addNews.jsp——>AddNewsAction.java——>SqlUtils.java(工具類(lèi))——>news新聞表。</p><p><b>  3.6管理用戶(hù)</b></p><p>  此模塊系統(tǒng)管理員專(zhuān)有,系統(tǒng)管理員登錄后,此模塊被激活。</p><p>  managerUserList.jsp頁(yè)

80、面負(fù)責(zé)顯示用戶(hù)列表,管理員可以根據(jù)需要對(duì)個(gè)別用戶(hù)進(jìn)行封號(hào)處理。點(diǎn)擊刪除,把對(duì)應(yīng)用戶(hù)的用戶(hù)名最終傳遞給SqlUtils.java(工具類(lèi)),由工具類(lèi)實(shí)施刪除。</p><p>  封號(hào)實(shí)現(xiàn)流程:點(diǎn)擊“刪除”——>confirmDeleteUser.jap——>DeleteUserAction.java——>SqlUtils.java(工具類(lèi):根據(jù)接收到的用戶(hù)名,在數(shù)據(jù)庫(kù)mynews的User表中刪

81、除相應(yīng)用戶(hù))。</p><p><b>  3.7注銷(xiāo)</b></p><p>  ExitAction.java負(fù)責(zé)注銷(xiāo),當(dāng)用戶(hù)登錄后,不再進(jìn)行操作點(diǎn)擊導(dǎo)航欄上的“注銷(xiāo)”系統(tǒng)會(huì)銷(xiāo)毀當(dāng)前session。</p><p>  基本實(shí)現(xiàn)流程:點(diǎn)擊“注銷(xiāo)”——>ExitAction.java(銷(xiāo)毀當(dāng)前session對(duì)象)。</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é)首頁(yè)新聞?lì)}目列表):</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;//聲明一個(gè)截取時(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 用戶(hù)注冊(cè)功能</p><p>  RegisterAction.java部分代碼(負(fù)責(zé)處理注冊(cè)動(dòng)作)</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>  * 注冊(cè)用戶(hù)&

106、lt;/b></p><p>  * 先查詢(xún)用戶(hù)是否存在</p><p>  * 根據(jù)查詢(xún)結(jié)果來(lái)處理是否執(zhí)行注冊(cè)</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 修改注冊(cè)信息功能</p><p>  GetUserMessAction.java(負(fù)責(zé)向用戶(hù)返回舊信息)</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>  //查詢(xún)當(dāng)前用戶(hù)信息</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部分代碼(處理用戶(hù)提交的新信息)</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é)新聞管理頁(yè)面新聞列表)部分代碼:</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;//聲明一個(gè)截取時(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論