乱码问题及request对象的三个方法:getParameter、getParameterValues、getParameterNames
一、处理乱码问题
<%@ pagecontentType="text/html;charset=gbk"%> :page指令用来处理显示页面中的乱码。无法处理传输数据的乱码问题。用getBytes()或setCharacterEncoding()方法来处理传输数据的乱码问题。
方法1:getBytes()方法——对数据进行再编码(ISO8851-1)
String name =request.getParameter("uname");
byte[] b =name.getBytes("iso-8859-1");
name = newString(b);
以上代码等同于:
String name = new String(request.getParameter("uname").getBytes("iso-8859-1"));
方法2:setCharacterEncoding()——设置统一的字符编码
request.setCharacterEncoding("gbk");
String name =request.getParameter("uname");
二、复选框——接受多个数据(数组):getParameterValues方法
前台显示页面
<html>
<head>
<title>requestdemo</title>
<body>
<form action="demo04.jsp"method="post">
用户名:<inputtype="text" name="uname"/><br>
兴趣:
<inputtype="checkbox" name="hobit" value="篮球">篮球
<inputtype="checkbox" name="hobit" value="游泳">游泳
<inputtype="checkbox" name="hobit" value="唱歌">唱歌
<inputtype="checkbox" name="hobit" value="跳舞">跳舞
<inputtype="checkbox" name="hobit" value="看书">看书
<br>
<inputtype="submit" value="提交" />
</form>
</body>
</head>
</html>
后台处理页面
<%@ pagecontentType="text/html;charset=gbk"%>
<html>
<head>
<title>requestdemo</title>
<body>
<%
//进行乱码处理
request.setCharacterEncoding("gbk");
//接收用户名
String name =request.getParameter("uname");
//接收兴趣,注意接收复选框数据时,应采用数组来存放,取出复选框中每个元素的值存放在hobit[]数组中
String hobit[] =request.getParameterValues("hobit");
%>
<h1>用户名为:<%=name%></h1>
<h1>兴趣为:
<%
//遍历数组中的值
for(inti=0;i<hobit.length;i++){
%>
<%=hobit[i]%>、
<%
}
%>
</h1>
</body>
</head>
</html>
三、隐藏域
简单接受即可
前台显示页面
<input type ="hidden" name = "uname" value = "zhang">
后台处理页面
String name =request.getParameter("uname");
<h1>内容为:<%=name%></h1>
四、地址重写
1、在地址栏中复制附带参数的URL,如http://localhost:8080/test/demo.jsp?uname=zhang相当于在前台显示页面输入数据点提交。
2、通过超链接
将<a href ="demo.jsp?uname=zhang"></a>代码写入前台显示页面,点击超链接同样相当于在前台显示页面输入数据点提交。
注:当传输多个参数时则用"&"符号添加多个参数
demo.jsp?uname=zhang&password=123&gender=1
通过地址重写,可以将数据传送到服务器端,服务器只认HTTP协议,而不管接受的数据是以何种形式传送过来的
五、getParameterName()方法
前台增加类似用户或密码等输入数据时,无须改变后台服务器段的接受代码,只需新建一个接受属性Enumerationenu = request.ge【】tParameterNames();而无须再建多个接受属性,如:String name= request.getParameterName()、String password =request.getParameterName()等等其它属性
示例:
<%@ pagecontentType="text/html;charset=gbk"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>requestdemo,Enumeration的用法</title>
<body>
<%
//进行乱码处理
request.setCharacterEncoding("gbk");
//接收客户端传递过来的所有参数,用Enumeration来接收,注意接收到的是参数的名字,而不是值
Enumeration enu =request.getParameterNames() ;
%>
<%
while(enu.hasMoreElements()){
String name =(String)enu.nextElement() ;
if(name.startsWith("**"))
{
//以数组来接收复选框中的数据,取出复选框中每个元素的值存放在temp[]数组中
Stringtemp[] = request.getParameterValues(name);
%>
<h1><%=name%>-->
<%
//遍历数组中的值
for(inti=0;i<temp.length;i++){
%>
<%=temp[i]%>、
<%
}
%>
</h1>
<%
}
else
{
%>
<h1><%=name%>---><%=request.getParameter(name)%></h1>
<%
}
%>
<%
}
%>
</body>
</head>
</html>
六、接受IP地址:getRemoteAddr()方法
示例:
<%@ pagecontentType="text/html;charset=gbk"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>jsp</title>
<body>
<h1><%=request.getRemoteAddr()%></h1>
</body>
</head>
</html>