1、中文处理的两种方法
1、对所有的数据进行再编码:ISO8859-1 编码,String类中的getBytes("ISO8859-1") ;
public byte[] getBytes("encoding"),再将 byte 数组重新变为字符串
String name = new String(request.getParameter("uname").getBytes("ISO8859-1"))
2、设置统一字符编码:request.setCharacterEncoding("GBK") ;
public void setCharacterEncoding(String env) throws UnsupportedEncodingException
GBK > GB2312 GBK是中文编码、GB2312 是简体中文编码
<%@ page contentType="text/html;charset=gbk"%> < html> < body> < % // 接收内容 /* String name = request.getParameter("uname") ; byte[] b = name.getBytes("ISO8859-1") ; name = new String(b) ; */ // String name = new String(request.getParameter("uname").getBytes("ISO8859-1")) ; request.setCharacterEncoding("GBK") ; String name = request.getParameter("uname") ; %> < h1>输入内容为:<%=name%></h1> < /body> < /html>
2、如果传递的内容是数组(复选框的情况下、多个下拉列表项)使用 request 的以下方法取得数据:
public String[] getParameterValues(String name)
public String[] getParameterValues(String name)
demo03.html
<html> < body> < form action="demo04.jsp" method="post"> 用户名:<input type="text" name="uname"><br> 兴趣: <input type="checkbox" name="inst" value="篮球">篮球 <input type="checkbox" name="inst" value="游泳">游泳 <input type="checkbox" name="inst" value="唱歌">唱歌 <input type="checkbox" name="inst" value="跳舞">跳舞 <input type="checkbox" name="inst" value="看书">看书 <br> <input type="submit" value="提交"> < /form> < /body> < /html>demo04.jsp
<%@ page contentType="text/html;charset=gbk"%> < html> < body> < % // 接收内容 request.setCharacterEncoding("GBK") ; String name = request.getParameter("uname") ; String inst[] = request.getParameterValues("inst") ; %> < h1>用户名为:<%=name%></h1> < h1>兴趣为: < % for(int i=0;i<inst.length;i++) { %> <%=inst[i]%>、 < % } %> < /h1> < /body> < /html>3、在开发中较为常用的表单控件:隐藏域将内容隐藏起来,使用户不能修改,之后随表单一起提交到服务器上显示
<input type="hidden" name="uname" value="mldn">
4、地址重写
http://localhost/test/basic/04/demo06.jsp?uname=Hello
通过地址重写,可以将内容传递到服务器端 —— 服务器端只认HTTP 协议,而不管接收的内容是以何种形式传送过来的
如果传递多个参数呢?
<a href="demo06.jsp?uname=MLDN&upass=LiXingHua">demo06.jsp</a>
http://localhost/test/basic/04/demo06.jsp?uname=Hello
通过地址重写,可以将内容传递到服务器端 —— 服务器端只认HTTP 协议,而不管接收的内容是以何种形式传送过来的
如果传递多个参数呢?
<a href="demo06.jsp?uname=MLDN&upass=LiXingHua">demo06.jsp</a>
5、getParameterNames 取得客户端所有请求的参数
public Enumeration getParameterNames()
Enumeration:枚举
Enumeration:枚举
demo7.html
<html> < body> < form action="demo08.jsp" method="post"> 用户名:<input type="text" name="uname"><br> 密码:<input type="password" name="upass"><br> 兴趣: <input type="checkbox" name="**inst" value="篮球">篮球 <input type="checkbox" name="**inst" value="游泳">游泳 <input type="checkbox" name="**inst" value="唱歌">唱歌 <input type="checkbox" name="**inst" value="跳舞">跳舞 <input type="checkbox" name="**inst" value="看书">看书 <br> <input type="submit" value="提交"> < /form> < /body> < /html>demo08.jsp 体会下面代码的优点,不用考虑请求参数的个数
<%@ page contentType="text/html;charset=gbk"%> < %@ page import="java.util.*"%> < html> < body> < % // 接收内容 request.setCharacterEncoding("GBK") ; Enumeration enu = request.getParameterNames() ; %> < % while(enu.hasMoreElements()) { String name = (String)enu.nextElement() ; if(name.startsWith("**")) { String temp[] = request.getParameterValues(name) ; %> <h1><%=name%> --> < % for(int i=0;i<temp.length;i++) { %> <%=temp[i]%>、 < % } %> </h1> < % } else { %> <h1><%=name%> --> <%=request.getParameter(name)%></h1> < % } } %> < /h1> < /body> < /html>6、功能:取得客户端 IP 地址
public String getRemoteAddr()
总结:只要是客户端信息,在服务器端都可以通过 request 对象取得