第一个jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP starting page</title>
</head>
<body>
这是一个表单
<form action="/news/test/test2.jsp?temp=temp" method="get">
姓名:<input type="text" name="test">
<input type="submit" value="提交">
</form>
</body>
</html>
在表单中填入999后进行提交
第二个jsp(是第一个页面的表单提交的路径)
如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
out.print("request的temp结果是"+request.getParameter("temp"));
%>
测试结果:页面上会显示:
request的temp结果是null
若将第一个jsp的提交方式改成post,则显示结果是
request的temp结果是temp
若不展示输出流,换成转发到下一个页面,如下
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
request.getRequestDispatcher("/test/test3.jsp").forward(request, response);
//out.print("request的temp结果是"+request.getParameter("temp"));
%>
则本页没有任何展示
第三个jsp(是第二个jsp转发的目的地)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP starting page</title>
</head>
<body>
request的test结果是<%=request.getParameter("test") %>
request的temp结果是<%=request.getParameter("temp") %>
</body>
</html>
最后执行后的结果是
当表单方式为get时
request的test结果是999 request的temp结果是null//(999是在第一个jsp输入的内容)
当表单方式为pos时:
request的test结果是999 request的temp结果是temp
所以,结论:
测试
- 结论1:post的input值属性会被转发携带走,可以一直用request.getParameter获取
- 结论2:post的表单的?可以携带一次到下一个界面,并且可以一直用request.getParameter获取
- 结论3:get的input值属性会被转发携带走,可以一直用request.getParameter获取(和post一样)
- 结论4:get的表单的?会被 丢失 就无法访问到?后面携带的参数和值,只能得到null
总结:表单的input值会"永久"存放在request对象里面,而表单action里面的?所直接携带的值,如果是post,可以一直存放,如果是get则被丢失
补充 至于重定向…会直接丢失request对象里所有的数据,就不用看了
补充:之前的测试做得不严谨结论也不是很正确,抱歉了,现在已经改成正确结论了