如果是servlet 則可以通過servletContext 讀取web資源文件
如果不是servlet則只能通過類裝載器去讀取了(類裝載器有弊端,文件不能太大,二不能及時更新)
web工程中,對於java類我們是無法直接讀取web資源的,因此如果想要java程序讀取web資源,我們通常使用類裝載器(UserDao)為任意src下的java文件
java文件運行的話,服務器通過類裝載器去裝載classes目錄下的所有java類(src目錄下的內容發布的時候會發布到web工程下的classes目錄中)的所有資源文件
我們可以通過UserDao.class.getClassLoader().getResourceAdStream("fileName");/、通過任何一個類,我們可以獲得加載該類的類裝載器,通用的應該只有一個吧????,可以加載所有的資源文件
對於某些資源,如數據庫連接的數據,我們只需要加載一次就可以了,這是我們可以把加載數據庫相關的代碼,放到靜態代碼塊中
在web工程中,類裝載器對類的加載只加載一次,如果以前加載過該類並且沒有銷毀,則不會再次加載該類
注意以下兩種方式的區別,第一種是類加載器的方式,第二種是普通的輸入流的方式,如果在程序運行期間改變properties中的內容,第一種方式獲取是還是以前的內容,第二種方式是改變後的內容
程序以什麼碼表輸出到客戶端,就在respond中指定客戶端浏覽器以什麼樣的編碼讀取這些數據
標簽可以模擬http相應頭,我們可以用 標簽來控制浏覽器的行為,如指定編碼格式
out.write("
");這和在respond添加header頭信息是一樣的(如上圖)respond.setHeader("content-type","text/html.charset=UTF-8")//注意這樣寫訪問servlet時會下載文本
printWriter 字符流輸出,只能輸出字符串
outputStream 字節流,可以輸出所有的內容形式
setContentType("text/html;charset=UTF-8")//這句話可以代替上邊兩句話,內部調用了上邊兩個函數.解決亂碼問題
第一句話控制respond以什麼編碼格式寫出數據
第二句話控制浏覽器以什麼編碼格式打開返回的數據
服務端向客戶端游覽器發送文件時,如果是浏覽器支持的文件類型,一般會默認使用浏覽器打開,比如txt、jpg等,會直接在浏覽器中顯示,如果需要提示用戶保存,就要利用Content-Disposition進行一下處理,關鍵在於一定要加上attachment:
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.txt");
文件下載時,如果文件文成是中文,則需要把中文經過URL編碼
URLEncoder.encode(filename,encodetype);
URLEncoder.encode(filename,"UTF-8");
重定向:
respond.setStatus(302);
respond.setHeader("location","/error.html");
OR
respond.setRedirect("error.html");//特點放兩次請求,地址會變
注意重定向和轉發的區別,轉發不會改變地址欄,
重定向的用處,登陸和購買
獲取rquest數據的幾種方式
web servlet一般不輸出數據跳轉到jsp輸出數據, 跳轉後一定要return,否則可能出現異常
forword時會清空respond 中的數據,respond頭信息仍然有效
respond可以實現轉發,
request也可以實現轉發
web中各種地址的寫法
書寫地址時主要看改地址是誰要使用
對於1,我們知道是請求轉發,轉發到另一個servlet中處理,因此是在web工程中使用,因此書寫時應相對於當前web應用根目錄
2,sendRedirect我們知道是重定向,讓浏覽器去發送另一個請求,是浏覽器要調用改資源地址,因此是相對於tomcat容易而言的
3,4相對於web應用根目錄而言的
5表單,點擊是浏覽器發送一個請求,是浏覽器調用的,因此是相對於tomcat目錄而言的