Javaweb接收表單數(shù)據(jù)并處理中文亂碼
前端表單數(shù)據(jù)
常見的表單項的傳值,如:
- 普通input
- 單選radio
- 多選checkbox
- select下拉選擇
- textarea文本域
普通 input : name屬性值為后臺接收時的參數(shù)值。
用戶名:<input type="text" name="username"><br>
密碼:<input type="password" name="password"><br>
單選 radio :單選按鈕的 name 值相同才能實現(xiàn)只能點擊一個。
性別:
<input type="radio" name="gender" value="男">男
<input type="radio" name="gender" value="女">女
多選checkbox :name值相同。
愛好:
<input type="checkbox" name="hobby" value="唱">唱
<input type="checkbox" name="hobby" value="跳舞">跳舞
<input type="checkbox" name="hobby" value="rap">rap
<input type="checkbox" name="hobby" value="籃球">籃球
select下拉選擇 :后臺通過degree作為參數(shù),獲取選中的那個option的value值。
下拉選擇:
<select name="degree">
<option value="">---請選擇---</option>
<option value="大一">大一</option>
<option value="大二">大二</option>
<option value="大三">大三</option>
<option value="大四">大四</option>
</select>
textarea文本域 :rows定義顯示的行數(shù),cols定義的是顯示的列數(shù)。
文本域:<br><textarea name="other" rows="10" cols="30"></textarea><br>
后臺接收數(shù)據(jù)
接收表單數(shù)據(jù):
String 表單name= request.getParameter(表單name);
普通input、單選radio、select下拉選擇、textarea文本域可通過此方法獲取。
String[] hobbies = request.getParameterValues("hobby");
多選checkbox可通過此方法獲取。
中文亂碼處理
GET方式提交的數(shù)據(jù)
先通過 String username = request.getParameter(username) 獲得該表單的值,此時是亂碼的。
使用String new_username = new String(username.getBytes("iso8859-1"), "utf-8") 進(jìn)行編碼轉(zhuǎn)換
相關(guān)APi :
String(byte[] bytes, Charset charset) 構(gòu)造一個新的String,由指定的字節(jié)的數(shù)組轉(zhuǎn)化為指定編碼的字節(jié)數(shù)組。
getBytes(Charset charset)使用指定的編碼方式將該String編碼為字節(jié)序列,將結(jié)果存儲到新的字節(jié)數(shù)組中。
解釋:通過get方式提交的數(shù)據(jù)的編碼方式為iso8859-1, 先獲取該編碼方式的字節(jié)數(shù)組,再將該字節(jié)數(shù)組轉(zhuǎn)化為utf-8編碼的字節(jié)數(shù)組,然后將該字節(jié)數(shù)組轉(zhuǎn)換為字符串。
POST方式提交的數(shù)據(jù)
request.setCharacterEncoding("utf-8");
服務(wù)器端向客戶端發(fā)送的數(shù)據(jù)
response.setContentType("text/html;charset=utf-8");
以下是全部代碼:
GET提交方式:
@WebServlet(name = "RegisterServlet",urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//get提交方式處理中文亂碼
String username = request.getParameter("username");
String new_username = new String(username.getBytes("iso8859-1"), "utf-8");
String password = request.getParameter("password");
String new_password = new String(password.getBytes("iso8859-1"), "utf-8");
String gender = request.getParameter("gender");
String new_gender = new String(gender.getBytes("iso8859-1"), "utf-8");
String[] hobbies = request.getParameterValues("hobby");
for (int i = 0; i < hobbies.length; i++) {
hobbies[i]=new String(hobbies[i].getBytes("iso8859-1"), "utf-8");
}
String degree = request.getParameter("degree");
String new_password = new String(password.getBytes("iso8859-1"), "utf-8");
String other = request.getParameter("other");
String new_password = new String(password.getBytes("iso8859-1"), "utf-8");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
POST提交方式:
@WebServlet(name = "RegisterServlet",urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//post提交方式的中文亂碼解決方法
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String gender = request.getParameter("gender");
String[] hobbies = request.getParameterValues("hobby");
String degree = request.getParameter("degree");
String other = request.getParameter("other");
//如果服務(wù)器端需要向客戶端發(fā)送的數(shù)據(jù)
response.setContentType("text/html;charset=utf-8");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Freemaker Replace函數(shù)的正則表達(dá)式運用
這篇文章主要介紹了Freemaker Replace函數(shù)的正則表達(dá)式運用 的相關(guān)資料,需要的朋友可以參考下2015-12-12
如何使用lamda表達(dá)式對list進(jìn)行求和
這篇文章主要介紹了如何使用lamda表達(dá)式對list進(jìn)行求和問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
Java中的Scanner、BufferedReader?和?StreamTokenizer使用詳解
Scanner是Java?中一個用于解析原始類型(如?int、double?等)和字符串的類,它通常從輸入流中逐個讀取數(shù)據(jù)并進(jìn)行解析,支持多種分隔符的使用,本文介紹Java中的Scanner、BufferedReader?和?StreamTokenizer的相關(guān)知識,感興趣的朋友一起看看吧2025-02-02
Feign遠(yuǎn)程調(diào)用參數(shù)里面內(nèi)容丟失的解決方案
這篇文章主要介紹了Feign遠(yuǎn)程調(diào)用參數(shù)里面內(nèi)容丟失的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
老生常談Java中List與ArrayList的區(qū)別
大家都知道List是接口,ArrayList是List接口的一個實現(xiàn)類,接下來通過本文給大家介紹Java中List與ArrayList的區(qū)別,需要的朋友可以參考下2022-08-08
關(guān)于RedisTemplate之opsForValue的使用說明
這篇文章主要介紹了關(guān)于RedisTemplate之opsForValue的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
java中使用Filter控制用戶登錄權(quán)限具體實例
java中使用Filter控制用戶登錄權(quán)限具體實例,需要的朋友可以參考一下2013-06-06

