Java Web 開發(fā)從入門到實(shí)踐課件 第14章 - 項(xiàng)目案例:企業(yè)新聞管理系統(tǒng)_第1頁
Java Web 開發(fā)從入門到實(shí)踐課件 第14章 - 項(xiàng)目案例:企業(yè)新聞管理系統(tǒng)_第2頁
Java Web 開發(fā)從入門到實(shí)踐課件 第14章 - 項(xiàng)目案例:企業(yè)新聞管理系統(tǒng)_第3頁
Java Web 開發(fā)從入門到實(shí)踐課件 第14章 - 項(xiàng)目案例:企業(yè)新聞管理系統(tǒng)_第4頁
Java Web 開發(fā)從入門到實(shí)踐課件 第14章 - 項(xiàng)目案例:企業(yè)新聞管理系統(tǒng)_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五篇

項(xiàng)目實(shí)踐篇JavaWeb開發(fā)從入門到實(shí)踐JavaWebDevelopmentFromIntroductiontoPractice項(xiàng)目案例Chap14企業(yè)新聞管理系統(tǒng):提綱項(xiàng)目案例:企業(yè)新聞管理系統(tǒng)項(xiàng)目設(shè)計(jì)主要圍繞系統(tǒng)的功能需求與架構(gòu)進(jìn)行規(guī)劃,數(shù)據(jù)庫設(shè)計(jì)包括數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)和創(chuàng)建數(shù)據(jù)庫,系統(tǒng)管理包括準(zhǔn)備系統(tǒng)開發(fā)環(huán)境、JSP頁面管理和組件與Servlet管理,組件設(shè)計(jì)確保各模塊高效協(xié)作,后臺管理子系統(tǒng)實(shí)現(xiàn)新聞相關(guān)功能,前臺展示子系統(tǒng)提供新聞瀏覽功能。14.1項(xiàng)目設(shè)計(jì)14.2數(shù)據(jù)庫設(shè)計(jì)14.3系統(tǒng)管理14.4組件設(shè)計(jì)14.5后臺管理子系統(tǒng)的實(shí)現(xiàn)14.6前臺展示子系統(tǒng)的實(shí)現(xiàn)14.7本章小結(jié)14.1項(xiàng)目設(shè)計(jì)14.1.1系統(tǒng)功能需求14.1.2功能結(jié)構(gòu)14.1.1系統(tǒng)功能需求后臺新聞管理子系統(tǒng)前臺信息展示子系統(tǒng)14.1.2功能結(jié)構(gòu)圖

14-1

系統(tǒng)功能結(jié)構(gòu)圖14.2數(shù)據(jù)庫設(shè)計(jì)14.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)14.2.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)14.2.3創(chuàng)建數(shù)據(jù)庫14.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)在設(shè)計(jì)數(shù)據(jù)庫之前,需要明確系統(tǒng)有哪些實(shí)體對象,根據(jù)實(shí)體對象間的關(guān)系設(shè)計(jì)數(shù)據(jù)庫。E-R圖能夠直觀地表示實(shí)體類型和屬性之間的關(guān)聯(lián)關(guān)系。下面根據(jù)新聞管理系統(tǒng)的需求為本項(xiàng)目的核心實(shí)體對象設(shè)計(jì)E-R圖,具體如下。(1)用戶實(shí)體(user)的E-R圖圖

14-2

用戶實(shí)體的E-R圖14.2.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)(2)新聞實(shí)體(news)的E-R圖圖

14-3

新聞實(shí)體的E-R圖(3)公告實(shí)體(notice)的E-R圖圖

14-4

公告實(shí)體的E-R圖14.2.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)將數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計(jì)中的E-R圖轉(zhuǎn)換為MySQL數(shù)據(jù)庫所支持的實(shí)際數(shù)據(jù)模型,即數(shù)據(jù)庫的邏輯結(jié)構(gòu)。(1)用戶信息表(user)表

14-1用戶信息表字段名類型是否為空是否為主鍵描述useridint否是用戶編號usernamevarchar(50)否否用戶名passwordvarchar(50)否否密碼emailvarchar(50)否否電子郵箱roletinyint是否角色(1管理員0普通用戶)lastlogintimevarchar(50是否最后登錄時間14.2.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)(2)新聞表(news)表

14-2新聞表字段名類型是否為空是否為主鍵描述newsidint否是新聞編號newstitlevarchar(50)否否新聞標(biāo)題newscontentvarchar(500)否否新聞內(nèi)容newstimevarchar(50)是否發(fā)布時間adminnamevarchar(50)是否發(fā)布人用戶名14.2.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計(jì)(3)公告表(notice)表

14-3公告表字段名類型是否為空是否為主鍵描述noticeidint否是公告編號noticetitlevarchar(50)否否公告標(biāo)題noticecontentlongtext是否公告內(nèi)容noticetimevarchar(50)否否發(fā)布時間adminnametinyint否否發(fā)布人用戶名14.2.3創(chuàng)建數(shù)據(jù)庫根據(jù)14.2.2小節(jié)的邏輯結(jié)構(gòu),創(chuàng)建數(shù)據(jù)表。14.3系統(tǒng)管理14.3.1準(zhǔn)備系統(tǒng)開發(fā)環(huán)境14.3.2JSP頁面管理

14.3.3組件與Servlet管理14.3.1準(zhǔn)備系統(tǒng)開發(fā)環(huán)境系統(tǒng)開發(fā)環(huán)境導(dǎo)入相關(guān)的jar包本系統(tǒng)的軟件開發(fā)及運(yùn)行環(huán)境如下。(1)操作系統(tǒng):Windows10或更高的Windows版本(2)JDK環(huán)境:corretto-17javaversion"17.0.9"(3)開發(fā)工具:IntelliJIDEA2023(4)Web服務(wù)器:apache-tomcat-10.0.27(5)數(shù)據(jù)庫:MySQL8.0.32(6)瀏覽器:推薦谷歌或火狐瀏覽器本系統(tǒng)采用純Java數(shù)據(jù)庫驅(qū)動程序連接MySQL8.0.32,使用Servlet作為控制器,頁面使用EL表達(dá)式和JSTL標(biāo)簽庫展示數(shù)據(jù),所以需要將mysql-connector-java-8.0.16.jar、servlet-api.jar、jakarta.servlet.jsp.jstl-2.0.0.jar、jakarta.servlet.jsp.jstl-api-2.0.0.jar添加到項(xiàng)目中。14.3.2JSP頁面管理本系統(tǒng)由后臺管理和前臺展示兩個子系統(tǒng)組成前臺展示子系統(tǒng)圖

14-1

前臺主界面14.3.2JSP頁面管理首頁index.jsp核心代碼<divclass="bgStyle">

<divclass="header">

<divclass="logo">

<h2style="color:white;font:bold30px楷體">企業(yè)新聞管理系統(tǒng)</h2>

</div>

<divclass="cssmenu">

<ul>

<li><ahref="index.jsp">首頁</a></li>

<li><ahref="about.jsp">企業(yè)簡介</a></li>

<li><ahref="newsListFrontServlet">新聞</a></li>

<li><ahref="noticeListFrontServlet">公告</a></li>

<li><ahref="../admin/register.jsp">注冊</a></li>

<li><ahref="../admin/login.jsp">進(jìn)入后臺</a></li>

</ul>

</div>

<divclass="clear"></div>

</div>

</div><divclass="second_banner"><imgsrc="img/img2.jpg"></div>14.3.2JSP頁面管理后臺管理子系統(tǒng)圖

14-4

新聞列表頁面14.3.2JSP頁面管理后臺管理新聞列表頁面news.jsp的核心代碼...

<linkrel="stylesheet"href="css/amazeui.min.css"/><linkrel="stylesheet"href="css/admin.css"/><scriptsrc="js/main.js"></script><scriptsrc="js/news.js"></script>

...<headerclass="am-topbaradmin-header"style="background-color:#2167A9;height:60px">

<divclass="am-topbar-brand"style="color:white;font-size:20px">

<strong>企業(yè)新聞管理系統(tǒng)</strong><small>后臺管理</small>

</div>

<divclass="am-collapseam-topbar-collapse"id="topbar-collapse">

<ulclass="am-navam-nav-pillsam-topbar-navam-topbar-rightadmin-header-list">

<liclass="am-dropdown"> <aclass="am-dropdown-toggle"style="color:white"

href="LogoutServlet">退出

</a> </li>

</ul>

</div>

</header>...

14.3.2JSP頁面管理<divclass="admin-sidebaram-offcanvas"style="background-color:#859FCD;margin:10px10px"id="admin-offcanvas">

<divclass="am-offcanvas-baradmin-offcanvas-bar"style="height:200px">

<ulclass="am-listadmin-sidebar-list">

<listyle="background-color:#859FCD;"> <ahref="newsListServlet"style="color:white"title="新聞管理"> <imgsrc="img/title1.png"width="25px"/>新聞管理</a></li>

<listyle="background-color:#859FCD;"> <ahref="noticeListServlet"style="color:white"title="公告管理">

<imgsrc="img/title2.png"width="25px"/>公告管理</a></li>

<li

style="background-color:#859FCD;"> <ahref="userListServlet"style="color:white"title="用戶管理">

<imgsrc="img/title3.png"width="25px"/>用戶管理</a></li>

</ul>

</div>

</div>...

14.3.3組件與Servlet管理本系統(tǒng)使用的組件與Servlet包層次結(jié)構(gòu)如圖14-5所示。圖

14-5

包層次結(jié)構(gòu)圖(1)dao包。dao包中存放的Java程序是實(shí)現(xiàn)數(shù)據(jù)庫的操作。BaseDao里面存放通用的方法,如獲取數(shù)據(jù)庫連接對象、釋放資源、執(zhí)行增刪改操作和執(zhí)行查詢的方法,提高了代碼的復(fù)用。有關(guān)新聞管理系統(tǒng)的數(shù)據(jù)訪問在該類中。(2)filter包。filter包中包含中文亂碼(EncodingFilter)和登錄驗(yàn)證(LoginCheckFilter)二個過濾器。(3)pojo包。pojo包中的類是實(shí)現(xiàn)數(shù)據(jù)封裝的實(shí)體bean。(4)servlet包。servlet包中存放的類用來接收客戶端請求和響應(yīng)數(shù)據(jù)。(5)utils包。utils包中存放的是系統(tǒng)的工具類,包括類型轉(zhuǎn)換等。14.4組件設(shè)計(jì)14.4.1過濾器14.4.2驗(yàn)證碼

14.4.3實(shí)體模型14.4.4數(shù)據(jù)庫操作14.4.5工具類14.4.1過濾器本系統(tǒng)使用了字符編碼和登錄驗(yàn)證二個過濾器。設(shè)置字符編碼過濾器publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{

//轉(zhuǎn)子接口

HttpServletRequestrequest=(HttpServletRequest)servletRequest;

HttpServletResponseresponse=(HttpServletResponse)servletResponse;

response.setContentType("text/html;charset=UTF-8");

//獲取請求方式

Stringmethod=request.getMethod();

14.4.1過濾器

//處理請求亂碼

if(method.equalsIgnoreCase("POST")){//POST方式

request.setCharacterEncoding("UTF-8");

}else{//GET方式

//取出key-value鍵值對

Mapmap=request.getParameterMap();

Set<String>keys=map.keySet();

for(Stringkey:keys){

//根據(jù)key取值

String[]values=(String[])map.get(key);

for(inti=0;i<values.length;i++){

values[i]=newString(values[i].getBytes("iso-8859-1"),"UTF-8");//轉(zhuǎn)碼

}

}

}

//放行

filterChain.doFilter(request,response);

}14.4.1過濾器登錄驗(yàn)證過濾器publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)servletRequest;HttpServletResponseresponse=(HttpServletResponse)servletResponse;HttpSessionsession=request.getSession();Stringrequest_uri=request.getRequestURI();StringctxPath=request.getContextPath();Stringuri=request_uri.substring(ctxPath.length());Objectuser=session.getAttribute("user");if(user==null&&(uri.contains("news")||uri.contains("user")||uri.contains("notice"))){ PrintWriterout=response.getWriter(); out.println("<script>alert('請先登錄!');location.href='login.jsp';</script>");}else{ filterChain.doFilter(request,response);}}14.4.1過濾器web.xml配置過濾器<!--處理亂碼過濾器--><filter><filter-name>EncodingFilter</filter-name><filter-class>com.swxy.filter.EncodingFilter</filter-class></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--登錄驗(yàn)證過濾器--><filter><filter-name>LoginCheckFilter</filter-name><filter-class>com.swxy.filter.LoginCheckFilter</filter-class></filter><filter-mapping><filter-name>LoginCheckFilter</filter-name><url-pattern>/admin/*</url-pattern></filter-mapping>14.4.2驗(yàn)證碼編寫ValidateCodeServlet.java生成驗(yàn)證碼packagecom.swxy.servlet;

importjakarta.servlet.ServletException;

importjakarta.servlet.ServletOutputStream;

//省略導(dǎo)入包publicclassValidateCodeServletextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

doPost(req,resp);

}

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

Stringcode="";//存放驗(yàn)證碼

//一、準(zhǔn)備畫板、畫筆

intwidth=80;

intheight=30;

BufferedImagebi=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//畫板

Graphicsgraphics=bi.getGraphics();//畫筆

14.4.2驗(yàn)證碼

//二、畫圖

//1、填充背景

graphics.setColor(Color.white);

graphics.fillRect(0,0,width,height);

//2、畫矩形邊框

graphics.setColor(Color.gray);

graphics.drawRect(0,0,width-1,height-1);

Randomrandom=newRandom();

//3、畫噪音碼

for(inti=1;i<=80;i++){

intr=random.nextInt(255);

intg=random.nextInt(255);

intb=random.nextInt(255);

graphics.setColor(newColor(r,g,b));

graphics.drawOval(random.nextInt(width),random.nextInt(height),2,1);

}

14.4.2驗(yàn)證碼

//4、畫干擾線

graphics.drawLine(0,0,random.nextInt(width),random.nextInt(height));

graphics.drawLine(random.nextInt(width),random.nextInt(height),random.nextInt(width),random.nextInt(height));

graphics.drawLine(random.nextInt(width),random.nextInt(height),random.nextInt(width),random.nextInt(height));

//5、畫字母或數(shù)字

graphics.setFont(newFont("楷體",Font.ITALIC,30));//設(shè)置字體

intr=random.nextInt(125);

intg=random.nextInt(125);

intb=random.nextInt(125);

graphics.setColor(newColor(r,g,b));//顏色

char[]ch={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'};

14.4.2驗(yàn)證碼 for(inti=1;i<=4;i++){

charc=ch[random.nextInt(ch.length)];

code+=c+"";

graphics.drawString(c+"",16*i,24);

}

HttpSessionsession=req.getSession();

session.setAttribute("code",code);//隨機(jī)生成的驗(yàn)證碼放入session作用域

resp.setCharacterEncoding("utf-8");

ServletOutputStreamsos=resp.getOutputStream();

ImageIO.write(bi,"jpg",sos);//參數(shù)1:畫板

參數(shù)2:圖形格式

參數(shù)3:輸出流

sos.close();

}

}14.4.3實(shí)體模型在控制層(Servlet)使用實(shí)體模型封裝JSP頁面提交的信息,然后由控制層將實(shí)體模型傳遞給業(yè)務(wù)層(Service)、數(shù)據(jù)層(DAO)。14.4.4數(shù)據(jù)庫操作本系統(tǒng)有關(guān)數(shù)據(jù)庫操作的Java類位于包dao中,為了方便管理,復(fù)用代碼,常用的數(shù)據(jù)庫操作都由BaseDao實(shí)現(xiàn)。新聞管理代碼由NewsDao實(shí)現(xiàn),公告管理代碼由NoticeDao實(shí)現(xiàn),用戶管理代碼由UsersDao實(shí)現(xiàn)。14.4.5工具類工具類CommonUtils.java14.5后臺管理子系統(tǒng)的實(shí)現(xiàn)14.5.1用戶注冊14.5.2用戶登錄

14.5.3新聞列表頁面14.5.4添加新聞14.5.5修改新聞14.5.6刪除新聞14.5.1用戶注冊視圖圖

14-6

用戶注冊界面14.5.1用戶注冊控制器該控制器Servlet對象的<url-pattern>是/admin/RegisterServlet,控制器獲取視圖的請求后,將視圖中的信息封裝在實(shí)體模型News中,傳遞給數(shù)據(jù)層。注冊成功后跳到登錄界面進(jìn)行登錄RegisterServlet.java核心代碼...UsersDaousersDao=newUsersDao();HttpSessionsession=req.getSession();//驗(yàn)證碼生成后放在session中,這里獲取session中的驗(yàn)證碼ObjectsessionCode=session.getAttribute("code");14.5.1用戶注冊if(sessionCode.toString().equals(code)){ booleanresult=usersDao.registerUser(user); if(result){ session.setAttribute("user",user);

out.println("<SCRIPTLANGUAGE='JavaScr

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論