Javaweb接收表單數(shù)據并處理中文亂碼
前端表單數(shù)據
常見的表單項的傳值,如:
- 普通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ù)據
接收表單數(shù)據:
String 表單name= request.getParameter(表單name);
普通input、單選radio、select下拉選擇、textarea文本域可通過此方法獲取。
String[] hobbies = request.getParameterValues("hobby");
多選checkbox可通過此方法獲取。
中文亂碼處理
GET方式提交的數(shù)據
先通過 String username = request.getParameter(username) 獲得該表單的值,此時是亂碼的。
使用String new_username = new String(username.getBytes("iso8859-1"), "utf-8") 進行編碼轉換
相關APi :
String(byte[] bytes, Charset charset) 構造一個新的String,由指定的字節(jié)的數(shù)組轉化為指定編碼的字節(jié)數(shù)組。
getBytes(Charset charset)使用指定的編碼方式將該String編碼為字節(jié)序列,將結果存儲到新的字節(jié)數(shù)組中。
解釋:通過get方式提交的數(shù)據的編碼方式為iso8859-1, 先獲取該編碼方式的字節(jié)數(shù)組,再將該字節(jié)數(shù)組轉化為utf-8編碼的字節(jié)數(shù)組,然后將該字節(jié)數(shù)組轉換為字符串。
POST方式提交的數(shù)據
request.setCharacterEncoding("utf-8");
服務器端向客戶端發(fā)送的數(shù)據
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"); //如果服務器端需要向客戶端發(fā)送的數(shù)據 response.setContentType("text/html;charset=utf-8"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
SpringCloud之Config配置中心與Redis分布式鎖詳解
這篇文章主要給大家介紹了SpringCloud Alibaba中Config配置中心,Redis分布式鎖,文中有詳細的代碼示例供大家參考,需要的朋友可以參考閱讀2023-05-05SpringAOP中基于注解實現(xiàn)通用日志打印方法詳解
這篇文章主要介紹了SpringAOP中基于注解實現(xiàn)通用日志打印方法詳解,在日常開發(fā)中,項目里日志是必不可少的,一般有業(yè)務日志,數(shù)據庫日志,異常日志等,主要用于幫助程序猿后期排查一些生產中的bug,需要的朋友可以參考下2023-12-12Mybatis generator修改Mapper.java文件實現(xiàn)詳解
這篇文章主要為大家介紹了Mybatis generator修改Mapper.java文件實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09Java數(shù)據結構之有向圖設計與實現(xiàn)詳解
有向圖是具有方向性的圖,由一組頂點和一組有方向的邊組成,每條方向的邊都連著一對有序的頂點。本文為大家介紹的是有向圖的設計與實現(xiàn),需要的可以參考一下2022-11-11SpringBoot?AOP中JoinPoint的使用方式和通知切點表達式
這篇文章主要介紹了SpringBoot?AOP中JoinPoint的使用方式和通知切點表達式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05