JSP内置对象及作用域

2 篇文章 0 订阅
2 篇文章 0 订阅

JSP内置对象的含义是可以直接在JSP页面中使用的对象,使用前不需要声明他们

九大内置对象:

  • 输入输出对象:request、response、out
  • 作用域通信对象:session、application、pageCon text
  • Servlet对象:page、config
  • 异常对象:exception

JSP的四大作用域:

page、request、session、application这四大作用域,其实就是其九大内置对象中的四个,为什么说他们也是JSP的四大作用域呢?因为这四个对象都能存储数据,比如request.setAttribute()注意和request.setParameter()区分开来,一个是存储在域中的、一个是请求参数,session.setAttribute()、application其实就是SerlvetContext,自然也有setAttribute()方法。而page作用域的操作就需要依靠pageContext对象来进行了。在上面我们也有提到JSP的四大作用域,

  • page作用域:代表变量只能在当前页面上生效

  • request:代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B

  • session:代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。

  • application:代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。

request对象

用户每访问一个页面,就会产生一个HTTP请求,这些请求中包含了请求所需的参数或者信息,可将request对象看做是客户端请求的一个实例,可以通过request来获取客户端和服务端的信息

在这里插入图片描述

方法方法说明
getHeader(String name)获取HTTP头文件中的指定值,例如accept、user-agent、content-type、content-length等
getHeaderNames()返回枚举类型,从而确定Header中包含哪些值

使用request对象接收请求参数

获取请求参数的方法有两种,分别是getParameter()、getParameterValues()

get方法提交参数、获取参数的例子:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>'getParameter.jsp'</title>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  </head>
  
  <body >
      <center>
	       <%
	          String name= new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");
	          String city= new String(request.getParameter("city").getBytes("ISO-8859-1"),"utf-8");
	          if(name!=null&&city!=null)
	          {
	        %>
	          <p>Welcome <%=name %>,您所在的城市是<%=city %></p>
	         <%
	           }else{
	          %>
	          <p>欢迎访问本页面!</p>
	          <%
	            }
	           %>
      </center>
  </body>
</html>

post方法提交、获取参数的例子:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>'ex3_1.jsp'</title>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  </head>
  <body >
      <center>
	      <form action="getParameter.jsp" method="post">
	          <table>
	                 <tr>
	                <td>姓名</td>
	               <td><input type="text" name="name" value=""/></td>
	                 </tr>
	                 <tr>
	                 <td>城市</td>
	                 <td><input type="text" name="city" value=""/></td>
	                 </tr>
	                 <tr>
	                     <td><input type="submit" value="提交"/></td>
	                     <td><input type="reset" value="重置"/></td>
	                 </tr>
	          </table>
	      </form>
      </center>
  </body>
</html>

getParameter.jsp文件和前面一样

请求中文乱码处理的三种方法

  1. 在接收请求的页面中规定字符编码:request.seCharacterEncoding(“utf-8”)
  2. 取得参数值后,通过转码的方式转为合适的字符集,例如:String name=new String(request.getParameter(“name”).getBytes("ISO-8859-1"),"utf-8")
  3. 上述两种方法移植性较差,通过编写一个Servlet过滤器来解决中文乱码问题(后续介绍)

获取头部信息

  • String getHeader(String name) 获取字符串的表头信息
  • int getHeader(String name) 获得整型的表头信息
    示例:
    <%
	 Enumeration<String> enumeration = request.getHeaderNames();
	 while(enumeration.hasMoreElements()){
	       	      String name = enumeration.nextElement();
	       	      String value = request.getHeader(name);
	       	      if(value==null||"".equals(value)){
	       	      	  value="空字符串";
	       	      }
	 %>
	 <p>表头名称:<%=name %>&nbsp;&nbsp;对应的值:<%=value %></p>
	 <%} %>

获取主机和客户机信息

  • getRemoteAddr()获取客户机的IP
  • getRemoteHost()获取客户主机的名称
  • getLocalAddr()获取本地主机的IP
  • getLocalName() 获取本地主机名称
  • getLocalHost()获取本地主机名称
  • (错,无此属性)getServerAddr()
  • getServerName() 获取服务器名称
  • getServerPort() 获取服务器端口

response对象

服务器对请求做出响应时调用的是response,response响应包实现的是javax.servlet.HttpServletResponse

response常用方法

方法说明
setHeader(String name,String value)设置头信息
addCookie(Cookie args)添加Cookie信息
sendRedirect(String uri)实现页面重定向
setStatus(int arg))设定页面的响应状态码
setContentType( String arg)设定页面MIME类型和字符集
setCharacterEncoding(arg)设定页面响应的编码类型

设置头信息

设置头信息包括设置页面返回的MIME类型、返回的字符集、页面中的meta等信息

有两种方法用于设置MIME类型和返回的字符集:

  • response.setContentType(String type):其中type的值为“text/html;charset=utf-8”,或其他MIME类型和字符集(不影响其HTML代码中的中文)
  • page指令:基本的固定格式为:<%@page contentType=“text/html;charset=urf-8” language="java">

设置meta信息是指在HTML页面中存在于之间的信息

<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">

设置meta信息的源代码示例:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'setMeta.jsp' starting page</title>
  </head>
  <body>
     <center class="aa">
        <p class="bb">
                             现在的时间为:<br/>
           <%
               out.print(""+ new Date());
               response.setHeader("refresh","1");
               response.setHeader("description","实时的显示当前时间");
               response.setHeader("keywords","实时,显示,显示当前时间");
               response.setHeader("cache-control","no-cache");
            %>
          <br/><br/>
          copyright:2013
     </center>
  </body>
</html>

结果:显示当前时间,每1s刷新一次

设置页面重定向

response.sendRedirection(String url)

session对象

session对象用来判断是否为同一用户,还可以记录客户的连接信息等
session(会话):浏览器访问web服务器时,服务器会为每一个浏览器在服务器端的内存中分配空间,单独创建一个Session对象,该对象有一个ID属性,其值唯一,一般称之为SessionId,并且服务器会将这个SessionId(使用Cookie的方式)发送给浏览器,浏览器再次访问服务器时,会将SessionId发送给服务器,服务器可以依据SessionId找到对应的Session对象。
session对象的生命周期:当用户访问某个页面到关闭浏览器,这段时间称之为sesssion对象的生命周期
session与Cookie的关系:session对象和Cookie对象是一一对应的关系,JSP引擎会将创建好的sessionId存到Cookie中

session常用方法

方法说明
public Object getAttribute(String name)返回session对象中与指定名称绑定的对象,如果不存在则返回null
public Enumeration getAttributeNames()返回session对象中所有的对象名称
public long getCreationTime()返回session对象被创建的时间, 以毫秒为单位,从1970年1月1号凌晨开始算起
public String getId()返回session对象的ID
public long getLastAccessedTime()返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起
public int getMaxInactiveInterval()返回最大时间间隔,以秒为单位,servlet 容器将会在这段时间内保持会话打开,即获取session的有效时间
public void invalidate()将session无效化,解绑任何与该session绑定的对象
public boolean isNew()返回是否为一个新的客户端,或者客户端是否拒绝加入session
public void removeAttribute(String name)移除session中指定名称的对象
public void setAttribute(String name, Object value)使用指定的名称和值来产生一个对象并绑定到session中
public void setMaxInactiveInterval(int interval)用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效
获取sessionID值的核心代码
 <%
    String sessionID = session.getId();
    String name = (String)session.getAttribute("name");//强制转为String类型
    long time = session.getCreationTime();
    Date date = new Date(time);
 %>
 <center>
   <p>您访问的是ex3_3.jsp页面</br>
   	    <%=name %>,您的session对象ID为:</br>
   		<%=sessionID%></br>
   		session对象创建时间:<%=date %></br>
   	</p>
   	<a href="ex3_2.jsp"><%=name %>,欢迎到ex3_2.jsp页面</a></br>
   	<a href="../ch03_2/ex3_4.jsp"><%=name %>,欢迎到ex3_4.jsp页面</a>
   </center>
   
   注意:一个Web应用的session对象的ID值是唯一的,两个应用之间的参数利用session对象无发获到

application对象

什么是application

  1. 当Web服务器启动时,Web服务器会自动创建一个application对象。application对象一旦创建,它将一直存在,直到Web服务器关闭。
    一个Web服务器通常有多个Web服务目录 (网站),当Web服务器启动时,它自动为每个Web服务目录都创建一个application对象,这些application对象各自独立,而且和Web服务目录一一对应。
    访问同一个网站的客户都共享一个application对象,因此,application对象可以实现多客户间的数据共享。访问不同网站的客户,对应的application对象不同。

  2. application对象的生命周期:从Web服务器启动,直到Web服务器关闭。
    注意:一个Web应用程序启动后,将会自动创建一个application对象,而且在整个应用程序的运行过程中只有一个application对象,也即所有访问该网站的客户都共享一个application对象。

  3. application对象的作用范围:application对象是一个应用程序级的对象,它作用于当前Web应用程序,也即作用于当前网站,所有访问当前网站的客户都共享一个application对象。

  4. application对象的基类是:javax.servlet.ServletContext类。
    注意:有些Web服务器不直接支持使用application对象,必须用ServletContext类来声明application对象,再调用getServletContext()方法来获取当前页面的application对象。

  5. ServletContext类:用于表示应用程序的上下文。
    具体来说:在Web服务器中,提供了一个Web应用程序的运行时环境,专门负责Web应用程序的部署、编译、运行以及生命周期的管理,通过ServletContext类,可以获取Web应用程序的运行时环境信息。

session与application的区别

  1. 两者的作用范围不同:session对象是用户级的对象,而application对象是应用程序级的对象。
  2. 两者的生命周期不同:session对象的生命周期:用户首次访问网站创建,用户离开该网站 (不一定要关闭浏览器) 消亡。application对象的生命周期:启动Web服务器创建,关闭Web服务器销毁。

application对象的常用方法

方法方法说明
String getAttribute(String name)获取存放在application中的含有关键字name的对象
void setAttribute(String name, Object obj)将关键字name的指定对象obj放进application对象中
Ennumeration getAttributeNames()获取application中所有参数的名字,返回值是枚举类型
void removeAttribute(String name)移除application对象中name指定的参数值
String getServletInfo()获取Servlet的当前版本信息
ServletContext getContext(String url)获取url指定路径的ServletContext对象
String getRealPath(String name)获取指定文件的实际路径
String getMimeType(String name)获取指定的文件格式
String getContextPath()当前Web程序的根目录

out对象

out对象是继承javax.servlet.jsp.JspWriter类的一个输出对象
常用方法:

方法方法说明
append(char c)将字符添加到输出流中
clear()清空页面缓存中的内容
close()关闭网页流的输出
flush()网页流的刷新
println()将内容打印在HTML标记中
write()与println()相似,区别是println()可以输出各种类型的数据,而write方法只能输出与字符相关的数据,例如:字符、字符数组、字符串等

在这里插入图片描述在这里插入图片描述

page对象

page代表转译后的Servlet,就好比普通类的this

常用方法:

方法方法说明
getClass()返回当时被转译的Servlet类
hashCode()返回此时被编译的Servlet类的哈希代码
toString()将此时被转译的Servlet类转译成字符串

config对象

config对象实现了java.servlet.ServletConfig()接口,它一般用于在页面初始化时传递参数

方法说明
ServletContext getServletContext()返回所执行的 Servlet 的环境对象
String getServletName()返回所执行的 Servlet 的名字
String getInitParameter(String name)返回指定名字的初始参数值
Enumeration getlnitParameterNames()返回该 JSP 中所有初始参数名,一个枚举

WEB-INF文件下的web.xml文件的jsp/Servlet部分配置:

<servlet>
      <servlet-name>
           jspconfigdemo
       </servlet-name>
       <jsp-file>/config.jsp</jsp-file> <!-- 这里是JSP文件或者Servlet类 -->
       <init-param>
           <param-name>url</param-name>
           <param-value>http://www.baidu.com</param-value>
       </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>
      	    jspconfigdemo
      </servlet-name>
      <url-pattern>/config.jsp</url-pattern>
  </servlet-mapping>

pageContext

它是JSP页面的管理者(上下文),所以JSP中的内置对象呀,它统统能够获得,下面介绍它的api。

  1. 获得其它八大内置对象 getXxx()
pageContext.getOut();  //获得out对象
pageContext.getApplication();  //获得application对象
.......
  1. 对作用域的属性进行操作(四大作用域)
    对默认作用域的属性进行操作。page
pageContext.getOut();  //获得out对象
pageContext.getApplication();  //获得application对象
pageContext.removeAttribute(name);  //给page作用域移除内容
  1. 对指定作用域的属性进行操作
getAttribute(name,scope);  //获得 指定作用域中的数据
setAttribute(name,value);  //给指定作用域设置内容
removeAttribute(name ,scope)  移除指定作用域的内容(page/request/session/application)

例如:pageContext.removeAttribute("attrName", PAGE_SCOPE);
  1. 作用域常量
PageContext.PAGE_SCOPE  page
PageContext.REQUEST_SCOPE  request      
PageContext.SESSION_SCOPE  response
PageContext.APPLICATION_SCOPE  application
  1. 一次获得指定名称内容
findAttribute(name);  //依次从page、request、session、application 获得内容

exception对象

包含了异常的信息,使用它,必须结合page指令中的isErrorPage属性和errorPage属性

exception.jsp抛异常的一个NullPointException,并且跳转到error.jsp错误显示页面, errorPage属性的意思是如果发生未捕捉到的异常,将会跳转到error.jsp页面
在这里插入图片描述
error.jsp页面中isErrorPage属性说明该页面是一个错误显示页面,则可以使用exception对象

[外链图片转存失败(img-k2btG6fX-1566383328340)(evernotecid://F7BFB2B3-E456-45CB-B539-C406FEA483E3/appyinxiangcom/23917643/ENNote/p14?hash=d978efa0ea815e0c247a59cbce323451)]

访问http://localhost:8080/test01/exception.jsp

[外链图片转存失败(img-RBybxo07-1566383328342)(evernotecid://F7BFB2B3-E456-45CB-B539-C406FEA483E3/appyinxiangcom/23917643/ENNote/p14?hash=e43823c688fab400e62f6919774533fc)]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值