页面之间传值问题

页面间传递数据: 客户端向服务器:
post方式(form,隐藏域)和get方式(URL,aa.jsp?param1=abc);

服务器端:
request,session,cookie,application

URL和aa.jsp?paraml=abc是一回事,后者是前者的一个例子.同样的隐藏字段也是指包含在form中的隐藏字段
还有:可以用javabean一次性把前个界面的值自动赋到另一个界面
==============================================================================
一. 客户端向服务器
    1--get方式
       <a href="xx.jsp?id=<%=id%>"></a>
       <a href="xx.jsp?id=2"></a>
       <script language='javascript'>alert("很牛!");window.location.href="index.jsp?dr="+a+"&drr"+c;</script>
       <script language='javascript'>alert("很牛!"); window.location.href="../index.jsp?dr="+a+"&drr"+c;</script>  
       
       function sefmessage(agentName)
       {
           alert(agentName);document.all.iframe.src="agentMessage.do?agentName="+agentName;
       }

      
       
    2--post方式
       <form action="xx.jsp?act=3" method="post" enctype="multipart/form-data" name="upfile" id="upfile">-->传了值
       <input type="hidden" name="id" value="<%=id%>">-->隐藏传值
       <input type="text" name="root">-->显示传值


二. 服务器端     
       response.setHeader("refresh","5","xx.jsp");
       response.sendRedirect("xx.jsp?="+id); --->跳转之后 地址栏变为……/xx.jsp 【客户端跳转】


       <jsp:forward page="xx.jsp">-->能否xx.jsp?id=2有待实践-->跳转以后地址栏不变【服务器端跳转】
          <jsp:param name="g" value="<%=name%>"/>-->传值
       </jsp:forward>

       <jsp:include flush="true" page="xx.jsp">
          <jsp:param name="t"value="<%=request.getParameter("id")>">
       </jsp>

     
       session.setAttrubute("name",name)
       -->是在多个页面之中有效,而不是只在两个页面中有效,直到关闭浏览器才失效
       -->浏览器a上的session,然后再启动另外一个浏览器(页面),session仍然存在,只不过session.getID()得不到,但是它确实存在
       -->session销毁的三个条件 1.服务器停 2.设置的时间到 3.手动关闭.

    
       cookie
       application
       还没用到

三. javaBean
       <jsp:useBean id="testBean" class="swing.useBean" scope="session"/>
        <jsp:setProperty name="testBean" property="*"/>
       </jsp:useBean>
        bookName:<%=testBean.getBookName()%>
        bookCompany:<%=testBean.getBookCompany()%>
     --> 通过表单提交过来的值,经过Bean自动的将字符串处理为相应的数据类型,然后自动的与javaBean中的属性
         相同的名称进行匹配,感觉此处很智能,程序自己在做事



四. 使用response.sendRedirect的注意事项
首先我们要明白用response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。
用<jsp:forward page=""/>则不同,它是直接在server做的,浏览器并不知道,也不和浏览器打交道,这从浏览器的地址并不变化可以看出。
所以使用response.sendRedirect时就需要注意以下两点:
1,在使用response.sendRedirect时,前面不能有HTML输出。
这 并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说JSP  SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的 HTML输出也是允许的。
如果报错说,“一些信息已经被submitted”(原文忘了),那么,你就要注意看了,前面是不是有过多的HTML输出了。

2,在response.sendRedirect之后,应该紧跟一句return;
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

发布了44 篇原创文章 · 获赞 5 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章