Servlet運行的步驟html
Servlet做爲Web服務器的補充功能在運行時須要受到Servlet容器的管理,其運行的流程以下:java
解決輸出內容的亂碼問題數組
在service()方法中第一行的位置上添加以下代碼瀏覽器
response.setContentType("text/html;charset=utf-8")服務器
其中charset可使用其餘支持中文的字符集,如GBK。setContentType()有兩個做用:post
使用該段代碼修改默認的編碼方式時,必定要保證在調用print以前編寫,因此該段代碼儘可能放在service方法的第一行的位置。在charset以前使用的是分號隔開,若是寫錯,則會出現保存文件的界面,緣由是瀏覽器不能識別消息頭的值,因而讓用戶來處理ui
1 package com.yunhua.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class ServletTest extends HttpServlet { 11 public void service(HttpServletRequest request, HttpServletResponse response) { 12 response.setContentType("text/html;charset=utf-8");//放在第一行 13 PrintWriter out = null; 14 try { 15 out = response.getWriter(); 16 } catch (IOException e) { 17 // TODO Auto-generated catch block 18 e.printStackTrace(); 19 } finally { 20 out.print("中文"); 21 out.close(); 22 } 23 } 24 }
爲何表單提交中文會出現亂碼編碼
當表單提交時,瀏覽器會對錶單中的中文參數值進行編碼,而使用的編碼是打開頁面時所使用的字符集,如當前頁面使用的UTF-8的字符集進行顯示的,那麼表單提交的數據就會以UTF-8的方式進行編碼後傳輸,而Web服務器在默認狀況下對提交的表單數據會使用ISO-8859-1的字符集來解碼,編碼與解碼的方式不一致就產生了表單提交時的中文亂碼問題。spa
如何解決表單提交時的中文亂碼問題code
步驟1、確保表單所在的頁面按照指定的字符集打開
在HTML頁面中使用meta標記能夠確保瀏覽器按照指定的字符集進行解碼頁面,並限定表單提交時的數據編碼方式
1 <meta http-equiv="content-type" content="text/html;charset=utf-8">
在服務器端須要在調用getParameter方法讀取參數以前,告訴瀏覽器如何解碼,使用以下代碼便可完成該設置:
1 request.setCharacterEncoding("utf-8");
注意該方法必定要要放在全部request.getParameter方法以前。
這種方式只針對POST請求有效。
解決GET方式提交時的中文亂碼問題
步驟1、確保表單所在的頁面按照指定的字符集打開
在HTML頁面中使用meta標記能夠確保瀏覽器按照指定的字符集進行解碼頁面,並限定表單提交時的數據編碼方式
<meta http-equiv="content-type" content="text/html;charset=utf-8">
步驟2、完成ISO-8859-1到UTF-8格式的轉換
1 String username = request.getParameter(「username」); 2 username = new String(username.getBytes(「iso-8859-1」),「UTF-8」);
因爲GET方式提交的任何數據在服務器端必定會以ISO-8859-1的方式進行解碼,因此服務器端能夠先按ISO-8859-1的方式獲取字節數組,在將該數組轉變成UTF-8對應的字符串形式。
1 package com.yunhua.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class ServletTest extends HttpServlet { 11 public void service(HttpServletRequest request, HttpServletResponse response) { 12 response.setContentType("text/html;charset=utf-8");//放在第一行 13 PrintWriter out = null; 14 try { 15 request.setCharacterEncoding("UTF-8"); //放在前面攔截post請求的數據 16 //將iso-8859-1裝換成指定字符集 17 String param = new String(request.getParameter("").getBytes("iso-8859-1"), "UTF-8"); 18 out = response.getWriter(); 19 } catch (IOException e) { 20 // TODO Auto-generated catch block 21 e.printStackTrace(); 22 } finally { 23 out.print("中文"); 24 out.close(); 25 } 26 } 27 }