자바 웹 프로그래밍에서 잘못된 코드가 자주 나타납니다. 이제 잘못된 코드를 방지하기 위한 설정 방법을 자세히 설명하겠습니다.
1 웹 페이지 인코딩
웹 작성 시 페이지, 웹 페이지의 인코딩 형식을 지정해야 하며 를 사용하여 지정합니다. 이때 브라우저는 요청을 읽거나 보낼 때 지정된 인코딩 형식으로 데이터를 저장하거나 보냅니다. 여기서는 utf-8 형식입니다.
예를 들어 코드 조각은 다음과 같습니다.
<form action="/Pro1/bb" method="post"> 用户名: <input type="text" name="username" ><br> 性别: 男<input type="radio" name="gender" value="男"> 女<input type="radio" name="gender" value="女"><br> 喜欢的颜色:<br> 红<input type="checkbox" name="color" value="红"> 绿<input type="checkbox" name="color" value="绿"> 蓝<input type="checkbox" name="color" value="蓝"> <br>来自的国家 <select name="country"> <option value="中国">中国</option> <option value="美国">美国</option> <option value="日本">日本</option> </select> <br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form>
2 백엔드는 요청 데이터를 읽습니다.
Java 웹 서블릿에서 요청된 데이터를 얻으려면 다음을 수행해야 합니다. 보내십시오. 이진 데이터는 해당 코드 테이블에 따라 디코딩되어야 해당 사람이 읽을 수 있는 문자열을 얻을 수 있습니다. 이 예에서는 post 메소드가 사용되므로 post 요청을 처리할 때 중국어 요청 매개변수를 얻기 전에 인코딩 형식을 설정해야 합니다. 그렇지 않으면 잘못된 문자가 나타납니다. 서버는 기본적으로 디코딩을 위해 iso-8859-1 인코딩 테이블을 사용하기 때문입니다.
물론 출력에 한자를 출력하려면 통합 문자 인코딩도 사용해야 합니다. 여기서는 utf-8, 코드는 다음과 같습니다
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String gender = request.getParameter("gender"); String[] colors = request.getParameterValues("color"); String country = request.getParameter("country"); out.println("<!DOCTYPE HTML>"); out.println("<HTML>"); out.println(" <HEAD><TITLE>测试servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print("<h1>以下是您的输入</h1>"); out.print("<p>"); out.print("您的用户名:"+username+"<br>"); out.print("您的性别:"+gender+"<br>"); out.print("您喜欢的颜色:"); for(String cr:colors){ out.print(cr+" "); } out.print("<br>"); out.print("您的国家:"+country+"<br>"); out.print("</p>"); out.println(" </BODY>"); out.println("</HTML>"); }
참고: 여기의 요청은 .setCharacterEncoding("utf-8"); 요청 엔터티의 콘텐츠에만 유효합니다. 게시 요청 매개변수는 요청 엔터티에 저장됩니다. get 메소드의 요청 매개변수는 물음표로 시작하는 URL 뒤에 배치되며 '&'는 여러 매개변수를 연결합니다. 따라서 get 메소드의 매개변수를 얻으려면 수동 디코딩을 사용하거나 필터를 사용해야 합니다.
수동 디코딩 방법. 단순화를 위해 실제 사용에서는 각 매개변수를 디코딩해야 합니다. String Gender = new String(req.getParameter("gender").getBytes("iso- 8859) -1"),"utf-8") ;
이쯤 되면 웹페이지나 서버에서 한자가 깨져 나오는 현상은 완벽하게 해결될 수 있습니다. 한 가지 기억해두셔야 할 것은 모두 사용에 의한 한자 깨짐입니다. 코딩 테이블이 다른 이유는 문제를 해결하기 위해 동일한 코딩 테이블을 사용하기 때문입니다.