4.6 URL传值
HTTP是无状态的协议。Web页面本身无法向下一个页面传递信息,如果需要让下一个页面得知该页面中的值,除非通过服务器。Web页面之间传递数据,是Web程序的重要功能,其流程如图4-14所示
图4-14 页面之间传递变量的方法 |
其过程如下:
1. 页面1中输入数据"guokehua",提交给服务器端的P2;
2. P2获取数据,响应给客户端。
问题的关键在于页面1中的数据如何提交,页面2中的数据如何获得。
举一个简单的案例:页面1中定义了一个数值变量,并显示其平方;要求点击链接,在页面2中显示其立方。很明显,页面2必须知道页面1中定义的那个变量。这里就可以用URL传值。
URL,通俗地说,就是网址。如:http://localhost:8080/Prj04/page.jsp,表示访问项目Prj04中的page.jsp,但是还可以在该页面后面给出一些参数,格式是,在原url后面添加:
- ?参数名1=参数值1&参数名2=参数值2&……
如:
- http://localhost:8080/Prj04/page.jsp?m=3&n=5
表示访问http://localhost:8080/Prj04/page.jsp,并给其传送参数m,值为3,参数n,值为5。
在http://localhost:8080/Prj04/page.jsp中获得m和n的方法是:
- <%
- //获得参数m,赋值给str
- String str = request.getParameter("m");
- %>
如果m没有传过来或者参数名写错,str为null。
提示
和out一样,request也是JSP九大对象之一,其作用是获取请求的信息。关于其详细内容,在后面的章节中将有讲述。
如上例子,可以写成:
urlP1.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
- <%
- //定义一个变量:
- String str = "12";
- int number = Integer.parseInt(str);
- %>
- 该数字的平方为:<%=number*number %><HR>
- <a href="urlP2.jsp?number=<%=number %>">到达p2</a>
运行,效果如图4-15所示:
图4-15 运行效果 |
- http://localhost:8080/Prj04/urlP2.jsp?number=12
相当于提交到服务器的urlP2.jsp,并给其一个参数number,值为12。urlP2代码为:
urlP2.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
- <%
- //获得number
- String str = request.getParameter("number");
- int number = Integer.parseInt(str);
- %>
- 该数字的立方为:<%=number*number*number %><HR>
点击urlP1.jsp中的链接,到达urlP2.jsp,效果如图4-16所示:
图4-16 显示效果 |
这说明,可以顺利实现值的传递。
但是该方法有如下问题:
1. 传输的数据只能是字符串,对数据类型具有一定限制。
2. 传输数据的值会在浏览器地址栏里面被看到。如上例子,当点击了链接到达urlP2.jsp,浏览器地址栏上的地址变为:
number的值可以被人看到。从保密的角度讲,这是不安全的。特别是秘密性要求很严格的数据(如密码),不应该用URL方法来传值。
但是,URL方法并不是一无是处,由于其简单性和平台支持的多样性(没有浏览器不支持URL),很多程序还是用URL传值比较方便。如下界面: