JSP的application对象,请求转发和重定向的区别

来源:互联网 发布:定额编号软件 编辑:程序博客网 时间:2024/06/16 09:07
Application对象  SevrletContext接口实现的对象


</head>    
  <body>
 <!-- 这是一个网页计数器的程序,用application对象进行数据的存储和提取,实践证明,application的对象在服务器运行期间一直存活,其生命周期相比request对象和session对象都要大,并且在整个服务器运行期间,其对象也只有1个 -->
   
   <%
    if(application.getAttribute("count")!=null)
    {
     int intcount = (Integer)application.getAttribute("count");            //将取出的object类型转换成int  自动拆装箱!
     //int countnum = Integer.valueOf(intcount);
     intcount++;                                                            
     
     application.setAttribute("count", intcount);   //直接将Integer类型对象装入application对象中
     
    }
    else
    {
     application.setAttribute("count", 1);          //如果为空,你就是第一位访问者
    }
     
         
   %>
    <h1 >您是第<%= (String )application.getAttribute("count") %>位访问者!</h1>
  </body>
 
</html>


JSP只所以有内置对象,是因为服务器在将JSP文件转换成servlet文件时帮我们定义了!

================================================================

servlet的请求转发方法:  RequestDispatcher rd = request.getRequestDispatcher("请求转发到的组件页面");  rd.forward(req,resp);     
重定向方法 :   response.sendRedirect("重定向的组件页面");
也就是说: servelet可以用来完成用户请求和信息数据的一个调用,将信息和数据取出,处理,封装在某些对象内部 ( session,application,request,的setAttribute(),或hidden隐藏域等),交给其他组件(如JSP)处理进行页面层面的处理和对用户的响应,在业务逻辑上,并步是用来显示
HTML页面的,这就形成了一种流程,servlet完成数据层面的东西,处理好之后,交给其他组件处理与用户的交互。

==============================================================================

通过hidden隐藏域方式可以存放上一个request中的数据,可以用来提交给下一个页面,由下一个请求的getParameter方法取出,完成session的功能,这种方法是非常常用的,在开发中要比session常用因为session会使用服务器的资源
=====================================================================================================================================

第一个页面


 </head>
 
  <body>
 <form action="hidden1.jsp">
  <input type = "text" name = "username"><br/>
  <input type = "submit"  value = "submit" >
 </form>
  </body>
</html>

第二个页面: 

  </head>
  <%!String username = "";%>
  <body>
 <% username = request.getParameter("username");%>
   username: <%=username%>          

 <form action="hidden2.jsp">
 你喜欢的运动是:<br/>
 <input type = "text" name = "interst">
 <input type = "submit" value = "submit">
 <input type = "hidden" name = "hidden" value = <%=username%> >      
   <!-- 这一步非常重要,这表明JSP的HTML代码中是可以赋值的,而,这种隐藏方式是通过赋值给隐藏的hidden来存放上一个请求的数据再到下一个页面通过getParameter方法取出! -->
 </form>

第三个页面
 </head>
 
  <body>
 <% String username = request.getParameter("hidden");
  String interst = request.getParameter("interst");
  out.print("username :"+ username + "<br/>" +"intester : "+ interst);
 
 
 %>
  </body>


application对象的方法 : getRealPath("String path")  可以取得此资源在服务器上的绝对物理地址

请求转发 与 重定向的区别:

请求转发其实处于一个请求内,而重定向是告诉浏览器客户端去重新访问另外一个资源,其实是2个请求,而且请求转发方法 getRequestDispatcher()是基于请求对象的方法
而重定向方法sendRedirect("String path") 是响应对象response的方法,当开始调用响应对象的方法的时候,服务器就已经开始向客户端返回结果,这次请求-响应已经结束,
所以,在重定向方式中,是无法取得存放在上一个请求对象内的数据的,而请求转发可以。







0 0
原创粉丝点击