JSP基础(三)JSP内置对象 利用application对象做一个简单的网页计数器

时间:2021-07-30 03:41:36

 

JSP基础(三)JSP内置对象

 

JSP内置对象

  JSP有以下九种内置对象,包括:

  request,请求对象

  response,响应对象

  pageContext,页面上下文对象

  session,会话对象

  application,应用程序对象

  out,输出对象

  config,配置对象

  page,页面对象

  exception,异常对象

 

  从本质上讲,JSP的这些内置对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成

 

JSP内置对象映射表

对象名

类型

作用域

request

javax.servlet.ServletRequest

Request

response

javax.servlet.ServletResponse

Page

pageContext

javax.servlet.jsp.PageContxt

Page

session

javax.servlet.http.HttpSession

Session

application

javax.servlet.ServletContext

Application

out

javax.servlet.jsp.JspWriter

Page

config

javax.servlet.ServletConfig

Page

page

java.lang.Object

Page

exception

java.lang.Throwable

Page

 

request对象

  request对象代表的是来自客户端的请求,例如在form表单中填写的信息等,是最常用的对象。

  关于它的方法使用较多的是getParametergetParameterNamesgetParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值。

 

  request的setAttributegetAttribute方法一般都是成对出现的,首先通过setAttribute方法设置属性与属性值,然后通过getAttribute方法根据属性获取到与该属性对应的对象值。

  setAttribute与getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。

 

  request的getParameter方法的作用是获取到客户端通过表单或url请求参数发送过来的参数值,是客户端与服务器端之间的交互,服务器端要想获取到客户端发送过来的数据,就需要使用getParameter方法来获取。

  没有与getParameter方法对应的setParameter方法。

 

  request对象内数据的存活范围就是在request对象的存活范围内,当客户端想服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了

  之后再向服务器端发送新的请求时,服务器会创建新的request对象,该request对象与之前的request对象没有任何关系,因此也无法获得在之前的request对象中所存放的任何数据。

 

response对象

  response对象代表的是对客户端的响应,也就是说可以通过response对象来组织发送到客户端的数据。

  但是由于组织方式比较底层,所以不建议一般人使用。

  需要向客户端发送文字时直接用out对象即可。

 

session对象

  session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。

 

  HTTP是无状态协议;

  Web Server对每一个客户端请求都没有历史记忆;

  session用来保存客户端状态信息。

 

  浏览器不关闭,session对象会一直存在(姑且这样认为),且session对象只有一个

  如果浏览器关闭重启,会创建新的session对象。

 

application对象

  application对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等。

  运用实例:网页访问计数器。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'Counter.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <%
        if(application.getAttribute("counter") == null)
        {
            application.setAttribute("counter", "1");
        }
        else
        {
            String strnum = null;
            strnum = application.getAttribute("counter").toString();
            int icount = 0;
            icount = Integer.valueOf(strnum).intValue();
            icount++;
            application.setAttribute("counter", Integer.toString(icount));
            
        }
            
    %>
    
        您是第<%=application.getAttribute("counter") %>位访问者!
        
  </body>
</html>

 

  运行结果就是访问到该页面之后显示你是第几位访客,刷新之后数目会增加,更换浏览器或者更换客户端地址都会使其访问值正常递增。

 

  application的存活范围比request和session都要大。

  只要服务器没有关闭,application对象中的数据就会一直存在在整个服务器的运行过程当中,application对象只有一个,它会被所有的用户共享

  其中getRealPath这个方法可以获取资源在服务器上的物理路径(绝对路径),常用来获取上传文件时要存储文件的路径。

 

out对象

  out对象代表了向客户端发送数据的对象,与response对象不同,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过out对象直接向客户端写一个由程序动态生成的HTML文件。

  常用的方法除了print和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为out对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。

 

参考资料

  圣思园张龙老师视频教程。