为此,方案之一可以在JSP网页上使用脚本化语言进行URLEncoding处理。如:
view plaincopy to clipboardprint?
<%@page import="Java.net.URLEncoder"%>
<a href="https://www.linuxidc.com/hello/checkUser.html?opt=<%=URLEncoder.encode("中文", "UTF-8")%>">使用者身份验证</a>
request-body的编码处理
request-body只有在POST提交的方式下才会产生。request-body的编码方式由表单的enctype标签属性指定,同request-line一样,编码request-body时使用的字符集也是当前网页在浏览器上显示时所使用的字符集。request-body的编码过程由客户端浏览器自动完成,不需要额外的编程处理。
服务器的处理
相对于用户端,服务器端在接收到HTTP请求时提供了两种处理请求数据的方式:自动处理与不处理。
服务器一般会自动处理application/x-www-form-urlencoded类型的数据(包括request-line及request-body中的数据),就servlet(Servlet类或JSP网页)而言,可以通过request对象的getParameter()或getParameterValues()取得这些数据。对于除此以外的其它MIME类型的数据,HTTP服务器则是将处理的过程直接交到了与HTTP请求相对应的servlet(Servlet类或JSP网页)身上。
例如用户端有以下表单被提交:
view plaincopy to clipboardprint?
<form action="checkUser.html?opt=xxx" method="POST">
<input type="text" value="yyy"/>
<input type="text" value="zzz"/>
<inupt type="submit" value="submit"/>
</form>
表单提交时经服务器端自动处理后与checkUser.html相对应的servlet(Servlet类或JSP网页)可以通过下面的方式取得数据:
String opt = request.getParameter("opt");
String[] users = request.getParameterValues("username");
String opt = request.getParameter("opt");
String[] users = request.getParameterValues("username");
默认情况下,服务器对于接收到的application/x-www-form-urlencoded类型数据进行字符集为ISO-8859-1的URLDecoding处理,经过处理之后的字符串内码为ISO-8859-1。对于没有附加任何设置的HTTP服务器而言,我们的servlet在取得数据之后必须进行相应的解码处理,生成内码为UTF-16(unicode)的字符串。