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的方法,当开始调用响应对象的方法的时候,服务器就已经开始向客户端返回结果,这次请求-响应已经结束,
所以,在重定向方式中,是无法取得存放在上一个请求对象内的数据的,而请求转发可以。