자바 웹 에서 폼 데이터 및 디 코딩 문 제 를 해결 하 는 방법

6414 단어 javaweb폼 데이터
먼저 사용자 제출 인터페이스 를 예 로 들 면(텍스트 상자,암호 상자,선택,드 롭 다운 폼 등)효 과 는 다음 과 같 습 니 다.
这里写图片描述

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>     </title>
</head>
<body>
<!--      -->
<form action="/requesttest/request5" method="get">
<table>
<!--       -->
<tr>
<td>   </td>
<td><input type="text" name="username"/></td>
</tr>
<!--     -->
<tr>
<td>  </td>
<td><input type="password" name="password" /></td>
</tr>
<!--      radio-->
<tr>
<td>  </td>
<td>
<input type="radio" name="gender" value="male" />  
<input type="radio" name="gender" value="female" /> 
</td>
</tr>
<!--     -->
<tr>
<td>  </td>
<td>
<input type="checkbox" name="hobby" value="sport" />   
<input type="checkbox" name="hobby" value="music" />   
<input type="checkbox" name="hobby" value="game" />   
</td>
</tr>
<!--     -->
<tr>
<td>  </td>
<td>
<select name="city">
<option value="beijing">  </option>
<option value="shanghai">  </option>
<option value="shenzhen">  </option>
</select>
</td>
</tr>
<!--       -->
<tr>
<td>    </td>
<td>
<textarea rows="5" cols="60" name="introduce"></textarea>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="  "/></td>
</tr>
</table>
</form>
</body>
</html>
주의:HTML
태그 의 action 속성,그 정의 와 용법 은:

<!--    action           ,         。 -->
<form action="value">
속성 값 은 URL 입 니 다.폼 데 이 터 를 어디로 보 내 는 지 표시 합 니 다.가능 한 값:
절대 URL-다른 사이트(예:src="www.example.com/example.htm")
상대 URL-사이트 내 파일 가리 키 기(예:src="example.htm")
예 를 들 어 아래 폼 은 두 개의 입력 필드 와 제출 단 추 를 가지 고 있 습 니 다.폼 을 제출 할 때 폼 데 이 터 는'form'이 라 고 합 니 다.action.asp 페이지:

<form action="form_action.asp" method="get">
<p>First name: <input type="text" name="fname" /></p>
<p>Last name: <input type="text" name="lname" /></p>
<input type="submit" value="Submit" />
</form>
method 는 get 이기 때문에 servlet 의 doGet 방법 에서 정 보 를 가 져 옵 니 다.

public class RequestServlet5 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//   post  
// request.setCharacterEncoding("utf-8");
//    getParameter       
String username = request.getParameter("username");
System.out.println(username); //      
//   get  (      ) ---       
// username = URLEncoder.encode(username, "ISO-8859-1");//  ISO  
// username = URLDecoder.decode(username, "utf-8"); //  utf-8  
username = new String(username.getBytes("ISO-8859-1"), "utf-8");
System.out.println(username);
//     
if (username != null && username.trim().length() > 0) {
System.out.println("username   ");
}
//    getParameter    checkbox(   )     。           
String hobby = request.getParameter("hobby"); //    
System.out.println(hobby);
//   checkbox      --- getParameterValues
String[] hobbies = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbies));
System.out.println("--------------------------------");
//           
//     :         name ,    name   value
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();//          
System.out.println(name + ":"
+ Arrays.toString(request.getParameterValues(name)));
}
System.out.println("----------------------------");
//     :  request.getParameterMap
Map<String, String[]> parameterMap = request.getParameterMap();
Set<String> keys = parameterMap.keySet();
for (String key : keys) { // key    name
System.out.println(key + ":"
+ Arrays.toString(parameterMap.get(key)));
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
요청 매개 변수 오류 의 원인
URL 인 코딩 은 폼 을 압축 해서 입력 하 는 브 라 우 저 형식 입 니 다.브 라 우 저 는 폼 에서 모든 name 과 그 값 을 가 져 와 name/value 매개 변수 인 코딩(전송 할 수 없 는 문자,데이터 순위 등)을 URL 의 일부분 으로 하거나 서버 에 분리 해서 보 냅 니 다.
这里写图片描述
서로 다른 요청 방식 은 서로 다른 해결 방법 에 대응 합 니 다.
post―-request.setCharacterEncoding("클 라 이언 트 인 코딩 집합");
get 난 코드 수 동 해결

username = URLEncoder.encode(username, “ISO-8859-1”);//  ISO   
username = URLDecoder.decode(username, “utf-8”); //  utf-8   
위 표기 법 을 간소화 합 니 다:username=new String(username.getBytes("ISO-8859-1"),"utf-8");
get 난 코드 설정 tomcat 기본 디 코딩 문자 집합
tomcat/conf/server.xml
커 넥 터 에 속성 URIEncoding="utf-8"추가
결론:개발 시 tomcat 기본 디 코딩 집합 을 수정 하지 마 십시오.제출 요청 은 post 를 사용 하 십시오.get 을 사용 하지 않 으 려 면 수 동 인 코딩 을 사용 하 십시오.

좋은 웹페이지 즐겨찾기