![](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/83253f55-707d-430e-a83f-6f37fbbcf960/83253f55-707d-430e-a83f-6f37fbbcf960pic.jpg)
![jsp新聞發(fā)布課程設(shè)計(jì)---新聞發(fā)布系統(tǒng)_第1頁(yè)](https://static.zsdocx.com/FlexPaper/FileRoot/2019-6/5/22/83253f55-707d-430e-a83f-6f37fbbcf960/83253f55-707d-430e-a83f-6f37fbbcf9601.gif)
版權(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"> </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"> </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> </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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 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開(kāi)發(fā)課程設(shè)計(jì)-新聞發(fā)布系統(tǒng)
- web高級(jí)程序課程設(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)
評(píng)論
0/150
提交評(píng)論