企业软件,WEB和对于他们无限美好的遐想(第六日)--2014-3-15--月日 + Struts 原理分析 (五)

14.JSP内置对象(或者称为内建对象或隐含对象):是不需要声明便可以直接在JSP中使用的JAVA对象。

      JSP内置对象有9个,他们是:Request、Response、Out、PageContext、Session、Application、Config、Page、Exception。

      14.1.Request :是javax.servlet.http.HttpServletRequest对象在jsp端的内置对象。该对象包含:1.所有的请求信息 ---->如请求来源、标题头(<head>)、cookies和请求相关的参数数值等,常用方法如下:

             14.1.1.Object getAttribute (String name) :返回由name指定的属性值,该属性不存在时返回null。

             14.1.2.void setAttribute (String name, Object value):在属性列表添加指定属性。(相关书记上说该属性还可以删除指定属性,这个需要证实一下)

             14.1.3.String getParameter (String name) : 获取客户端发送给服务器端的参数值。

             14.1.4.String[] getParameterValues (String name):获得请求中指定参数的所有值。

             14.1.5.String getProtocol () : 返回请求使用的协议,可以是HTTP1.1 或者 HTTP1.0.

             14.1.6.String RequestURI():返回发出请求的客户端地址(不包括请求的参数字符串)

             14.1.7.String getRemoteAddr():获取发出请求的客户端IP地址。

             14.1.8.HttpSession getSession():获取Session.

下面根据以上的常用方法给出一个具体的代码实例,详见下方:

<%@ 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 'welcome.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>
    欢迎:<%=request.getParameter("username") %><br>
  <p> 协议: <%= request.getProtocol() %> </p><br>
  <p> 地址: <%= request.getRequestURI() %> </p><br>
  <p> 本机地址: <%= request.getRemoteAddr() %> </p><br>
  </body>
</html>
发布之后的显示效果如下:




      14.2.Response,是HttpServletResponse对象在JSP中的内置对象的表现。该对象提供了用于设置送回浏览器的响应方法,比较常用的方法如下:

           14.2.1sendRedirect(URL) :重定向方法,将用户重定向到一个不同的URL上去。

                      该方法和jsp动作标签<forward>的区别如下:

                       a.标签重定向只是在JSP容器(本例为Tomcat)内进行的同一个WEB应用程序的重定向,重定向后浏览器的URL不会发生改变。方法的重定向是通过修改HTTP头来实现的,重定向后地址栏发生变化

                       b.标签的重定向在一个Request中完成,实现了一个Servlet实例到另外一个Servlet实例的转变,方法是在两个Request中进行的。

                       c.标签重定向会带着原来请求的参数,方法则不会。

           14.2.2setContenType(String type) :????响应设置内容类型头.....????(网上是这么说的,我还需要再看看,不明白呀)

           14.2.3addHeader(String name,String value) :为HTTP文件头添加一个String类型的值。


      14.3.Out对象:该对象作用是向客户端以输出流的方式输出数据,该对象为javax.jsp.JspWriter的一个实例。常用方法如下:

            14.3.1.out.print()  ---->输出各种类型的数据。

            14.3.2.out.newLine() ---->输出一个换行符。

            14.3.3.out.close() ---->关闭流。

下面给出out的用法说明的例子,详见代码:

<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%
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 'myoutjsp.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>
    <%
    Date Now = new Date();
    String hours = String.valueOf(Now.getHours());
    String mine = String.valueOf(Now.getMinutes());
    String secs = String.valueOf(Now.getSeconds());
     %>
     <p>现在小时:</p>
     <% out.println(String.valueOf(Now.getHours())); 
         out.println(hours);
     %>
     <br>
      <p>现在分钟:</p>
       <br>
      <% out.println(String.valueOf(Now.getMinutes())); 
      out.println(mine);
      %>
           <br>
      <p>现在秒:</p>
       <br>
       <% out.println(String.valueOf(Now.getSeconds()));
       out.println(secs);
        %>
  </body>
</html>
在页面上的效果如下:


      14.4.Application、pageContext:这里需要说的是一个关于内置对象范围的事情先看下边的图。


在JSP中,我们会遇到JSP范围这个概念(也就是JSP Scope),从大到小分别是

          1. Application:  --->对应的内置方法为Application --->相关方法都是 setAttribute() 和 getAttribute():生命周期是【服务器启发到服务器关闭】

          2. Session:  --->对应的内置方法为Session--->相关方法都是 setAttribute() 和 getAttribute():生命周期是【客户端与服务器的连接从开始到断开】

          3. Request:  --->对应的内置方法为Request--->相关方法都是 setAttribute() 和 getAttribute() :生命周期是【一个JSP页面发出请求到一个JSP页面】

          4. Page:   --->对应的内置方法为 pageContext--->相关方法都是 setAttribute() 和 getAttribute():生命周期是【JSP 页面内】

      14.5.Session:是javax.servlet.http.HttpSession对象在JSP中的内置对象的表示。该对象可以存储用户的状态信息。该对象在浏览器第一个JSP页面被装载时自动创建,用于完成会话期(也就是一个Session的生命周期)的管理。从浏览器连接到服务器开始,到浏览器关闭并断开与服务器的连接终止,这个生命周期被称为是一次会话。而Session最大的用处就是帮助浏览器知道是同一个用户在进行操作(还有cookie这个进行辅助,这个需要单独进行学习了),该对象的常用方法如下:

          14.5.1public String getId():获取Session对象编号。

          14.5.2public void setAttribute (String key , Object obj):将参数Object指定的对象obj添加到Session对象中,并为其添加一个对象指定的索引关键字。

          14.5.3public Object getAttribute (String key): 获取Session 对象中含有关键字的对象。

          14.5.4public Boolean isNew(): 判断是否为一个新的客户。

下面展示一个代码例子来说明用法(记录有多少新的Session连接到了某个网站上,记录历史累计的次数):

<%@ 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>This is my JSP 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>
  <%!
  int number = 0;
  synchronized void countPeople(){
  number++;
  }
   %>
   <%
   if(session.isNew())
   {
   countPeople();
   String countStr = String.valueOf(number);
   session.setAttribute("count",countStr);
   }
   
    %>
  
  
  <body>
     <br>
   <form method="post" action="welcome.jsp" name="loginFrom">
   <p> <input type="text" maxlength="25" size="20" name="username" value="用户名"></p>
   <p> <input type="text" maxlength="25" size="20" value="密码" name="password"></p>
   <p> <input type="Submit" value="提交" name="submit"></p>
   </form></body>
   
   <p>第<%=(String)session.getAttribute("count")%>个访问本网站的人</p>
</html>

显示效果如下:




      14.6.Page对象:某个JSP页面转化成为Servlet都会在JSP页面提供Page对象,该对象是Servlet类的this,可以用Page对象访问该Servlet实例的属性和函数。

      14.7.Config对象: 该对象表示的是javax.servlet.ServletConfig对象,也就是javax.servlet.ServletConfig对象在JSP页面上的体现,可以通过该对象存取Servlet实例的初始化参数,其中,返回某参数的初始化值用的比较多--->String getInitParameter(String name),另外返回某JSP页面上全部初始参数的名称集合的方法用的也很多--->Enumeration getInitParameters(),当我们想要返回Servlet名称时可以执行String getServletName()方法,如果想要返回执行者的Servlet上下文,可以执行ServletContext getContext()方法。

      14.8.Exception对象---异常处理对象:前提JSP页面包含<%@ page isErrorPage = "true" %> ,用来处理JSP文件执行时发生的错误和异常。语法为:<%=exception.getMessage() %>,该方法的常用方法为String getMessage() 和 异常堆栈信息void printStackTrace()。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值