標籤: javawebhtml
[TOC]java
API:git
程序以什麼碼錶輸出,就必定要控制瀏覽器以什麼碼錶打開。可有以下兩種寫法:github
response.setHeader("Content-type","text/html;charset=UTF-8")
response.setContentType("text/html;charset=UTF-8")
(默認調用setHeader
和setCharacterEncoding
)把分號;
錯寫成逗號,
,瀏覽器會提示下載web
用html技術的<meta>
標籤能夠模擬一個http響應頭, <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
apache
response可用setCharacterEncoding
方法設置碼錶。字符流輸出:PrintWritet->response->瀏覽器
,response->瀏覽器
默認使用iso-8859
編碼設計模式
使用ServerContext
的getRealPath
方法,再InputStream
和OutputStream
api
若是下載文件是中文名爲中文,則文件名須要通過url編碼URLEncoder.encode
瀏覽器
使用BufferedImage
在內存生成圖片,再使用ImageIO
輸出。緩存
畫圖使用Graphics
,旋轉使用Graphics2D
漢字的區間:\u4e00
-\u9fa5
refresh
頭,而是在jsp加入<meta>
頭模擬。expires
頭,當前時間+要緩存的時長重定向:設置狀態碼和location
頭便可,或者直接使用response
的sendRedirect
方法。向服務器兩次請求。瀏覽器會改變地址欄,通常適用於登陸、購物等場景。
轉發:則是調用ServletContex
對象的getRequestDispatcher
方法,再調用forward
方法。向服務器一次請求,瀏覽器地址欄不變。
一些細節:
getOutputStream
和getWriter
方法跟別用於輸出二進制數據、輸出文本數據的ServletOutputStream
、Printwriter
對象,這兩個方法相互排斥,只能調用其中一個,不然拋IllegalStateException
異常。Servlet
的service
方法結束後,Servlet引擎會檢查並調用close
方法關閉該輸出流對象。一些方法
getRequestURI
用於權限攔截,訪問統計getRemoteAddr
用於獲得客戶機IP地址getMethod
獲得客戶機請求方式requst對象獲取數據的四種方式
getParameter
getParameterNames
getParameterValues
getParameterMap
(可結合JavaBean使用)(getInputStream
用於文件上傳)
url後面若是有中文數據,須要編碼後再提交
表單提交的數據使用的碼錶和該頁面的碼錶一致,而getParameter
方法默認使用ISO-8859
碼錶。
解決:
request
對象的setCharacterEncoding
設置碼錶。getBytes("ISO-8859-1")
獲取二進制字節,再用特定碼錶構建字符串。也能夠經過改服務器配置來解決亂碼問題,但通常不建議使用。
URIEncoding
:改tomcat的配置文件conf/server.xml
的鏈接器<Connector>
中的URIEncoding
屬性useBodyEncodingForURI
:將conf/server.xml
的鏈接器<Connector>
中的useBodyEncodingForURI
置爲true
應用場景:MVC設計模式
使用request域對象把數據帶給轉發資源。調用request
對象的getRequestDispatcher
方法,再調用forward
方法。一次請求,瀏覽器地址欄不變。
forward
一些細節
forward
方法,原來寫入到緩衝區的內容被清空,但響應頭字段信息保持。include
方法能夠用於包含一些公共頁面(通常不在servlet中包含)
以斜槓/
開頭。若是是給服務器用,則/
表明當前web應用;若是給瀏覽器用,則/
表明網站。
例子:目錄結構以下
mail---------------------------Web應用所在目錄 |----form1.html |----WEB-INF目錄 |---------classes目錄 |---------lib目錄 |---------web.xml
request.getRequestDispatcher("/form1.html")
response.sendRedirect("mail/form1.html")
this.getServletContext().getRealPath("/form1.html")
this.getServletContext().getResourceAsStream("/form1.html")
<a href="/mail/form1.html">
<form action="/mail/form1.html">
其中,1,3,4是給服務器用;2,5,6是瀏覽器用
讀取referer
請求頭,不合要求則重定向。