韓順平-細(xì)說servlet-筆記-完整版_第1頁
韓順平-細(xì)說servlet-筆記-完整版_第2頁
韓順平-細(xì)說servlet-筆記-完整版_第3頁
韓順平-細(xì)說servlet-筆記-完整版_第4頁
韓順平-細(xì)說servlet-筆記-完整版_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

背景知識(shí)介紹J2EE的13種技術(shù)java->servlet->jsp[技術(shù)總是有一個(gè)演變過程]zip粘貼到word設(shè)置回憶一下我們現(xiàn)有的技術(shù)java根底(面向?qū)ο?集合,界面,線程,文件,網(wǎng)絡(luò))jdbc(java的數(shù)據(jù)庫編程)oracle/mysql/sqlserverhtmlcssjavascript(web開發(fā))->網(wǎng)頁設(shè)計(jì)xmlserlvet+jsp->javaweb開發(fā)[使用java技術(shù)做web開發(fā)]javaee體系的介紹servlet工程演示web開發(fā)介紹靜態(tài)頁面(html)動(dòng)態(tài)頁面用戶可以輸入數(shù)據(jù),和頁面交互(注冊(cè),購物,發(fā)帖子,付款...)不同時(shí)間翻開頁面,內(nèi)容是變化.目前比擬流行的左動(dòng)態(tài)頁面的技術(shù)(servlet/jsp,php,,asp,cgi)動(dòng)態(tài)網(wǎng)頁技術(shù)的比擬(了解)bs和cs的比擬〔1〕BS:browserserver瀏覽器效勞器〔2〕csclientserver客戶效勞為什么需要的web效勞器/web究竟是干什么的?模擬一個(gè)web效勞器MyWebServer.javaimportjava.io.*;import.*;publicclassMyWebServer{publicstaticvoidmain(String[]args)throwsException{ ServerSocketss=newServerSocket(80); Sockets=ss.accept(); //提示一句話 System.out.println("在9999上等待連接..."); OutputStreamos=s.getOutputStream(); BufferedReaderbr=newBufferedReader(newFileReader("d:\\hello.html")); Stringbuf="";while((buf=br.readLine())!=null){os.write(buf.getBytes()); } //關(guān)閉流br.close();os.close();s.close(); }}通過tomcat來講解BS結(jié)構(gòu)安裝tomcat效勞器解壓即可配置①在環(huán)境變量中添加JAVA_HOME=指向你的jdk的主目錄〔并不是bin文件目錄〕在不配置JAVAHOME的前提下啟動(dòng)tomcat在startup.bat的第25行中添加setJAVA_HOME=JKD路勁啟動(dòng)tomcat效勞器到tomcat主目錄下bin/startup.bat驗(yàn)證是否安裝成功://localhost:8080〔8080是默認(rèn)端口如果該端口已經(jīng)被占用需要修改端口〕tomcat安裝后問題解決〔1〕tomcat無法正常啟動(dòng)的原因分析JAVA_HOME配置錯(cuò)誤,或者沒有配置如果你的機(jī)器已經(jīng)占有了8080端口,那么無法啟動(dòng),解決方法(1)你可以8080先關(guān)閉netstat–annetstat–anb來查看誰占用該8080(2)主動(dòng)改變tomcat的端口.到conf/server.xml文件中修改<ConnectorconnectionTimeout="20000"port="8088"〔去修給config->server.xml的端口號(hào)〕protocol="org.apache.coyote.11.11NioProtocol"redirectPort="8443"/>(3)能夠正常啟動(dòng),但是會(huì)導(dǎo)航到另外一個(gè)頁面.去修改工具->管理加載項(xiàng),把默認(rèn)的導(dǎo)航給禁用即可.(4)在訪問tomcat時(shí)候,一定保證tomcat效勞器是啟動(dòng)tomcat的目錄結(jié)構(gòu)文件bin:啟動(dòng)和關(guān)閉tomcat的bat文件conf:配置文件-->server.xml:該文件用于配置和server相關(guān)的信息,比方tomcat啟動(dòng)端口后,配置Host,配置Context即web應(yīng)用-->web.xml:該文件配置與web應(yīng)用(web應(yīng)用就相當(dāng)于是一個(gè)web站點(diǎn))-->tomcat-users.xml:該文件用戶配置tomcat的用戶密碼和權(quán)限lib目錄:該目錄放置運(yùn)行tomcat運(yùn)行需要的jar包logs目錄:存放日志,當(dāng)我們需要去查看日志的時(shí)候,很有用!,當(dāng)我們啟動(dòng)tomcat錯(cuò)誤時(shí)候,可以查詢信息.webapps目錄:該目錄下,放置我們的web應(yīng)用(web站點(diǎn)),比方:建立web1目錄下面放置我們的html文件jsp文件..圖片...那么web1就被當(dāng)做一個(gè)web應(yīng)用管理起來(?特別說明tomcat6.0以后支持tomcat5版本還有別的設(shè)置)work:工作目錄:該目錄用于存放jsp被訪問后生成的對(duì)應(yīng)的server文件和.class文件如何去訪問一個(gè)web應(yīng)用的某個(gè)文件首頁面設(shè)置及目錄標(biāo)準(zhǔn)結(jié)構(gòu)現(xiàn)在我們要求:把hello.html文件設(shè)置成該web應(yīng)用的首頁,那么需要把web應(yīng)用的目錄格式做的更加標(biāo)準(zhǔn):①在web文件夾下配置WEB-INF文件夾②在web.xml文件中添加配置的代碼:<welcome-file-list><welcome-file>hello1.html</welcome-file></welcome-file-list>③通過://localhost:8088/web1來訪問hello1.htmlweb-inf目錄下的classes目錄將來是存放class文件lib目錄將來時(shí)存放jar文件web.xml配置當(dāng)前這個(gè)web應(yīng)用的信息.tomcat如何去管理虛擬目錄需求:當(dāng)我們把web應(yīng)用放到webapps目錄,tomcat會(huì)自動(dòng)管理,如果我們希望tomcat可以管理其它目錄下的web應(yīng)用?->虛擬目錄配置我在d盤有一個(gè)web應(yīng)用.虛擬目錄配置步驟:找到server.xml文件編輯host節(jié)點(diǎn)添加Contextpath在server.xml中添加:<Contextpath="/myweb2"docBase="d:\web2"/>myweb2:是訪問時(shí)輸入的web名,實(shí)際取出的是web2中的資源"d:\web2":絕對(duì)路徑下web2中存放資源如:hello2.html實(shí)際訪問時(shí)輸入的地址:://localhost:8088/myweb2/hello2.html絕對(duì)路徑:從根分區(qū)找某個(gè)文件相對(duì)路徑:從該文件位置去找另一個(gè)文件③需要重啟tomcat,才能生效.〔因?yàn)槭遣捎玫膁om技術(shù)講信息加載到內(nèi)存中〕context的幾個(gè)屬性的說明path:docbase:reloadable;如果設(shè)為ture,表示tomcat會(huì)自動(dòng)更新web應(yīng)用,這個(gè)開銷大,建議在開發(fā)過程中,可以設(shè)為true,但是一旦真的發(fā)布了,那么應(yīng)當(dāng)設(shè)為false;upackWAR:如果設(shè)為ture,那么自動(dòng)解壓,否那么不自動(dòng)解壓.①:打war包c(diǎn)d:d/web2然后jar–cvfweb2.war*②:瀏覽打好的war包Deploy發(fā)布后會(huì)在webapps中自動(dòng)生存改文件配置域名我們看和一個(gè)如何配置自己的主機(jī)名:我們?cè)趯?shí)際訪問網(wǎng)站的過程中,不可能使用://localhost:8080/web應(yīng)用/資源名的方式去訪問網(wǎng)站,實(shí)際上使用類似://sina或者://news.sina的方式去訪問網(wǎng)站,這個(gè)又是怎么實(shí)現(xiàn)的呢?看看ie瀏覽器訪問一個(gè)web站點(diǎn)的流程.實(shí)現(xiàn)的步驟如下:(1)在C:\WINDOWS\system32\drivers\etc下的host文件添加sina(2)在tomcat的server.xml文件添加主機(jī)名<Hostname="sina"appBase="d:\web3” <Contextpath="/"docBase="d:\web3"/></Host>(3)在d:\web3參加了一個(gè)/WEB-INF/web.xml把hello2.html設(shè)為首頁面如果連端口都不希望帶,那么可以吧tomcat的啟動(dòng)端口設(shè)為80即可.(4)重啟生效tomcat體系的再說明圖:如何配置默認(rèn)主機(jī):在tomcat/conf/server.xml文件<Enginename="Catalina"defaultHost="主機(jī)名">如:<Enginename="Catalina"defaultHost="show">為什么需要servlet技術(shù)?比方需求:我們希望用戶可以貼,用戶還可以回復(fù)這樣一些和用戶可以交互的功能,用普通的java技術(shù)就完成不了,sun就開發(fā)了servlet技術(shù)供程序員使用.servlet的介紹servlet其實(shí)就是java程序(java類)該java程序(java類)要遵循servlet開發(fā)標(biāo)準(zhǔn)serlvet是運(yùn)行在效勞端serlvet功能強(qiáng)大,幾乎可以完成網(wǎng)站的所有功能是學(xué)習(xí)jsp根底tomcat和servlet在網(wǎng)絡(luò)中的位置servlet的生命周期是怎樣的/servlet究竟是怎樣工作的UML時(shí)序圖幫助大家理解參看execel面試題:請(qǐng)簡(jiǎn)述servlet的生命周期(工作流程)答:標(biāo)準(zhǔn)版本:①WEB效勞器首先會(huì)檢查是否已經(jīng)裝載并創(chuàng)立了該servlet實(shí)例對(duì)象。如果是直接進(jìn)行第④步,否那么執(zhí)行第②步。②裝載并創(chuàng)立該Servlet的一個(gè)實(shí)例對(duì)象。③調(diào)用Servlet實(shí)例對(duì)象的init()方法。④創(chuàng)立一個(gè)用于封裝請(qǐng)求消息的ServletRequest對(duì)象和一個(gè)代表響應(yīng)消息的ServletResponse對(duì)象,然后調(diào)用service()方法并將請(qǐng)求和響應(yīng)作為參數(shù)傳遞進(jìn)去。⑤WEB應(yīng)用被停止或重啟之前,Servlet引擎將卸載Servlet,在卸載之前調(diào)用Servlet的destroy()方法當(dāng)serlvet第一次被調(diào)用的時(shí)候,會(huì)觸發(fā)init函數(shù),該函數(shù)會(huì)把servlet實(shí)例裝載到內(nèi)存.init函數(shù)只會(huì)被調(diào)用一次然后去調(diào)用servlet的service函數(shù)當(dāng)?shù)诙魏笤L問該servlet就直接調(diào)用service函數(shù).當(dāng)web應(yīng)用reload或者關(guān)閉tomcat或者關(guān)機(jī)都會(huì)去調(diào)用destroy函數(shù),該函數(shù)就會(huì)去銷毀serlvetServlet的生命周期當(dāng)客戶端第一次向web效勞器發(fā)出一個(gè)servlet請(qǐng)求時(shí),web效勞器將會(huì)創(chuàng)立一個(gè)該servlet的實(shí)例,并且調(diào)用servlet的init()方法;如果當(dāng)效勞器已經(jīng)存在了一個(gè)servlet實(shí)例,那么,將直接使用此實(shí)例;然后再調(diào)用service()方法,service()方法將根據(jù)客戶端的請(qǐng)求方式來決定調(diào)用對(duì)應(yīng)的doXXX()方法;當(dāng)web應(yīng)用reload或者關(guān)閉tomcat或者關(guān)機(jī),web效勞器將調(diào)用destroy()方法,將該servlet從效勞器內(nèi)存中刪除。生命全過程:1.加載2.實(shí)例化3.初始化4.處理請(qǐng)求5.退出效勞開發(fā)servlet有三種方法實(shí)現(xiàn)Servlet接口通過繼承GenericServlet通過繼承Servlet①實(shí)現(xiàn)servlet接口的方式需求如下:請(qǐng)使用實(shí)現(xiàn)接口的方式,來開發(fā)一個(gè)Servlet,要求該Servlet可以顯示Hello,world,同時(shí)顯示當(dāng)前時(shí)間.步驟在webapps下建立一個(gè)web應(yīng)用hspWeb1在hspWeb1下建立WEB-INF->web.xml[web.xml可以從ROOT/WEB-INF/web.xml拷貝]在WEB-INF下建立classes目錄(我們的Servlet就要在該目錄開發(fā).),建立lib文件夾開發(fā)MyServlet.javapackagecom.hsp;importjavax.servlet.*;importjavax.servlet..*;為了能將servlet-api.jar包引入,需要配置環(huán)境變量變量值;E:\tomcat\apache-tomcat-6.0.20\lib\servlet-api.jar記得帶上文件名importjava.io.*;classMyFirstServletimplementsServlet{ //該函數(shù)用于初始化servlet,就是把該servlet裝載到內(nèi)存中 //該函數(shù)只會(huì)被調(diào)用一次publicvoidinit(ServletConfigconfig)throwsServletException{ } //得到ServletConfig對(duì)象publicServletConfiggetServletConfig(){returnnull; } //該函數(shù)是效勞函數(shù),我們的業(yè)務(wù)邏輯代碼就是寫在這里 //該函數(shù)每次都會(huì)被調(diào)用publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,java.io.IOException{ } //該函數(shù)時(shí)得到servlet配置信息publicjava.lang.StringgetServletInfo(){returnnull; } //銷毀該servlet,從內(nèi)存中去除,該函數(shù)被調(diào)用一次publicvoiddestroy(){ }}根據(jù)Servlet標(biāo)準(zhǔn),我們還需要部署Servlet<?xmlversion="1.0"encoding="ISO-8859-1"?><!--LicensedtotheApacheSoftwareFoundation(ASF)underoneormorecontributorlicenseagreements.SeetheNOTICEfiledistributedwiththisworkforadditionalinformationregardingcopyrightownership.TheASFlicensesthisfiletoYouundertheApacheLicense,Version2.0(the"License");youmaynotusethisfileexceptincompliancewiththeLicense.YoumayobtainacopyoftheLicenseat:///licenses/LICENSE-2.0Unlessrequiredbyapplicablelaworagreedtoinwriting,softwaredistributedundertheLicenseisdistributedonan"ASIS"BASIS,WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.SeetheLicenseforthespecificlanguagegoverningpermissionsandlimitationsundertheLicense.--><web-appxmlns="://java.sun/xml/ns/javaee"xmlns:xsi=":///2001/XMLSchema-instance"xsi:schemaLocation="://java.sun/xml/ns/javaee://java.sun/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><!--根據(jù)serlvet標(biāo)準(zhǔn),需要將Servlet部署到web.xml文件,該部署配置可以從examples下拷貝--> <servlet> <!--servlet-name給該Servlet取名,該名字可以自己定義:默認(rèn)就使用該Servlet的名字--><servlet-name>MyFirstServlet</servlet-name>③ <!--servlet-class要指明該Servlet放在哪個(gè)包下的,形式是包/包/../類--><servlet-class>com.hsp.MyFirstServlet</servlet-class>注意:后面不要帶.java④</servlet> <!--Servlet的映射--><servlet-mapping> <!--這個(gè)Servlet-name要和上面的servlet-name名字一樣--><servlet-name>MyFirstServlet</servlet-name>② <!--url-pattern這里就是將來訪問該Servlet的資源名局部--><url-pattern>/ABC</url-pattern>①</servlet-mapping></web-app>效勞器調(diào)用流程:://localhost:8088/ABC>①>②>③>④在瀏覽器中測(cè)試在瀏覽器中輸入://localhost:8088/hspweb1/ABC分析一下自己寫可能出現(xiàn)的錯(cuò)誤<servlet-name>MyFirstServlet</servlet-name>名字不一樣(啟動(dòng)tomcat錯(cuò)誤)<servlet-class>com.hsp.MyFirstServlet</servlet-class>寫成MyFirstServlet.java,會(huì)報(bào)告500資源名自己寫錯(cuò)://localhost:8088/hspweb1/錯(cuò)誤的資源url-pattern404錯(cuò)誤補(bǔ)充:如果使用javac去編譯一個(gè)java文件,那么需要帶命令參數(shù)javac–d.java文件補(bǔ)充:如何不重啟tomcat,就指定去reload一個(gè)web應(yīng)用,方法:進(jìn)入到tomcat的manager:點(diǎn)擊reload即可.課堂練習(xí)自己使用實(shí)現(xiàn)Servlet接口的方法,開發(fā)一個(gè)Servlet,該servlet可以輸出自己的名字在顯示當(dāng)前日期.②使用GenericServlet開發(fā)servlet了解即可:案例:packagecom.hsp;importjavax.servlet.*;importjavax.servlet..*;importjava.io.*;publicclassMyGenericServletextendsGenericServlet{publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,java.io.IOException{res.getWriter().println("hello,world,iamgeneircservlet"); }}將該Servlet部署到web.xml文件中:<!--根據(jù)serlvet標(biāo)準(zhǔn),需要將Servlet部署到web.xml文件,該部署配置可以從examples下拷貝--><servlet> <!--servlet-name給該Servlet取名,該名字可以自己定義:默認(rèn)就使用該Servlet的名字--><servlet-name>MyGenericServlet</servlet-name> <!--servlet-class要指明該Servlet放在哪個(gè)包下的,形式是包/包/../類--><servlet-class>com.hsp.MyGenericServlet</servlet-class></servlet> <!--Servlet的映射--> <servlet-mapping> <!--這個(gè)Servlet-name要和上面的servlet-name名字一樣--><servlet-name>MyGenericServlet</servlet-name> <!--url-pattern這里就是將來訪問該Servlet的資源名局部,默認(rèn)命名標(biāo)準(zhǔn):就是該Servlet的名字--><url-pattern>/MyGenericServlet</url-pattern></servlet-mapping>③使用繼承Servlet的方法來開發(fā)Serlvet在軟件公司90%都是通過該方法開發(fā).舉例說明;還是顯示hello,world當(dāng)前日期代碼:packagecom.hsp;importjavax.servlet.*;importjavax.servlet..*;importjava.io.*;publicclassMyServletextendsServlet{ //在Servlet中,設(shè)計(jì)者對(duì)post提交和get提交分別處理 //回憶<formaction="提交給?"method="post|get"/>,默認(rèn)是getprotectedvoiddoGet(ServletRequestreq,ServletResponseresp)throwsServletException,java.io.IOException{resp.getWriter().println("iamServetdoGet()"); }protectedvoiddoPost(ServletRequestreq,ServletResponseresp)throwsServletException,java.io.IOException{resp.getWriter().println("iamServetdoPost()postname="+req.getParameter("username")); }}還有一個(gè)login.html<html><body><formaction="/hspWeb1/MyServlet"method="post">u:<inputtype="text"name="username"/><inputtype="submit"value="login"/></body></html>小結(jié)get提交和post的提交的區(qū)別從平安看get<post因?yàn)間et會(huì)把提交的信息顯示到地址欄從提交內(nèi)容看get<postget一般不要大于2k,post理論上無限制,但是在實(shí)際開發(fā)中,建議不要大于64k從速度看get>postGet可以保存uri中的參數(shù),利于收藏使用ide來開發(fā)servlet使用ide(eclipse[javase]+myeclipse[插件可以支持jsp/servlet/struts/hibernate/spring..])開發(fā)servlet需求:使用ide開發(fā)一個(gè)servlet,該servlet顯示hello,world,和當(dāng)前日期開發(fā)步驟:建立web工程在Src目錄下創(chuàng)立了一個(gè)包c(diǎn)om.hsp.servlet開發(fā)一個(gè)ServletMySerlvet的代碼:publicvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{ response.setContentType("text/html"); PrintWriterout=response.getWriter();out.println("hello"+newjava.util.Date().toString()); }publicvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{this.doGet(request,response); }配置tomcat點(diǎn)擊add選擇要發(fā)布到那個(gè)效勞器即可:啟動(dòng)tomcat使用我們的老方法從eclipse啟動(dòng)tomcat在使用eclipse開發(fā)servlet可能會(huì)出現(xiàn)一個(gè)很麻煩事情,版本不一致錯(cuò)誤.java.lang.UnsupportedClassVersionError:Badversionnumberin.classfile(unabletoloadclasscom.hsp.servlet.MyServlet1)原因是因?yàn)閠omcat使用jdk和servlet使用的jdk不一樣,解決方法就是統(tǒng)一即可.請(qǐng)大家使用eclipse并配置繼承Servlet開發(fā)一個(gè)servlet,顯示hello,和當(dāng)前日期.Servlet的細(xì)節(jié)問題一個(gè)已經(jīng)注冊(cè)的Servlet可以被屢次映射即:<servlet><description>ThisisthedescriptionofmyJ2EEcomponent</description><display-name>ThisisthedisplaynameofmyJ2EEcomponent</display-name><!--servlet的注冊(cè)名--><servlet-name>MyServlet1</servlet-name><!--servlet類的全路徑(包名+類名)--><servlet-class>com.hsp.servlet.MyServlet1</servlet-class></servlet><!--對(duì)一個(gè)已經(jīng)注冊(cè)的servlet的映射--><servlet-mapping><!--servelt的注冊(cè)名--><servlet-name>MyServlet1</servlet-name><!--servlet的訪問路徑--><url-pattern>/MyServlet1</url-pattern></servlet-mapping><servlet-mapping><servlet-name>MyServlet1</servlet-name><url-pattern>/hsp</url-pattern></servlet-mapping>當(dāng)映射一個(gè)servlet時(shí)候,可以多層比方<url-pattern>/servlet/index.html</url-pattern>ok從這里還可以看出,后綴名是html不一定就是html,可能是假象.使用通配符在servlet映射到URL中有兩種格式:第一種格式*.擴(kuò)展名比方*.do*.ss第二種格式以/開頭同時(shí)以/*結(jié)尾比方/*/news/*通配符練習(xí)題:Servlet1映射到/abc/*Servlet2映射到/*Servlet3映射到/abcServlet4映射到*.do問題(面試題):當(dāng)請(qǐng)求URL為“/abc/a.html〞,“/abc/*〞和“/*〞都匹配,哪個(gè)servlet響應(yīng)Servlet引擎將調(diào)用Servlet1。當(dāng)請(qǐng)求URL為“/abc〞時(shí),“/abc/*〞和“/abc〞都匹配,哪個(gè)servlet響應(yīng)Servlet引擎將調(diào)用Servlet3。當(dāng)請(qǐng)求URL為“/abc/a.do〞時(shí),“/abc/*〞和“*.do〞都匹配,哪個(gè)servlet響應(yīng)Servlet引擎將調(diào)用Servlet1。當(dāng)請(qǐng)求URL為“/a.do〞時(shí),“/*〞和“*.do〞都匹配,哪個(gè)servlet響應(yīng)Servlet引擎將調(diào)用Servlet2。當(dāng)請(qǐng)求URL為“/xxx/yyy/a.do〞時(shí),“/*〞和“*.do〞都匹配,哪個(gè)servlet響應(yīng)Servlet引擎將調(diào)用Servlet2。在匹配的時(shí)候,要參考的標(biāo)準(zhǔn):看誰的匹配度高,誰就被選擇*.do的優(yōu)先級(jí)最低Servlet單例問題當(dāng)Servlet被第一次訪問后,就被加載到內(nèi)存,以后該實(shí)例對(duì)各個(gè)請(qǐng)求效勞.即在使用中是單例.因?yàn)镾ervlet是單例,因此會(huì)出現(xiàn)線程平安問題:比方:售票系統(tǒng).如果不加同步機(jī)制,那么會(huì)出現(xiàn)問題:這里我給大家一個(gè)原那么:如果一個(gè)變量需要多個(gè)用戶共享,那么應(yīng)當(dāng)在訪問該變量的時(shí)候,加同步機(jī)制synchronized(對(duì)象){ //同步代碼}〔2〕如果一個(gè)變量不需要共享,那么直接在doGet()或者doPost()定義.這樣不會(huì)存在線程平安問題servlet中的<load-on-startup>配置需求:當(dāng)我們的網(wǎng)站啟動(dòng)的時(shí)候,可能會(huì)要求初始化一些數(shù)據(jù),(比方創(chuàng)立臨時(shí)表),在比方:我們的網(wǎng)站有一些要求定時(shí)完成的任務(wù)[定時(shí)寫日志,定時(shí)備份數(shù)據(jù)..定時(shí)發(fā)送郵件..]解決方法:可以通過<load-on-startup>配合線程知識(shí)搞定.先說明<load-on-startup>:通過配置<load-on-startup>我們可以指定某個(gè)Servlet自動(dòng)創(chuàng)立.我們來模擬一個(gè)定時(shí)發(fā)送電子郵件的功能:實(shí)現(xiàn)思路:sendEmailTableid content sendtime1“hello〞 2023-11-1120:112“hello2” 2023看看如何線程去完成任務(wù):這里的代碼請(qǐng)參考工程:SendMailThread.javapackagecom.hsp.model;publicclassSendEmailThreadextendsThread{@Overridepublicvoidrun(){inti=0;try{while(true){//每休眠一分鐘,就去掃表sendmail,看看那份信件應(yīng)當(dāng)被發(fā)出Thread.sleep(10*1000); System.out.println("發(fā)出第"+(++i)+"郵件");//javamail } }catch(Exceptione){e.printStackTrace();//TODO:handleexception } }}MyInitServlet1.javapublicvoidinit()throwsServletException{//Putyourcodehere System.out.println("MyInitServlet1的init被調(diào)用..");//完成一些初始化任務(wù) System.out.println("創(chuàng)立數(shù)據(jù)庫,表,讀取參數(shù)");//創(chuàng)立一個(gè)線程 SendEmailThreadsendEmailThread=newSendEmailThread();sendEmailThread.start(); }說明:<!--1表示該servlet被init的順序--><load-on-startup>1</load-on-startup>ServletConfig對(duì)象該對(duì)象主要用于讀取servlet的配置信息.案例:<servlet><servlet-name>ServletConfigTest</servlet-name><servlet-class>com.hsp.servlet.ServletConfigTest</servlet-class><!--這里可以給servlet配置信息,這里配置的信息,只能被該servlet讀取--><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></servlet>如何使用Stringencoding=this.getServletConfig().getInitParameter("encoding");補(bǔ)充說明:這種配置參數(shù)的方式,只能被某個(gè)Servlet獨(dú)立使用.如希望讓所有的Servlet都去讀取某個(gè)參數(shù),這樣配置:<!--如果這里配置參數(shù),可被所有servlet讀取--><!--<context-param><param-name></param-name><param-value></param-value></context-param>-->如果要把所有的參數(shù)都讀取,那么使用如下方法:Enumeration<String>names=this.getServletConfig().getInitParameterNames();while(names.hasMoreElements()){ Stringname=names.nextElement();System.out.println(name);System.out.println(this.getServletConfig().getInitParameter(name)); }補(bǔ)充,如何去修改Servlet的配置模板.編寫工程先完成用戶登錄添加在主界面,添加一個(gè)超鏈接,可以返回登錄界面重寫登錄協(xié)議的再介紹協(xié)議是建立在tcp/ip協(xié)議根底上協(xié)議全稱超文本傳輸協(xié)議協(xié)議1.0,1.1版本,目前通用的是1.1版本1.0稱為短連接1.1稱為長(zhǎng)連接.所謂長(zhǎng),和短指的是持續(xù)時(shí)間的長(zhǎng)連接1.130s,短連接是發(fā)送完數(shù)據(jù)就斷掉.的請(qǐng)求局部:根本結(jié)構(gòu):GET/test/hello.html/1.1[請(qǐng)求行]Accept:*/*[消息名]消息名:內(nèi)容Referer:://localhost:8080/test/abc.htmlAccept-Language:zh-cnUser-Agent:Mozilla/4.0Accept-Encoding:gzip,deflateHost:://sohu:80Connection:Keep-Alive[消息頭格式〔消息名:內(nèi)容〕特別說明:并不是每一次請(qǐng)求的消息頭都一樣.]空行發(fā)送的內(nèi)容[格式:內(nèi)容名字=內(nèi)容體]請(qǐng)求方式請(qǐng)求行中的GET稱之為請(qǐng)求方式,請(qǐng)求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT常用的有:POST,GETget和post參看ppt,和以前的筆記GETNews/abc.jsp請(qǐng)求消息頭Accept:text/html,image/*[告訴效勞器,我可以接受文本,網(wǎng)頁,圖片]Accept-Charset:ISO-8859-1[接受字符編碼iso-8859-1]Accept-Encoding:gzip,compress[可以接受gzip,compress壓縮后數(shù)據(jù).]Accept-Language:en-us,zh-cn[瀏覽器支持中,英文]Host:sohu:80[我要找主機(jī)是sohu:80]If-Modified-Since:Tue,11Jul200018:23:51GMT[告訴效勞器,我的緩沖中有這個(gè)資源文件,該文件的時(shí)間是。。。]Referer:://sohu/index.jsp[告訴效勞器,我來自哪里,該消息頭,常用于防止盜鏈]User-Agent:Mozilla/4.0(compatible;MSIE5.5;WindowsNT5.0)[告訴效勞器,瀏覽器內(nèi)核]Cookie[cookie??]Connection:close/Keep-Alive[保持連接,發(fā)完數(shù)據(jù)后,我不關(guān)閉連接]Date:Tue,11Jul200018:23:51GMT[瀏覽器發(fā)送該請(qǐng)求的時(shí)間]關(guān)于Referer的實(shí)際案例://獲取用戶瀏覽器Referer Stringreferer=request.getHeader("Referer");if(referer==null||!referer.startsWith("://localhost:8088/servletPro")){response.sendRedirect("/servletPro/Error");return; }紅色的局部可以根據(jù)實(shí)際情況來修改.的響應(yīng)根本結(jié)構(gòu):狀態(tài)行:格式:版本號(hào)狀態(tài)碼原因表達(dá)舉例:/1.1200OK狀態(tài)碼含義100-199表示成功接收請(qǐng)求,要求客戶端繼續(xù)提交下一次請(qǐng)求才能完成整個(gè)處理過程200-299表示成功接收請(qǐng)求并完成整個(gè)處理過程,常用200300-399為完成請(qǐng)求,客戶需要進(jìn)行一步細(xì)化請(qǐng)求。例如:請(qǐng)求的資源已經(jīng)移動(dòng)一個(gè)新的地址,常用302,307400-499客戶端的請(qǐng)求有錯(cuò)誤404500-599效勞器端出現(xiàn)錯(cuò)誤,常用500響應(yīng)的狀態(tài)行舉例說明200就是整個(gè)請(qǐng)求和響應(yīng)過程沒有發(fā)生錯(cuò)誤,這個(gè)最常見.302:表示當(dāng)你請(qǐng)求一個(gè)資源的時(shí)候,效勞器返回302表示,讓瀏覽器轉(zhuǎn)向到另外一個(gè)資源,比方:response.sendRedirect(“/web應(yīng)用/資源名〞)案例:response.setStatus(302);response.setHeader("Location","/servletPro/Servlet2");//上面兩句話等價(jià) response.sendRedirect("/servletPro/Servlet2");404:找不到資源500:效勞器端錯(cuò)誤響應(yīng)消息頭詳解Location::///index.jsp【讓瀏覽器重新定位到url】Server:apachetomcat【告訴瀏覽器我是tomcat】Content-Encoding:gzip【告訴瀏覽器我使用gzip】Content-Length:80【告訴瀏覽器會(huì)送的數(shù)據(jù)大小80節(jié)】Content-Language:zh-cn【支持中文】Content-Type:text/html;charset=GB2312[內(nèi)容格式text/html;編碼gab2312]Last-Modified:Tue,11Jul200018:23:51GMT【告訴瀏覽器,該資源上次更新時(shí)間】Refresh:1;url=://baidu【過多久去,刷新到://baidu】Content-Disposition:attachment;filename=aaa.zip【告訴瀏覽器,有文件下載】Transfer-Encoding:chunked[傳輸?shù)木幋a]Set-Cookie:SS=Q0=5Lb_nQ;path=/search[后面詳講]Expires:-1[告訴瀏覽器如何緩存頁面IE]Cache-Control:no-cache[告訴瀏覽器如何緩存頁面火狐]Pragma:no-cache[告訴瀏覽器如何緩存頁面]Connection:close/Keep-Alive[保持連接1.1是Keep-Alive]Date:Tue,11Jul200018:23:51GMT①定時(shí)刷新Refresh使用response.setHeader("Refresh","5;url=/servletPro/Servlet2");②文件下載Content-DispositionpublicvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html");//PrintWriterout=response.getWriter();//演示下載文件response.setHeader("Content-Disposition","attachment;filename=winter.jpg");//翻開文件.說明一下web站點(diǎn)下載文件的原理//1.獲取到要下載文件的全路徑 Stringpath=this.getServletContext().getRealPath("/images/Winter.jpg");//System.out.println("path="+path);//2創(chuàng)立文件輸入流 FileInputStreamfis=newFileInputStream(path);//做一個(gè)緩沖字節(jié)數(shù)組bytebuff[]=newbyte[1024];intlen=0;//表示實(shí)際每次讀取了多個(gè)個(gè)字節(jié) OutputStreamos=response.getOutputStream();while((len=fis.read(buff))>0){os.write(buff,0,len); }//缺點(diǎn):沒有進(jìn)度條./圖標(biāo)///關(guān)閉os.close();fis.close(); }③緩存講解提出問題:瀏覽器默認(rèn)情況下,會(huì)緩存我們的頁面,這樣出現(xiàn)一個(gè)問題:如果我們的用戶習(xí)慣把光標(biāo)停留在地址欄,然后回車來取頁面,就會(huì)默認(rèn)調(diào)用cache中取數(shù)據(jù)。有些網(wǎng)站要求及時(shí)性很高,因此要求我們不緩存頁面代碼://指定該頁面不緩存Ie response.setDateHeader("Expires",-1);【針對(duì)IE瀏覽器設(shè)置不緩存】//為了保證兼容性. response.setHeader("Cache-Control","no-cache");【針對(duì)火狐瀏覽器等】 response.setHeader("Pragma","no-cache");【其他瀏覽器】有些網(wǎng)站要求網(wǎng)頁緩存一定時(shí)間,比方緩存一個(gè)小時(shí)response.setDateHeader("Expires",System.currentTimeMillis()+3600*1000*24);后面一個(gè)參數(shù)表示設(shè)置的緩存保持時(shí)間,-1表示永遠(yuǎn)緩存練習(xí):參加防止盜鏈下載.ServletResponse的再說明getWriter()getOutputStream();區(qū)別getWriter()用于向客戶機(jī)回送字符數(shù)據(jù)getOutputStream()返回的對(duì)象,可以回送字符數(shù)據(jù),也可以回送字節(jié)數(shù)據(jù)(二進(jìn)制數(shù)據(jù))OutputStreamos=response.getOutputStream();os.write("hello,world".getBytes());如何選擇:如果我們是回送字符數(shù)據(jù),那么使用PrintWriter對(duì)象,效率高如果我們是回送字節(jié)數(shù)據(jù)(binarydate),那么只能使用OutputStream?這兩個(gè)流不能同時(shí)使用.比方:OutputStreamos=response.getOutputStream();os.write("hello,world".getBytes()); PrintWriterout=response.getWriter();out.println("abc");就會(huì)報(bào)錯(cuò):java.lang.IllegalStateException:getOutputStream()hasalreadybeencalledforthisresponse不能同時(shí)使用printWriter和outputstream的原因Web效勞器會(huì)自動(dòng)檢查并關(guān)閉流從該圖,我們也可以看出.為什么我們沒有主動(dòng)關(guān)閉流,程序也沒有問題的原因.當(dāng)然:你主動(dòng)關(guān)閉流,更好.參數(shù)的傳遞方式sendRedirect()和session()需求:當(dāng)用戶登錄成功后,把該用戶名字顯示在登錄成功頁面;①使用sendRedirect()來傳遞字符參數(shù)解決思路:使用java根底static使用sendRedirect()代碼:response.sendRedirect("/UsersManager/MainFrame?uname="+username+"&pwd="+password);使用session傳遞[后面講]這里,我們先預(yù)熱.說明:根本格式:response.sendRedirect(“servlet的地址?參數(shù)名=參數(shù)值&參數(shù)名=參數(shù)值...〞);?參照值是String,參數(shù)名應(yīng)當(dāng)使用字母組合在接受數(shù)據(jù)的Servlet中:String參數(shù)=request.getParameter(“參數(shù)名〞);②使用session()來傳遞字符參數(shù)和對(duì)象A.傳遞字符串放入sessionrequest.getSession.setAttribute("loginUser",username);取出session在JSP中通過session取出request.getSession.getAttribute("loginUser");B.傳遞對(duì)象Useruser=newUser();user.setName(“xiaoli〞);user.setPassWord(“123”放入sessionrequest.getSession.setAttribute("userObj",userObj);取出session Useruser=(User)request.getSession.getAttribute(“userObj〞);上機(jī)練習(xí):1.實(shí)際運(yùn)用到工程:在wel頁面中顯示登錄用戶的姓名,就可以使用該方法.讓我們動(dòng)手一起來做做吧!2.請(qǐng)寫一篇關(guān)于協(xié)議的筆記,要求:描述清楚請(qǐng)求頭、響應(yīng)頭的格式請(qǐng)求頭和響應(yīng)頭中各個(gè)頭字段的含義如果瀏覽器傳遞給WEB效勞器的參數(shù)內(nèi)容超過1K,應(yīng)該使用那種方式發(fā)送請(qǐng)求消息?請(qǐng)描述200、302、304、404和500等響應(yīng)狀態(tài)碼所表示的意義。請(qǐng)列舉三種禁止瀏覽器緩存的頭字段,并寫出相應(yīng)的中文亂碼處理發(fā)生中文亂碼有三種情況表單formpost在效勞器端設(shè)置成瀏覽器端的編碼方式。解決方法:request.setCharacterEncoding("utf-8");//gbkgb2312big5get寫一個(gè)工具類:packagecom.hsp.utils;publicclassMyTools{publicstaticStringgetNewString(Stringstr){ StringnewString="";try{newString=newString(str.getBytes("iso-8859-1"),"utf-8"); }catch(Exceptione){e.printStackTrace();//把iso-8859-1轉(zhuǎn)換成utf-8 }returnnewString; }}超鏈接<ahref=〞://sohu?name=函數(shù)后〞>測(cè)試</a>該方法和get處理方法一樣.sendRedirect()發(fā)生亂碼response.sendRedirect(“servlet地址?username=順平〞);?版本低導(dǎo)致的亂碼特別說明,如果你的瀏覽器是ie6或以下版本,那么我們的②和③中情況會(huì)出現(xiàn)亂碼(當(dāng)中文是奇數(shù)的時(shí)候)解決方法是:Stringinfo=.URLEncoder.encode("你好嗎.jpg","utf-8");<ahref=〞://sohu?name=〞+info>測(cè)試</a>response.sendRedirect(“servlet地址?username=〞+info);說明:我們應(yīng)當(dāng)盡量使用post方式提交;?返回瀏覽器顯示亂碼在效勞端是中文,在response的時(shí)候,也要考慮瀏覽器顯示是否正確,一般我們通過response.setContentType(“text/html;charset=utf-8”?下載提示框中文亂碼補(bǔ)充一個(gè)知識(shí)點(diǎn):當(dāng)我們下載文件的時(shí)候,可能提示框是中文亂碼Stringtemp=.URLEncoder.encode("傳奇.mp3","utf-8");response.setHeader("Content-Disposition","attachment;filename="+temp);ServletRequest對(duì)象的詳解該對(duì)象表示瀏覽器的請(qǐng)求(請(qǐng)求),當(dāng)web效勞器得到該請(qǐng)求后,會(huì)把請(qǐng)求信息封裝成一個(gè)ServletRequest對(duì)象getRequestURL方法返回客戶端發(fā)出請(qǐng)求時(shí)的完整URL。getRequestURI方法返回請(qǐng)求行中的資源名局部。getQueryString方法返回請(qǐng)求行中的參數(shù)局部(參數(shù)名+值)。該函數(shù)可以獲取請(qǐng)求局部的數(shù)據(jù)比方://localhost/web名?username=abc&pwd=123request.getQueryString();就會(huì)得到username=abc&pwd=123getRemoteAddr方法返回發(fā)出請(qǐng)求的客戶機(jī)的IP地址getRemoteHost方法返回發(fā)出請(qǐng)求的客戶機(jī)的完整主機(jī)名getRemotePort方法返回客戶機(jī)所使用的網(wǎng)絡(luò)端口號(hào)客戶機(jī)的端口號(hào)是隨機(jī)選擇的,web效勞器的端口號(hào)是一定的getLocalPort方法返回web效勞器所使用的網(wǎng)絡(luò)端口號(hào)getLocalAddr方法返回WEB效勞器的IP地址。getLocalName方法返回WEB效勞器的主機(jī)名url和uri的區(qū)別比方:Url=://localhost:8088/servletPort3/GetinfoServlet完整的請(qǐng)求Uri=/servletPort3/GetinfoServletweb應(yīng)用的名稱+資源的名稱練習(xí)題:請(qǐng)?jiān)谛谄鬟@端,給瀏覽器回送該瀏覽器發(fā)送的具體請(qǐng)求內(nèi)容是什么?韓順平://localhost:8088/web名/GetInfoServlet?abc=123&uu=90&iio=中國大龍://localhost:8088/web名/GetInfoServlet?kkk=你好&email=dalong@sohu你的請(qǐng)求是kkk=你好email=dalong@sohu如何獲取用戶提交的內(nèi)容(通過表單提交的內(nèi)容)代碼:界面:packagecom.hsp;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet..Servlet;importjavax.servlet..ServletRequest;importjavax.servlet..ServletResponse;publicclassMyInfoFormextendsServlet{publicvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8"); PrintWriterout=response.getWriter();out.println("<formaction='/servletPro3/RegisterCl'method='post'><br/>");out.println("<inputtype='hidden'value='abc'name='hidden1'/>"); out.println("用戶名:<inputtype='text'name='username'/><br/>"); out.println("密碼:<inputtype='password'name='pwd'/><br/>"); out.println("性別:<inputtype='radio'name='sex'value='男'/>男<inputtype='radio'name='sex'value='女'/>女<br/>"); out.println("你的愛好:<inputtype='checkbox'name='hobby'value='音樂'>音樂<inputtype='checkbox'name='hobby'value='體育'>體育<inputtype='checkbox'name='hobby'value=\"旅游\">旅游<br/>"); out.println("所在城市:<selectname='city'><optionvalue='bj'>北京</option><optionvalue='cq'>重慶</option></select><br/>"); out.println("你的介紹:<textareacols='20'rows='10'name='intro'>請(qǐng)輸入介紹..</textarea><br/>"); out.println("提交照片:<inputtype='file'name='photo'><br/>"); //什么時(shí)候使用hidden傳輸數(shù)據(jù)1.不希望用戶看到該數(shù)據(jù)2.不希望影響節(jié)目,同時(shí)使用該數(shù)據(jù) out.println("<inputtype='submit'value='提交信息'/>");out.println("</form>"); }publicvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{this.doGet(request,response); }}接受信息的Servlet:packagecom.hsp;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet..Servlet;importjavax.servlet..ServletRequest;importjavax.servlet..ServletResponse;publicclassRegisterClextendsServlet{publicvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8"); PrintWriterout=response.getWriter(); Stringu=request.getParameter("username"); Stringp=request.getParameter("pwd"); Stringsex=request.getParameter("sex");//如果接受復(fù)選框的內(nèi)容,那么使用getparameterValues String[]hobbies=request.getParameterValues("hobby"); Stringcity=request.getParameter("city"); Stringintro=request.getParameter("intro"); Stringhidden1=request.getParameter("hidden1"); out.println("用戶名="+u+"<br/>"); out.println("密碼="+p+"<br/>"); out.println("性別="+sex+"<br/>");if(hobbies!=null){for(inti=0;i<hobbies.length;i++){ out.println("愛好:"+hobbies[i]); } }else{ out.println("你沒有愛好"); } out.println("<br/>所在城市:"+city); out.println("<br/>個(gè)人介紹:"+intro); out.println("<br/>隱藏控件數(shù)據(jù):"+hidden1); }publicvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}練習(xí)題:請(qǐng)大家自己寫一個(gè)表單,提交數(shù)據(jù)(個(gè)人名字:電子郵件:性別:你喜歡的城市select(可以選多個(gè)):你的特長(zhǎng)(checkbox)你的個(gè)人簽名,用hidden傳輸重要數(shù)據(jù))請(qǐng)求轉(zhuǎn)發(fā)requeset.getRequestDispatcher(資源地址).forward(request,response);資源地址:不需要工程名。因?yàn)樗皇窃赪EB效勞器內(nèi)部轉(zhuǎn)發(fā)。Request.getRequestDispatcher(資源地址).forward(request,response);我們現(xiàn)在使用請(qǐng)求轉(zhuǎn)發(fā)的方法來實(shí)現(xiàn)上次我們使用response.sendRedirect()實(shí)現(xiàn)效果使用request提供的轉(zhuǎn)發(fā)方法.Request中的Attribute在一次請(qǐng)求有效。一次請(qǐng)求:沒有返回到瀏覽器,就為一次請(qǐng)求。請(qǐng)求轉(zhuǎn)發(fā)的的(uml)圖這里我們畫圖說明(uml)使用forward不能轉(zhuǎn)發(fā)到該web應(yīng)用外的url因?yàn)閒orward是發(fā)生在web效勞器,所以Servlet1和Servlet2使用的是用一個(gè)request和response.使用sendRedirect()方法不能通過request.setAttribute()把屬性傳遞給下一個(gè)Servlet比擬sendRedirect()和request.getRequestDispatcher().forward(request,response)請(qǐng)問sendRedirect()和forward的區(qū)別是什么答:叫法sendRedirect()重定向,轉(zhuǎn)發(fā)forward()叫轉(zhuǎn)向?qū)嶋H發(fā)生的位置不一樣sendRedirect發(fā)生瀏覽器forward發(fā)生web效勞器用法不一樣request.getRequestDispatcher(“/資源URI〞).forward(request,response)response.sendRedirect(“/web應(yīng)用/資源URI〞);能夠去URL范圍不一樣sendRedirect可以去外邊URLforward只能去當(dāng)前的WEB應(yīng)用的資源?什么是一次請(qǐng)求:只要沒有停止,也沒有回到瀏覽器重定向,就算一次比方;?如果轉(zhuǎn)發(fā)屢次,我們的瀏覽器地址欄,保存的是第一次轉(zhuǎn)向的那個(gè)ServletUrl小練習(xí):使用uml軟件,畫出forward和sendRedirect()的流程.用戶管理系統(tǒng)的繼續(xù)開發(fā)用戶管理系統(tǒng)的框架圖用戶管理框架圖.xls增加到數(shù)據(jù)庫去驗(yàn)證用戶功能在oracle數(shù)據(jù)庫中創(chuàng)立一張表userscreatetableusers(idnumberprimarykey,usernamevarchar2(32)notnull,emailvarchar2(64)notnull,gradenumberdefault1,passwdvarchar2(32)notnull)初始化一些數(shù)據(jù)insertintousersvalues(1,’aaaaa1’,’aaaa1@sohu’,1,’123insertintousersvalues(2,’aaaaa2’,’aaaa2@sohu’,1,’123insertintousersvalues(3,’aaaaa3’,’aaaa3@sohu’,1,’123insertintousersvalues(4,’aaaaa4’,’aaaa4@sohu’,1,’123insertintousersvalues(5,’aaaaa5’,’aaaa5@sohu’,5,’123在LoginClServlet中添加到數(shù)據(jù)庫驗(yàn)證用戶的功能.ok://到數(shù)據(jù)庫中取驗(yàn)證 Connectionct=null; ResultSetrs=null; PreparedStatementps=null;try{//1加載驅(qū)動(dòng)Class.forName("oracle.jdbc.driver.OracleDriver");//2.得到連接ct=DriverManager.getConnection("jdbc:oracle:thin:@:1521:ORCLHSP","scott","tiger");//3.創(chuàng)立PreparedSatementps=ct.prepa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論