读取表单的值

## 1.Request对象

可以使用getParameter(string s)方法获取该表单通过text提交的信息。该对象封装了用户提交的信息，通过调用该对象相应的方法可以获取封装的信息，即使用该对象可以获取用户提交信息。如：

Request.getParameter(“boy”)

例：request1.jsp：

1. <%@ page contentType="text/html;charset=GB2312" %>

2. <body bgcolor=green>

3. <form action="tree.jsp" method=post name=form>

4. <input type="text" name="boy">

5. <input TYPE="submit" value="Enter" name="submit">

6. </form>

7. </body>

tree.jsp：

<%@ page contentType="text/html;charset=GB2312" %>

<body bgcolor=green>

获取文本框提交的信息：

<%String textContent=request.getParameter("boy");

%>

<%=textContent%>

获取按钮的名字：

<%String buttonName=request.getParameter("submit");

%>

<%=buttonName%>

</body>

使用request对象获取信息要格外小心，要避免使用空对象，否则会出现NullPointerException异常，所以我们可以作以下处理.

request3.jsp

1. <%@ page contentType="text/html;charset=GB2312" %>

2. <body bgcolor=cyan>

3. <form action="" method=post name=form>

4. <input type="text" name="girl">

5. <input TYPE="submit" value="Enter" name="submit">

6. </form>

7. <%String textContent=request.getParameter("girl");

8. double number=0,r=0;

9. if(textContent==null)

10. {textContent="";

11. }

12. try{ number=Double.parseDouble(textContent);

13. if(number>=0)

14. {r=Math.sqrt(number) ;

15. out.print("
"+String.valueOf(number)+"的平方根：");

16. out.print("
"+String.valueOf(r));

17. }

18. else

19. {out.print("
"+"请输入一个正数");

20. }

21. }

22. catch(NumberFormatException e)

23. {out.print("
"+"请输入数字字符");

24. }

25. %>

26. </body>

## 2.处理汉字信息

当request对象获取客户提交的汉字字符时，会出现乱马问题，必须进行特殊处理。首先，将获取的字符串用ISO-8859-1进行编码，并将编码存放到一个字节数组中，然后再将这个属组转化为字符窜对象即刻。

如:

String textContent=request.getParameter("boy");

byte b[]=textContent.getBytes("ISO-8859-1");

textContent=new String(b);

例：tree2.jsp

<%@ page contentType="text/html;charset=GB2312" %>

<body>

获取文本框提交的信息：

<%String textContent=request.getParameter("boy");

byte b[]=textContent.getBytes("ISO-8859-1");

textContent=new String(b);

%>

<%=textContent%>

获取按钮的名字：

<%String buttonName=request.getParameter("submit");

byte c[]=buttonName.getBytes("ISO-8859-1");

buttonName=new String(c);

%>

<%=buttonName%>

</body>

## 3.常用方法举例

常用的方法包括：

getProtocol(), getServletPath(), getContentLength(), getMethod(), getRemoteAddr(), getRemoteHost(), getServerName(), getParameterName()

例：

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import="java.util.*" %>

<body bgcolor=cyan>

客户使用的协议是:

<% String protocol=request.getProtocol();

out.println(protocol);

%>

获取接受客户提交信息的页面：

<% String path=request.getServletPath();

out.println(path);

%>

接受客户提交信息的长度：

<% int length=request.getContentLength();

out.println(length);

%>

客户提交信息的方式：

<% String method=request.getMethod();

out.println(method);

%>

获取HTTP头文件中User-Agent的值：：

<% String header1=request.getHeader("User-Agent");

out.println(header1);

%>

获取HTTP头文件中accept的值：

<% String header2=request.getHeader("accept");

out.println(header2);

%>

获取HTTP头文件中Host的值：

<% String header3=request.getHeader("Host");

out.println(header3);

%>

获取HTTP头文件中accept-encoding的值：

<% String header4=request.getHeader("accept-encoding");

out.println(header4);

%>

获取客户的IP地址：

<% String IP=request.getRemoteAddr();

out.println(IP);

%>

获取客户机的名称：

<% String clientName=request.getRemoteHost();

out.println(clientName);

%>

获取服务器的名称：

<% String serverName=request.getServerName();

out.println(serverName);

%>

获取服务器的端口号：

<% int serverPort=request.getServerPort();

out.println(serverPort);

%>

获取客户端提交的所有参数的名字：

<% Enumeration enum=request.getParameterNames();

while(enum.hasMoreElements())

{String s=(String)enum.nextElement();

out.println(s);

}

%>

获取头名字的一个枚举：

<% Enumeration enum_headed=request.getHeaderNames();

while(enum_headed.hasMoreElements())

{String s=(String)enum_headed.nextElement();

out.println(s);

}

%>

获取头文件中指定头名字的全部值的一个枚举：

<% Enumeration enum_headedValues=request.getHeaders("cookie");

while(enum_headedValues.hasMoreElements())

{String s=(String)enum_headedValues.nextElement();

out.println(s);

}

%>

</body>

## 4．获取HTML表单提交的数据

单选框radio值的获取方法。例：

radio.jsp：

1. <%@ page contentType="text/html;charset=GB2312" %>

2. <body bgcolor=cyan>

3. 诗人李白是中国历史上哪个朝代的人：

4. <form action="answer.jsp" method=post name=form>

5. <input type="radio" name="R" value="a">宋朝

6. <input type="radio" name="R" value="b">唐朝

7. <input type="radio" name="R" value="c">明朝

8. <input type="radio" name="R" value="d" checked="ok">元朝

9.

10. 小说红楼梦的作者是：

11.

12. <input type="radio" name="P" value="a">曹雪芹

13. <input type="radio" name="P" value="b">罗贯中

14. <input type="radio" name="P" value="c">李白

15. <input type="radio" name="P" value="d">司马迁

16.

17. <input TYPE="submit" value="提交答案" name="submit">

18. </form>

19. </body>

answer.jsp：

1. <%@ page contentType="text/html;charset=GB2312" %>

2. <body bgcolor=cyan>

3. <% int n=0;

4. String s1=request.getParameter("R");

5. String s2=request.getParameter("P");

6. if(s1==null)

7. {s1="";}

8. if(s2==null)

9. {s2="";}

10. if(s1.equals("b"))

11. { n++;}

12. if(s2.equals("a"))

13. { n++;}

14. %>

15. 您得了<%=n%>分

16. </body>

17. 列表框<select><option>

18. 例：

19. select.jsp：

20. <%@ page contentType="text/html;charset=GB2312" %>

21. <body bgcolor=cyan>

22. 选择计算和的方式

23. <form action="sum.jsp" method=post name=form>

24. <select name="sum" size=2>

25. <option Selected value="1">计算1到n的连续和

26. <option value="2">计算1到n的平方和

27. <option value="3">计算1到n的立方和

28. </select>

29. 选择n的值：

30. <select name="n" >

31. <option value="10">n=10

32. <option value="20">n=20

33. <option value="30">n=30

34. <option value="40">n=40

35. <option value="50">n=50

36. <option value="100">n=100

37. </select>

38.

39. <input TYPE="submit" value="提交你的选择" name="submit">

40. </form>

41. </body>

42. sum.jsp：

43. <%@ page contentType="text/html;charset=GB2312" %>

44. <body bgcolor=cyan>

45. <% long sum=0;

46. String s1=request.getParameter("sum");

47. String s2=request.getParameter("n");

48. if(s1==null)

49. {s1="";}

50. if(s2==null)

51. {s2="0";}

52. if(s1.equals("1"))

53. {int n=Integer.parseInt(s2);

54. for(int i=1;i<=n;i++)

55. {sum=sum+i;

56. }

57. }

58. else if(s1.equals("2"))

59. {int n=Integer.parseInt(s2);

60. for(int i=1;i<=n;i++)

61. {sum=sum+i*i;

62. }

63. }

64. else if(s1.equals("3"))

65. {int n=Integer.parseInt(s2);

66. for(int i=1;i<=n;i++)

67. {sum=sum+i*i*i;

68. }

69. }

70. %>

71. 您的求和结果是<%=sum%>

72. </body>