clipse運行頁面顯示中文亂碼
頁面源碼
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="ISO-8859-1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>客戶列表-BootCRM</title>
</head>
<body>
<h1>解決中文亂碼</h1>
</body>
</html>
tomcat運行后
打開瀏覽器地址欄打就會出現亂碼現象
分析問題
首先排查一下服務器是否啟動,回看console最下面 server startup 表示服務器已經啟動了 沒有問題也沒有報錯。
其次查看頁面源碼,發現有三處編碼為ISO-8859-1。
注意:數字英文都正常顯示,只是中文亂碼,是因為ISO-8859-1是單字節編碼,此字符集支持部分于歐洲使用的語言,這個編碼不支持中文,所以要換支持的編碼啦,現在一般都通用UTF-8,因為ISO-8859-1是一個8位的容器。因為只有8位, 沒那么多地方可以表示中文,但是,由于是單字節編碼,和計算機最基礎的表示單位一致,所以很多時候,仍舊使用 ISO-8859-1編碼來表示。而且在很多協議上,默認使用該編碼。
解決辦法
將代碼中三處的ISO-8859-1 改成UTF-8就好了。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>客戶列表-BootCRM</title>
</head>
<body>
<h1>解決中文亂碼</h1>
</body>
</html>
此時運行結果就正常了
位小伙伴今天我們來了解
JavaWeb 中的 Response
1)HttpServletResponse 概述
我們在創建 Servlet 時會覆蓋 service() 方法,或 doGet()/doPost(),這些方法都有兩個參數,分別是代表請求的 request 和代表響應 response。(今天我們主要來說說 response)
service 方法中的 response 的類型是 ServletResponse,而 doGet/doPost 方法的 response 的類型是 HttpServletResponse,HttpServletResponse 是ServletResponse 的子接口,功能和方法更加強大,所以今天我們來學習的就是 HttpServletResponse。
2)response 的運行流程
當我們通過頁面請求 web 應用的時候,Tomcat 就會創建一個 request 對象,和一個 response 對象一起傳進 Servlet 中,然后 Tomcat 會把response 緩沖區中的內容取出來 包裝成一個 http 響應返回頁面~
因為 response 代表響應,所以我們可以通過該對象分別設置 Http 響應的響應行,響應頭和響應體
3)通過response設置響應行
常用的狀態碼如下:
200 :請求成功。
302 :請求重定向。
304 :請求資源沒有改變,訪問本地緩存。
404 :請求資源不存在。
500 :服務器內部錯誤。
通過 setStatus(int sc)方法可以設置響應行的狀態碼。
4)通過 response 設置響應頭
方法:
addHeader(String name, String value)
addIntHeader(String name, int value)
addDateHeader(String name, long date)
setHeader(String name, String value)
setDateHeader(String name, long date)
setIntHeader(String name, int value)
其中,add表示添加,而set表示設置(會替換掉先前的內容)
5)重定向
重定向的意思:就好像我們去找張三借錢,張三沒錢,然后告訴我們李四有,讓我們去找李四。我們收到這個消息之后,就去找李四了。這就是一個重定向的過程。
下面用代碼來演示一下:
首先設置狀態碼302,然后設置頁面的路徑~
這樣在我們訪問 Servlet1 的時候,頁面就會跳轉到 Servlet2 。
這個就是重定向了~我們也可以把 Servlet1 中的兩句代碼簡化成為一行
這個是Sun公司為我們封裝好玩的呦~
6)通過 response 設置響應體
響應體設置文本
PrintWriter getWriter()
獲得字符流,通過字符流的 write(String s) 方法可以將字符串設置到 response 緩沖區中,隨后 Tomcat 會將 response 緩沖區中的內容組裝成 Http 響應返回給瀏覽器端。
關于設置中文的亂碼問題
response 緩沖區的默認編碼是 iso8859-1,此碼表中沒有中文,可以通過 setCharacterEncoding(String charset) 設置 response 的編碼。但是這樣客戶端還是不能正常顯示文字。
因為瀏覽器的默認編碼是本地系統的編碼,因為我們都是中文系統,所以客戶端瀏覽器的默認編碼是 GBK。
我們可以通過 response 的 setContentType(String type) 方法指定頁面解析時的編碼是UTF-8。
因為該方法含有 setCharacterEncoding 的功能,所以在實際開發中只要編寫 response.setContentType("text/html;charset=UTF-8");就可以解決頁面輸出中文亂碼問題了。
那么今天就到這里了
伙伴們再見了
我是萌新娜娜
立志做一個不翻車的老司機
學習Java的路上請多多指教
大家如果想要更深入了解java相關知識,私信我回復:【Java】 即可知道你們想要知道的java相關問題
文亂碼問題是比較常見和煩人的問題,本文通過一個小程序介紹了如何通過Servlet從上一個頁面獲取參數,
方法很簡單:調用request.getParameter(String s)方法。
解決中文亂碼問題的方法是:
首先要設置response響應的格式:response.setContextType("text/html;charSet=GBK");
然后在加上request.setCharacterEncoding("GBK")
需要注意的是這是解決post方式提交的內容的中文亂碼問題。
解決get方式提交內容的中文亂碼問題的方法:
在Tomcat->conf文件夾->server.xml-->connecter標簽里加上:
URIEncoding="GBK"(注意:在xml里面“=”兩邊不要有空格)
關于Post和Get之間的區別可以看我轉載的另一篇博文:
HTTP POST GET 本質區別詳解
例子:
1.threeparams.html
2.ThreeParams.java
補充:
上面的這個例子.html中每個name都不一樣,如果有多個一樣的name時,可以按如下的方法來獲取:
1)Enumeration paramNames = request.getParameterNames()
調用此方法獲得所有參數的名字,返回一個Enumeration
2) while(paramNames.hasMoreElements()){
String paramName = (String)paramNames.nextElement();
String[] paramValues = request.getParameterValues(paramName);
...
*請認真填寫需求信息,我們會在24小時內與您取得聯系。