




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
山東財(cái)經(jīng)7.13實(shí)訓(xùn)筆同步云盤 雜Oracle數(shù)據(jù)庫(kù)的服導(dǎo)入工程之后的Jar文導(dǎo)入老師給大家的工程時(shí),如果JDK的版本不統(tǒng)一使用本方法處理MyEclipse的中文編碼設(shè)置(UTF-頁(yè)面導(dǎo)航的兩種方客戶端重定服務(wù)器轉(zhuǎn)表URL重寫格式:資源?參數(shù)名=參數(shù)值&參數(shù)名=工具安JDK的安裝路徑:C:\ProgramJDK的安裝配置環(huán)境變量原注意:path就是在原內(nèi)容前加入數(shù)據(jù)庫(kù)環(huán)境配配置sql可視化工具創(chuàng)建sys賬號(hào)的連sys在sys賬號(hào)下創(chuàng)建實(shí)訓(xùn)用賬號(hào)[sdcj]Oracle中一般只有一個(gè)庫(kù)。不同的項(xiàng)目會(huì)創(chuàng)建不用賬號(hào)來進(jìn)行管理步驟1:用戶名中[sdcj][123456]步驟2:設(shè)置測(cè)試:在其他用戶中可以看到創(chuàng)建的新用使用新的賬號(hào)[sdcj:123456]創(chuàng)建連加載實(shí)訓(xùn)用數(shù)據(jù)庫(kù)表結(jié)構(gòu)和表記一共有 。只有Users表中沒有數(shù)據(jù)JDBC:javadatabaseconnection一種技術(shù)DeleteJDBC本身只是一規(guī)范。JDBC中大量接口。 的接口java.sql.Connection接口:負(fù)責(zé)連接數(shù)據(jù)庫(kù)。整個(gè)JDBC操作的 java.sql.Statement接口:負(fù)責(zé)操作數(shù)據(jù)庫(kù),執(zhí)行CRUDjava.sql.ResultSet接口:結(jié)果集,負(fù)責(zé)接收查詢結(jié)果。理解二維表格基本操作步步驟1:獲得數(shù)據(jù)連接對(duì)象,Connection步驟2:通過Statement接口向數(shù)據(jù)發(fā)送SQL步驟3:如果執(zhí)行查詢,則使用ResultSet結(jié)果集對(duì)象獲取查詢結(jié)果。步驟4:關(guān)閉連接。案例1:實(shí)現(xiàn)對(duì)數(shù)據(jù)表Users插入一條記步驟1:為工程導(dǎo)入連接數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類(第 的Jar文件。驅(qū)動(dòng)類是由每一個(gè)數(shù)據(jù)庫(kù)廠商提供的對(duì)Connection接口的實(shí)現(xiàn)類。要想通過JDBC操作數(shù)據(jù)庫(kù),就一定要先拿到數(shù)據(jù)庫(kù)的提供的驅(qū)動(dòng)類在工程中創(chuàng)建Floder。名稱為將ojdbc6.jar文件放到 里右鍵jar文件>buildpathaddto步驟2:創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象JDBC創(chuàng)建數(shù)據(jù)庫(kù)連接時(shí)使用四大參數(shù)項(xiàng):連接驅(qū)動(dòng)類,URL地址(連接字符串[sdcj],//步驟1StringdriverClassName="oracle.jdbc.driver.OracleDriver";Stringurl="jdbc:oracle:thin:@localhost:1521:xe";Connectionconn=DriverManager.getConnection(url,"sdcj",步驟3:執(zhí)行SQL語(yǔ)users表的結(jié)構(gòu)//步驟2StatementSQLStringsql="INSERTINTOUSERS//步驟2StatementSQLStringsql="INSERTINTOUSERS(USER_NAME,USER_PASS)VALUES ','123456')";PreparedStatementpstat=步驟4:關(guān)閉數(shù)據(jù)庫(kù)4:關(guān)閉連接。完整代碼publicstaticvoidmain(String[]args)throwsException//步驟1StringdriverClassName=Stringurl=Connectionconn=DriverManager.getConnection(url,"sdcj","123456");//步驟2StatementSQLStringsql="INSERTINTOUSERS(USER_NAME,USER_PASS)VALUES ','123456')";PreparedStatementpstatconn.prepareStatement(sql);//步驟4}ItemTypes表結(jié)構(gòu)完整代碼publicstaticvoidmain(String[]args)throwsException//步驟1StringdriverClassName="oracle.jdbc.driver.OracleDriver";Stringurl="jdbc:oracle:thin:@localhost:1521:xe";Connectionconn=DriverManager.getConnection(url,"sdcj",//步驟2:通過Statement接口向數(shù)據(jù)發(fā)送SQL語(yǔ)句。Stringsql="select*fromitemtypes";PreparedStatementpstatconn.prepareStatement(sql);//3ResultSetResultSetrspstat.executeQuery();// }4:關(guān)閉連接。}DBCP連接池技連接池技術(shù)連接池里放的都是數(shù)據(jù)庫(kù)的連接希望有一個(gè)統(tǒng)一的對(duì)象進(jìn)行數(shù)據(jù)庫(kù)連接的管理和因?yàn)樵贘DBC操作過程中創(chuàng)建數(shù)據(jù)庫(kù)連接是一個(gè)非常消耗資源的行為。但是JDBC對(duì)于連接對(duì)象的使用方式:用就創(chuàng)建,用完就消毀。數(shù)據(jù)庫(kù)連接池技術(shù):負(fù)責(zé)創(chuàng)建,和管理大量(50-200)的數(shù)據(jù)庫(kù)連接。這些數(shù)據(jù)庫(kù)接不會(huì)頻繁的創(chuàng)建和消毀可以有效減少與數(shù)據(jù)庫(kù)之間創(chuàng)建和消毀數(shù)據(jù)庫(kù)連接對(duì)象的次主要連接池技DBCPC3P0 連接池連接池最主要的作用:創(chuàng)建數(shù)據(jù)庫(kù)連使用DBCP的基本步步驟1:導(dǎo)入DBCPJar文步驟2:在 下編寫DBCP的參數(shù)文步驟3:加載perties文java程序中提供了java.util.Properties類,使用這個(gè)類加載properties文件Propertiesproperties=new//perties文件在 InputStreamis=//Properties步驟4:使用DBCP創(chuàng)建數(shù)據(jù)源對(duì)象。數(shù)據(jù)源對(duì)象是連接池技術(shù)在Java程序中實(shí)現(xiàn)。//DBCPDataSourceds=步驟5:從數(shù)據(jù)源對(duì)象中獲取連接對(duì)Connectionconnds.getConnection();MD5加MD5加密的算法類publicstaticvoidmain(String[]args){MD5_Encodingmd5newMD5_Encoding();Stringpass="123456";//明文Stringpassword=}案例3:使用MD5加密實(shí)現(xiàn)保存用戶功需求使用MD5對(duì)用戶輸入的進(jìn)行加使用DBCP連接池獲得數(shù)據(jù)庫(kù)連使用PreparedStatement的參數(shù)處理用戶名和實(shí)現(xiàn)步導(dǎo)入MD5加密類,導(dǎo)入DBCP和數(shù)據(jù)庫(kù)驅(qū)動(dòng)的Jar文有連接數(shù)據(jù)庫(kù)的四大參數(shù)項(xiàng)和連接池參數(shù)設(shè)編碼,獲得數(shù)據(jù)庫(kù)連接。通過使用Propertiesproperties=newInputStreamis=UsersTest.class.getResourceAsStream("/perties");DataSourceds=Connectionconn=執(zhí)行SQL語(yǔ)句,通過Stringsql="INSERTINTOUSERS(USER_NAME,USER_PASS)VALUES(?,PreparedStatementpstat=conn.prepareStatement(sql);pstat.setString(1,username);pstat.setString(2,SQL語(yǔ)句中可以使用"?"pstatsetXXX(位置,值)的方式就可為"?"password是經(jīng)過加密之后Stringpassword=new關(guān)閉連publicvoidsaveUsers()throwsException{Stringusername="admin_nyvn";Stringuserpass=Stringpassword=newPropertiesproperties=newInputStreamis=UsersTest.class.getResourceAsStream("/perties");DataSourceds=BasicDataSourceFactory.createDataSource(properties);Connectionconn=ds.getConnection();Stringsql="INSERTINTOUSERS(USER_NAME,USER_PASS)(?,PreparedStatementpstat=conn.prepareStatement(sql);pstat.setString(1,username);pstat.setString(2,password);}使用jUnit進(jìn)行單元測(cè)導(dǎo)入這是一個(gè)注解在方法上寫@TestpublicpublicclassUsersTest{publicvoidsaveUsers()throws}}編寫工具類(utils)封裝數(shù)據(jù)庫(kù)連接對(duì)publicclassJDBCUtilprivatestaticDataSource staticPropertiesproperties=newInputStreamis=JDBCUtil.class.getResourceAsStream("/perties");try{ds=}catch(Exceptione)}}publicstaticConnectiongetConnection()throwsException//Connectionconn=//if(conn==null||conn.isClosed()){conn=ds.getConnection();}return}publicstaticvoidcloseConnection(){try{Connectionconn=threadLocal.get();if(conn!=null&&!conn.isClosed()){conn.close();//}}catch(SQLExceptione){}finallythreadLocal.set(null}}}將編寫的工具類JDBCUtil.java類導(dǎo)出成jar文使用時(shí)注意以下幾點(diǎn) 的資源文件的名稱和位置是固定的InputStreamis=必須保存在src 2JDBCUtil.java類使用DBCP連接池技術(shù)。一定要導(dǎo)入DBCPjar文WEB應(yīng)用程什么是WEB應(yīng)用程序:基于網(wǎng)絡(luò)的應(yīng)用程序。簡(jiǎn)單理解,WEB應(yīng)用程序就是一個(gè) 本次實(shí)訓(xùn)的內(nèi)容是一個(gè)基于b/s結(jié)構(gòu)的WEB應(yīng)用程序。b/s:瀏覽器服務(wù)器模型,在客戶端的機(jī)器上不用安裝特定的應(yīng)用軟件,安裝通用瀏覽件就行c/s:客戶端服務(wù)器模型,在客戶端的機(jī)器上用安裝特定的應(yīng)用軟件。QQ b/s結(jié)構(gòu)最大特點(diǎn)-->集中部署(客戶端沒有什么信息)-->所有的內(nèi)容都集中部署在服務(wù)器響應(yīng):是服務(wù)器向?yàn)g覽器發(fā)送的文本瀏覽器與服務(wù)器的一次交互過程就是一次請(qǐng)求與響應(yīng)的過程Http協(xié)議:這個(gè)協(xié)議規(guī)定的請(qǐng)求與響應(yīng)的格式和HTML:超文本標(biāo)記語(yǔ)言。HTTP協(xié)議中規(guī)定響應(yīng)的內(nèi)容就是一個(gè)HTML。因?yàn)闉g覽器只認(rèn)識(shí)HTML。開發(fā)第一個(gè)WEB應(yīng)用程創(chuàng)建web工修改index.jsp頁(yè)發(fā)布到服務(wù)通過URL地url格式:協(xié)議://ip地址:端 修改Tomcat服務(wù)器的 為JSP技jsp:javaserverpagejava服務(wù)器頁(yè)面技術(shù)jsp是一種開發(fā) 頁(yè)是與服務(wù)器之間有交互。使用jsp技術(shù)開發(fā) 頁(yè)后綴叫 思路JSP=HTML+JAVA在HTML頁(yè)面上嵌入java代碼.ServletJAVAHTMLJava類中輸出HTML代碼jsp頁(yè)面元 %>HTML中開辟屬于java代碼的jsp表達(dá)式%>java中的信息或?qū)ο?,輸出到?dāng)前HTML頁(yè)面4:加news表的信息到j(luò)sp頁(yè)news表創(chuàng)建WEB工導(dǎo)入jar文在web工程中導(dǎo)入jar文件時(shí),只需要將jar文件放到WEB- 里使用編寫jsp頁(yè)面加載news的信Connectionconn=JDBCUtil.getConnection();Stringsql="select*fromnews";PreparedStatementpstat=conn.prepareStatement(sql);ResultSetrs=pstat.executeQuery();<tableborder="1"cellpadding="10"<%while(rs.next()){<td><%=rs.getInt("news_id")<td><%=rs.getString("news_title")<td><%=rs.getTimestamp("news_time")<%}關(guān)閉數(shù)據(jù)庫(kù)連Servlet技和什么是Servlet就是一個(gè)在服務(wù)器端運(yùn)行的java類,這個(gè)Java類可以接收用戶的請(qǐng)求,也可以Servlet就是一個(gè)特殊的Java類WEB程序中創(chuàng)建一個(gè)不是所有java類都是Servlet面向?qū)ο笤O(shè)計(jì)原則:兩個(gè)類之間必須能滿足"is-a"(是一個(gè))關(guān)系時(shí)。子類必須是一個(gè)父創(chuàng)建一個(gè)類,類是一個(gè)Servlet。類extendsServlet開發(fā)時(shí)繼承時(shí)的父類javax.servlet.http.HttpServlet。get和post是發(fā)送請(qǐng)求的兩種方式在地址欄中打地址回車向服務(wù)器發(fā)送請(qǐng)求get方式使用<formmethod="post">向服務(wù)器發(fā)送請(qǐng)求post方創(chuàng)建Servlet的步驟就只有繼承重寫doGetdoPost方publicclassDemoServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicDemoServlet(){}protectedvoiddoGet(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException}protectedvoiddoPost(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException}}Servlet,必須先為Servlet配置Servlet就是一個(gè)在服務(wù)器端運(yùn)行的java類,這個(gè)Java類可以接收用戶的請(qǐng)求,也可以Servlet根本就是一個(gè)java類用戶是不能直 一個(gè)Java類的為Servlet配 用的URL地址使用@WebServlet這個(gè)注解。publicclassDemoServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;publicDemoServlet(){}protectedvoiddoGet(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException}protectedvoiddoPost(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException}} 的URL地址,叫"demo.do"。.do是我們?nèi)藶榧拥慕y(tǒng)一的后綴。"/"作用是說明當(dāng)前這個(gè)URL地址的位置。表示是站點(diǎn)的 URL:站點(diǎn)名稱MVC設(shè)計(jì)模MVC就是一個(gè)在創(chuàng)建web應(yīng)用程序時(shí)jsp,servlet,java的一個(gè)使用的規(guī)范MVC:模型視圖控制器模式M:Model模式:java業(yè)務(wù)處理,數(shù)據(jù)庫(kù) V:view視圖jsp負(fù)責(zé)顯示C:Controller控制器:Servlet 導(dǎo)航到j(luò)sp頁(yè)面。就是控制器(Servlet:接收用戶請(qǐng)調(diào) 類進(jìn)行頁(yè)面導(dǎo)航(跳轉(zhuǎn)到創(chuàng) 模型publicpublicclassNewsprivateintnewsId;//NEWS_IDprivateStringnewsTitle;//NEWS_TITLEVARCHAR2(200BYTE)privateTimestampnewsTime;//NEWS_TIMETIMESTAMP(6)privateStringnewsContext;//NEWS_CONTEXTVARCHAR2(200privateprivateStringnewsImg;//NEWS_IMGVARCHAR2(200//...setpublicpublicclassNewsBIZpublicList<News>List<News>newsList=newArrayList<News>();newsList.add(newNews(1," newsList.add(new newsList.add(new newsList.add(newNews(4," returnnewsList;}}}創(chuàng)建控制器ServletJSP頁(yè)面之間的數(shù)據(jù)傳遞必須要使用WEB應(yīng)用程序中的容器對(duì)象。容器對(duì)象,Servlet將數(shù)據(jù)放到容器對(duì)象中,Jsp頁(yè)面從容器中取數(shù)據(jù)WEB應(yīng)用程序中的容器對(duì)request請(qǐng)求容器只在一次交互過程中有publicclassFindAllNewsControllerextendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionpublicclassFindAllNewsControllerextendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException 類獲取數(shù)NewsBIZnewsBIZ=newNewsBIZ();List<News>newsList=newsBIZ.findAll();request.setAttribute("newsListnewsList);}}創(chuàng)建視圖層取值和顯EL+JSTL是目前jsp頁(yè)面的主流技術(shù)JSTL:jsp標(biāo)準(zhǔn) 步驟1:導(dǎo)入JSTL 庫(kù)文<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-<%@taglibprefix="c" /jsp/jstl/core"步驟2:使用 循環(huán)輸<c:forEachitems=var="">items表示要循環(huán)的集合對(duì)象var表示循環(huán)變<c:forEachitems="${requestScope.newsList}"$requestScope.newsListELrequest中取值。按newsList<%@taglibprefix="c" /jsp/jstl/core"<tablewidth="80%"cellpadding="3" 編號(hào) 標(biāo)題<c:forEachitems="${requestScope.newsList}"<td>${n.newsId<td>${n.newsTitle測(cè)jsp頁(yè)面啟動(dòng)還是從Servlet啟動(dòng)先啟動(dòng)Servlet,因?yàn)镾ervlet要先從 實(shí)訓(xùn)項(xiàng)目步驟1:創(chuàng)建實(shí)訓(xùn)WEB工創(chuàng)建WEB工導(dǎo)入jar文數(shù)據(jù)庫(kù)驅(qū)動(dòng)DBCPjar文導(dǎo)入DBCP的工具類perties文件,并修改用戶名和 到工導(dǎo)入工程的靜態(tài)模靜態(tài)模型:jspstatic\webRoot\靜態(tài)模實(shí)訓(xùn)項(xiàng)目步驟2:項(xiàng)目分層結(jié)util:工具:實(shí)體域News.java類,用實(shí)體域?qū)ο蟊硎緮?shù)據(jù)庫(kù)表dao:數(shù) 層,關(guān)于數(shù)據(jù)庫(kù)的CRUD的操作都封裝在這一層controller:控制器層,所有Servlet都在這一層。 實(shí)訓(xùn)項(xiàng)目功能1:實(shí)現(xiàn)加載主頁(yè)的創(chuàng)業(yè)政策 表結(jié)編寫實(shí)體publicclassNews//NEWS_IDprivateint//NEWS_TITLEVARCHAR2(200privateString//NEWS_TIMEprivateTimestamp//NEWS_CONTEXTVARCHAR2(200privateString//NEWS_IMGVARCHAR2(200privateStringpublicNews()}//getset}編寫數(shù) 編寫數(shù)據(jù)庫(kù)的CRUD操publicclassNewsDAOpublicList<News>findAll()throwsException{List<News>newsList=newArrayList<News>();Connectionconn=JDBCUtil.getConnection();Stringsql="select*fromnewsorderbynews_timedesc";PreparedStatementpstat=conn.prepareStatement(sql);ResultSetrs=pstat.executeQuery();Newsnews=newNews();}return}}編寫業(yè)務(wù)處理處理異常和關(guān)閉數(shù)據(jù)庫(kù)連publicclassNewsBIZpublicList<News>findAll(){try{NewsDAOnewsDAO=newNewsDAO();returnnewsDAO.findAll();}catch(Exceptione){returnnull;}finally}}}編寫控制器調(diào)用業(yè)務(wù),保存數(shù)據(jù)到容器,頁(yè)面導(dǎo)航到視publicclassIndexControllerextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponsethrowsServletException,IOException{NewsBIZnewsBIZ=newNewsBIZ();List<News>newsList=newsBIZ.findAll();request.setAttribute("newsList",newsList);}}編寫視圖獲取數(shù)據(jù)顯<ul<ul<a<iclass="square"></i>${news.newsTitle實(shí)訓(xùn)項(xiàng)目功能2:實(shí)現(xiàn)加載主頁(yè)的創(chuàng)業(yè)動(dòng)創(chuàng)業(yè)動(dòng)態(tài)表結(jié)編寫實(shí)體publicclassInfo//INFO_IDprivateint//INFO_TITLEVARCHAR2(100privateString//INFO_TIMEprivateTimestamp//INFO_CONTEXTVARCHAR2(200privateString//INFO_IMGVARCHAR2(100privateString//setget方法}編寫數(shù) publicclassInfoDAOpublicList<Info>findAll()throwsException{List<Info>infoList=newArrayList<Info>();Stringsql="select*frominformationspublicclassInfoDAOpublicList<Info>findAll()throwsException{List<Info>infoList=newArrayList<Info>();Stringsql="select*frominformationsorderbyINFO_TIMEdesc";Connectionconn=JDBCUtil.getConnection();PreparedStatementpstat=conn.prepareStatement(sql);ResultSetrs=pstat.executeQuery();Infoinfo=newInfo();}return}}編寫業(yè)務(wù)處理編寫一個(gè)業(yè)務(wù)處理類InfoBIZ。編寫一個(gè)查詢所有方法。處理異常,處理事務(wù),關(guān)閉連接publicpublicclassInfoBIZpublicList<Info>findAll(){try{InfoDAOinfoDAO=newInfoDAO();List<Info>infoList=infoDAO.findAll();returninfoList;}catch(Exceptione){returnnull;}finally}}}publicpublicclassSDCJTest{publicvoidInfoBIZinfoBIZ=newInfoBIZ();List<Info>infoList=infoBIZ.findAll();for(Infoinfo:infoList){}}}在現(xiàn)有IndexController類中加入關(guān)于創(chuàng)業(yè)動(dòng)態(tài)的publicclassIndexControllerextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{NewsBIZnewsBIZ=newNewsBIZ();List<News>newsList=newsBIZ.findAll();InfoBIZinfoBIZ=newInfoBIZ();List<Info>infoList=infoBIZ.findAll();request.setAttribute("newsList",newsList);request.setAttribute("infoList",infoList);}}修改視圖層<ul<c:forEachitems="${requestSList}"<a<i${Title實(shí)訓(xùn)項(xiàng)目功能3:實(shí)現(xiàn)加載主頁(yè)的優(yōu)秀項(xiàng)靜態(tài)模型中項(xiàng)目包含的信表結(jié)項(xiàng)目表領(lǐng)域表階段表類型表編寫實(shí)體編寫四個(gè)實(shí)體類。項(xiàng)目領(lǐng)域,投資階段,項(xiàng)目類型,項(xiàng)項(xiàng)目領(lǐng)域?qū)峱ublicclassIndustry//INDUSTRY_IDprivateint//INDUSTRY_TITLEVARCHAR2(100privateString}投資階段實(shí)publicclassStage//STAGE_IDprivateint//STAGE_TITLEVARCHAR2(200privateString}項(xiàng)目類型實(shí)publicclassItemTypes//TYPE_IDprivateint//TYPE_NAMEVARCHAR2(100privateString}項(xiàng)目實(shí)體項(xiàng)目與領(lǐng)域,階段和類型之間是有關(guān)項(xiàng)目與領(lǐng)域是多對(duì)一,多個(gè)項(xiàng)目屬于一個(gè)領(lǐng)域多對(duì)一,一對(duì)多關(guān)在數(shù)據(jù)庫(kù)表現(xiàn)方式就是兩之間的外鍵字段。多對(duì)項(xiàng)目編號(hào),類型編publicclassItemprivateintitemId;//ITEM_IDprivateStringitemTitle;//ITEM_TITLEVARCHAR2(200BYTE)privateStringitemUnit;//ITEM_UNITVARCHAR2(200BYTE)privateStringitemMessage;//ITEM_MESSAGEVARCHAR2(2000BYTE)privateStringitemImg;//ITME_IMGVARCHAR2(100BYTE)privateintitemInvest;//ITEM_INVESTprivateTimestampitemDate;//ITEM_DATEprivateIndustryindustry;//ITME_INDUSTRYNUMBER(6,0)privateStagestage;//ITEM_STAGENUMBER(6,0)privateList<ItemTypes>typeList;//ITEM_TYPEVARCHAR2(200}編寫數(shù) sql:查詢四才能獲得一個(gè)項(xiàng)目的完整信息編寫項(xiàng)目領(lǐng)域的DAO,按領(lǐng)域編號(hào)查詢領(lǐng)域?qū)ο蟮姆絧ublicclassIndustryDAOpublicIndustryfindById(intid)throwsStringsql="select*fromindustrywhereindustry_id=?";Connectionconn=JDBCUtil.getConnection();PreparedStatementpstat=conn.prepareStatement(sql);pstat.setInt(1,id);ResultSetrs=Industryindustry=newIndustry();returnindustry;return}}}編寫投資階段的DAO,按階段編號(hào)查詢階段對(duì)publicclassStageDAOpublicStagefindById(intid)throwsStringsql="select*fromstagewherestage_id=?";Connectionconn=JDBCUtil.getConnection();PreparedStatementpstat=conn.prepareStatement(sql);pstat.setInt(1,id);ResultSetrs=Stagestage=newStage();returnstage;return}}}編寫項(xiàng)目類型的DAO,按條件(如圖1-1)查詢多個(gè)項(xiàng)目類型條件:在Item表中類型字段的值(圖1-publicclassItemTypeDAOpublicList<ItemTypes>findById(Stringids)throwsException{List<ItemTypes>itemTypeList=newArrayList<ItemTypes>();Stringsql="select*fromitemtypeswheretype_idin("+ids+")";Connectionconn=JDBCUtil.getConnection();PreparedStatementpstat=conn.prepareStatement(sql);ResultSetrs=pstat.executeQuery();ItemTypesitemTypes=newItemTypes();}return}}編寫項(xiàng)目的DAO。查詢所有項(xiàng)publicclassItemDAOpublicList<Item>findAll()throwsException{List<Item>itemList=newArrayList<Item>();Stringsql="select*fromitemsorderbyitem_datedesc";Connectionconn=JDBCUtil.getConnection();PreparedStatementpstat=conn.prepareStatement(sql);ResultSetrs=pstat.executeQuery();Itemitem=newItem();IndustryDAOindustryDAOnewIndustryDAO();StageDAOstageDAO=newStageDAO();ItemTypeDAOitemTypeDAOnewItemTypeDAO();}return}}編寫業(yè)務(wù)處理publicclassItemBIZpublicList<Item>findAll(){try{returnnew}catch(Exceptione){returnnull;}finally}}}修改控制器publicclassIndexControllerextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{NewsBIZnewsBIZ=newNewsBIZ();List<News>newsList=newsBIZ.findAll();request.setAttribute("newsList",newsList);InfoBIZinfoBIZ=newInfoBIZ();List<Info>infoList=infoBIZ.findAll();request.setAttribute("infoList",infoList);ItemBIZitemBIZ=newItemBIZ();List<Item>itemList=itemBIZ.findAll();request.setAttribute("itemList",itemList);}}修改視圖層<div<ulclass="tabs_list<c:forEachitems="${requestScope.itemList}"var="item"begin="0"<li<p<imgsrc="images/${item.itemImg}" <pclass="tits">${item.itemUnit<pclass="link">${item.industry.industryTitle<p<c:forEachitems="${item.typeList}" <ahref="search.jsp"class="seemore_btn">加 實(shí)訓(xùn)項(xiàng)目功能4:實(shí)現(xiàn)登錄功修改數(shù)據(jù)庫(kù)中的Users表結(jié)因?yàn)槲覀儸F(xiàn)在在功能增加了一個(gè)新的功能,用戶頭像的上傳和顯示功能返返用 1用 1:登錄頁(yè)面:輸入用戶名 :發(fā)送登錄申請(qǐng):::回一個(gè)用戶記錄:返回用戶對(duì)象:返回用戶對(duì)象11:登錄失敗12響應(yīng)13:登錄成功,跳轉(zhuǎn)到加載主頁(yè)信息的編寫實(shí)體publicclassUsers//USER_NAMEVARCHAR2(100privateString//USER_PASSVARCHAR2(32privateString//USER_IMGVARCHAR2(100privateString}編寫publicclassUsersDAOpublicUsersfindByUserName(StringuserName)throwsException{Stringsql="select*fromuserswhereuser_name=?";Connectionconn=JDBCUtil.getConnection();PreparedStatementpstat=conn.prepareStatement(sql);pstat.setString(1,userName);ResultSetrs=pstat.executeQuery();Usersusers=newreturnusers;return}}}編寫publicclassUsersBIZ@paramusername@param@returnpublicUsersisLogin(StringuserName,StringuserPass){try{UsersDAOusersDAO=newUsersusers=usersDAO.findByUserName(userName);MD5_Encodingmd5=newStringmd5UserPass=md5.getMD5ofStr(userPass);returnthrownewException("錯(cuò)誤}thrownewException("}}catch(Exceptione){returnnull;}}}}修改登錄頁(yè)表單 :表單是交互時(shí)傳遞數(shù)據(jù)的最主要 WEB開發(fā)程序使用表單 用戶信息以登錄為例我們先開發(fā)一個(gè)登錄用的表單用戶可以在表單上去填寫自己的用戶名和,最后還要讓用戶把用戶名和提交到服務(wù)器。我們要能獲得用戶填寫的用戶名和。<formaction="提交的目標(biāo)位置表單元素<inputtype="textname="表單元素的名稱<inputtype="password"name="表單元素的名稱"><inputtype="submit"提交按<formaction="dotest.jsp"用戶名:<inputtype="text":<inputtype="password"<inputtype="submitvalue="提交login.jsp頁(yè)有一個(gè)loginForm表單,提交給LoginControler為登錄編寫提交表單的功測(cè)編寫創(chuàng)建Controller并配置URL地址publicclassLoginControllerextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{}throwsServletException,IOException{}}接收用戶信息,實(shí)現(xiàn)登錄控publicclassLoginControllerextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//1StringuserName=request.getParameter("username");StringuserPass=request.getParameter("password");//2UsersBIZusersBIZ=newUsersusers=usersBIZ.isLogin(userName,//3}}throwsServletException,IOException{this.doGet(request,response);}}登錄狀態(tài),登錄成功時(shí)將用戶對(duì)象保存到會(huì)話(容器session)中request容器,請(qǐng)求級(jí),只有一次請(qǐng)求有效session容器,會(huì)話級(jí),可以長(zhǎng)期保存數(shù)據(jù)。每個(gè)用戶有自己的session//3HttpSessionsession=request.getSession();session.setAttribute("users",users);}使用JSTL+EL實(shí)現(xiàn)根據(jù)登錄狀態(tài)顯示內(nèi)容<divclass="client_login<c:whentest="${empty<spanclass="ueser_boxfl"><i<p <a <spanclass="ueser_boxfl"><i<imgclass="header_img"src="images/${sessionScope.users.userImg}"width="32"<p &;&實(shí)訓(xùn)項(xiàng)目功能5:實(shí)現(xiàn)退出功將會(huì)話中的用戶對(duì)象移除就行編寫退出的publicclassExitControllerextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{HttpSessionsession=request.getSession();}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,}}修改退出的header.jsp頁(yè)<ahref="exit.do">退出實(shí)訓(xùn)項(xiàng)目功能6:實(shí) 用戶時(shí)上傳頭表結(jié)上傳頭像功能時(shí)數(shù)據(jù)庫(kù)中只保存的名稱。要使用上能保存到服務(wù)器的路徑編寫實(shí)體類(參見編寫 的方UsersDAO已經(jīng)存在,我們只要在這個(gè)類中加入publicvoidsave(Usersusers)throwsStringsql="insertintousers(user_name,user_pass,user_img)values(?,?,?)";Connectionconn=JDBCUtil.getConnection();PreparedStatementpstat=conn.prepareStatement(sql);pstat.setString(1,users.getUserName());pstat.setString(2,users.getUserPass());pstat.setString(3,users.getUserImg());}編寫 的方創(chuàng)建一個(gè)常量接口類創(chuàng)建三個(gè)類型的常publicinterfaceUsersUtilpublicstaticfinalintUSER_SUCCESS=1;publicstaticfinalintUSER_ERROR=10;publicstaticfinalintUSER_USERNAME_NOT_EMPTY=}編寫的方法。加入一個(gè)業(yè)務(wù)處理,當(dāng)用戶已經(jīng)存在時(shí)不向數(shù)據(jù)庫(kù)發(fā)送語(yǔ)句publicintsave(Usersusers){try{UsersDAOusersDAO=newUsersusersTemp=usersDAO.findByUserName(users.getUserName());if(usersTemp==null){returnreturn}}catch(Exceptione){return}}}register.jsp頁(yè)文件上傳的表單元<inputtype="file"name="userImg"如果表單中有file文件域,表單要設(shè)置如下<formaction="reg.do"name="regform"enctype="multipart/form-data"javascript提交表<scripttype="text/javascript">functiontoreg(){}<divclass="reg-<ahref="javascript:toreg();"class="btn-blue-big"編寫UUIDUtil.java工具類,生成隨機(jī)的文件publicclassUUIDUtilpublicstaticStringUUIDuuid=UUID.randomUUID();returnuuid.toString().replace("-","");}}FileNameUtil.java:操作文件名稱的工具publicclassFileNameUtilpublicstaticStringgetRealFileName(String//head=form-data;name="userImg";filename=" returnhead.substring(head.lastIndexOf("=")+2,head.length()-1);}publicstaticStringgetFileType(Stringreturn}}請(qǐng)求中上傳文件對(duì)當(dāng)Servlet接收文件上傳時(shí),一定要加入注解接收上傳的內(nèi)容:在Servlet3.0使用part對(duì)象Partpart=上傳,音頻 ,一般都要進(jìn)行重命名,隨機(jī)得到一個(gè)不重復(fù)名Stringuuidfilename=想辦法獲得文件真實(shí)的名稱,才能獲得文件的獲得請(qǐng)求頭的信息Stringhead=part.getHeader("Content-獲得文件的真實(shí)名Stringrealfilename=獲得一個(gè)保存的文件名稱,獲得后綴,字符串連接的方Stringsavefilename=獲得保存文件的位位置一定是工程部署到Tomcat服務(wù)器之后的位置,不是開發(fā)時(shí)在MyEclipse工具中的位Stringpath=<img 在本站點(diǎn) 這個(gè)站點(diǎn)下去 上 ,保存到指定 ,保存成指定的名publicclassRegControllerextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException//1Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");Partpart=request.getPart("userImg");Stringuuidfilename=Stringhead=part.getHeader("Content-//form-data;name="userImg";filename=" Stringrealfilename=FileNameUtil.getRealFileName(head);-Stringsavefilename=Stringpath=//2MD5_Encodingmd5=newMD5_Encoding();Usersusers=newUsers();UsersBIZusersBIZ=newUsersBIZ();inti=usersBIZ.save(users);//3caseUsersUtil.USER_SUCCESS:caseUsersUtil.USER_ERROR:caseUsersUtil.USER_USERNAME_NOT_EMPTY:}}protectedvoiddoPost(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException//TODOAuto-generatedmethodstubthis.doGet(request,response);}}25.8失敗時(shí)提示信Controller時(shí),將錯(cuò)誤的提示信息保存容器,之后在JSP頁(yè)面上使用EL從容器中區(qū)分哪種錯(cuò)根據(jù)方法不同的返回值可以區(qū)分。保存容器?request(臨時(shí),一次請(qǐng)求),session(長(zhǎng)期,多次請(qǐng)求當(dāng)使用request保存信息時(shí),頁(yè)面導(dǎo)航一定使用轉(zhuǎn)發(fā)caseUsersUtil.USER_SUCCESS:caserequest.setAttribute("errorInfo"," request.getRequestDispatcher("register.jsp").forward(request,response);caseUsersUtil.USER_USERNAME_NOT_EMPTY:request.setAttribute("errorInfo","用戶名已存在!請(qǐng)重新輸入用戶名!");request.getRequestDispatcher("register.jsp").forward(request,response);}JSP頁(yè)面使用EL取錯(cuò)誤${requestScope.errorInfo<divclass="nor-frms-<center><fontstyle="color:red">${requestScope.errorInfo<formid="regform"action="reg.do"name="regform"enctype="multipart/form-data">實(shí)訓(xùn)項(xiàng)目功能7:加載創(chuàng)業(yè)動(dòng)態(tài)詳情頁(yè)表結(jié)編寫實(shí)體編寫DAO,增加按編號(hào)查詢的方publicInfofindById(intid)throwsStringsql="select*frominformationswhereINFO_ID=?";Connectionconn=JDBCUtil.getConnection();PreparedStatementpstat=conn.prepareStatement(sql);pstat.setInt(1,id);ResultSetrs=pstat.executeQuery();Infoinfo=newInfo();returninfo;return}}編寫B(tài)IZ,增加按編號(hào)查詢的方publicInfofindById(intid){try{InfoDAOinfoDAO=newInfoDAO();Infoinfo=infoDAO.findById(id);returninfo;}catch(Exceptione){ret
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC TR 63340-1:2025 EN Electronic displays for special applications - Part 1: General introduction
- 擔(dān)保協(xié)議書和擔(dān)保合同
- 軍訓(xùn)運(yùn)動(dòng)服采購(gòu)合同
- 智能穿戴設(shè)備研發(fā)及銷售合作協(xié)議
- 知識(shí)產(chǎn)權(quán)維權(quán)與訴訟代理協(xié)議
- 電子設(shè)備銷售及售后服務(wù)合同
- 正規(guī)住宅房屋買賣合同
- 居間買賣合同與居間協(xié)議
- 高空作業(yè)人員勞務(wù)用工協(xié)議書(3篇)
- 項(xiàng)目運(yùn)營(yíng)方案研究
- Unit 3 Environmental Protection Reading and Thinking 選擇性必修第三冊(cè)
- 小學(xué)道德與法治課堂教學(xué)中提升學(xué)生核心素養(yǎng)策略
- 中水回用項(xiàng)目可行性研究報(bào)告
- 基于主題式教學(xué)法的初級(jí)漢語(yǔ)綜合課《我的低碳生活》教學(xué)設(shè)計(jì)
- 微信公眾號(hào)運(yùn)營(yíng)及推廣合同
- 2025年浙江長(zhǎng)興文旅集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 醫(yī)院臨床科研大數(shù)據(jù)平臺(tái)方案
- 2024年北京市中考生物真題卷及答案解析
- (2024)湖南省公務(wù)員考試《行測(cè)》真題卷及答案解析
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)(創(chuàng)新創(chuàng)業(yè)課程)完整全套教學(xué)課件
- 統(tǒng)編版六年級(jí)下冊(cè)道德與法治1-學(xué)會(huì)尊重-課件(54張課件)
評(píng)論
0/150
提交評(píng)論