您的位置:首页 > Web前端 > JavaScript

jsp隐式对象

2017-02-09 12:07 351 查看
JSP隐含对象是Java对象的JSP容器使提供给开发者在每一个页面中,开发者可以直接调用它们没有被显式声明。 JSP隐含对象也被称为预定义变量。

JSP的支持下面列出了9个隐式对象:

对象描述
requestThis is the HttpServletRequest object associated with the request.
responseThis is the HttpServletResponse object associated with the response to the client.
outThis is the PrintWriter object used to send output to the client.
sessionThis is the HttpSession object associated with the request.
applicationThis is the ServletContext object associated with application context.
configThis is the ServletConfig object associated with the page.
pageContextThis encapsulates use of server-specific features like higher performance JspWriters.
pageThis is simply a synonym for this, and is used to call the methods defined by the translated servlet class.
ExceptionThe Exception object allows the exception data to be accessed by designated JSP.


request 对象:

request 对象是javax.servlet.http.HttpServletRequest对象的一个实例。每次客户端请求一个页面的JSP引擎创建一个新的对象来表示该请求。

request 对象提供的方法来获得,包括表单数据的HTTP头信息,饼干,HTTP方法等。

我们将看到一整套与请求对象在未来的章节相关的方法: JSP客户端请求.


response 对象:

response 对象是一个javax.servlet.http.HttpServletResponse对象的一个实例。正如服务器创建的请求对象,它还会创建一个对象来表示响应给客户端。

response 对象还定义了处理创造新的HTTP标头的接口。通过这个对象的JSP程序员可以添加新的Cookie或日期标记,HTTP状态代码等。

我们将看到一整套与响应对象在未来章节相关的方法: JSP服务器响应.


out 对象:

out 隐含的对象是javax.servlet.jsp.JspWriter对象的一个实例,用于在发送一个响应内容。

最初的JspWriter对象实例化不同,具体取决于该页面是否被缓冲与否。缓冲可以通过使用page指令buffered='false'属性很容易被关闭。 

JspWriter对象包含大部分相同的方法作为java.io.PrintWriter中的类。然而,JspWriter有专门用来对付缓冲一些额外的方法。不同的是PrintWriter对象,JspWriter抛出IOExceptions。

以下是我们将用它来写布尔字符,整数,双精度的对象,字符串等的重要方法

方法描述
out.print(dataType dt)Print a data type value
out.println(dataType dt)Print a data type value then terminate the line with new line character.
out.flush()Flush the stream.


session 对象:

session对象是javax.servlet.http.HttpSession的实例和行为完全同样的方式,会话对象的行为下的Java servlet。

session 会话对象用于跟踪客户端请求之间的客户端会话。我们将看到在未来的章节会话对象的完整的用法:JSP会话跟踪.


application 对象:

应用对象是围绕着ServletContext对象直接包装器生成的Servlet和现实中的javax.servlet.ServletContext对象的实例。

这个对象是JSP页面在其整个生命周期中的表示。当JSP页面初始化时创建此对象,当JSP页面将被jspDestroy()方法删除。

通过增加一个属性的应用程序,您可以确保所有的JSP文件,使您的Web应用程序可以访问它。

您可以查看一个简单的用一章Application对象: JSP 点击记数器


config 对象:

config 对象是javax.servlet.ServletConfig的实例化,并为周围的ServletConfig对象的直接包装器生成的servlet。

这个对象允许JSP程序员访问Servlet或者JSP引擎的初始化参数,如路径或文件位置等等。

下面的配置方法是你可能永远使用唯一的一个,它的用法很简单:
config.getServletName();


这将返回servlet的名称,它是包含在WEB-INF web.xml文件中<servlet-name>元素定义了字符串。


pageContext 对象:

1ee57

pageContext对象是javax.servlet.jsp. PageContext 对象的一个实例。pageContext对象被用来代表整个JSP页面。

这个对象的目的是作为访问有关的页面信息,同时避免大部分的实现细节的手段。

此对象存储引用的请求和响应对象为每个请求。该应用程序,配置,会话和输出对象是通过访问这个对象的属性派生的。

pageContext对象还包含有关发行JSP页面的指示,包括缓冲资料,errorPageURL和页面范围的信息。

PageContext类定义了几个领域,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE和APPLICATION_SCOPE,其中确定的四个领域。它还支持超过40种方法,其中大约一半是从javax.servlet.jsp继承JspContext类。

其中一个重要的方法就是removeAttribute,它接受一个或两个参数。例如,pageContext.removeAttribute(“attrName”)将删除所有作用域的属性,而下面的代码只从页面范围中删除:
pageContext.removeAttribute("attrName", PAGE_SCOPE);


您可以查看pageContext中的一个很好的使用在未来的章节: JSP文件上传.


page 对象:

这个对象是一个实际的参考页的实例。它可以被看作是一个对象,它代表了整个JSP页面。

页面对象确实是一个直接的代名词了这个对象。


exception 对象:

异常对象是包含异常从以前的页面抛出一个包装。它通常被用来产生到错误条件的适当响应。

我们将看到在未来的章节此对象的完整的用法:JSP异常处理.

JSP九大隐式对象:在翻译过来的Servlet中Service方法自动帮我们前置定义的九个对象,可以在jsp页面中直接使用
page(代指该jsp翻译过去的那个servlet)
confing(ServletConfig)
application(ServletContext 表示本web应用)
response
request
session
out(response.getWriter 但是有缓冲区  )
exception
pageContext  (其他八大隐式对象的入口 )

out

  相当于是response.getWriter得到PrintWriter 

   out和response.getWriter获取到的流不同在于,在于这个out对象本身就具有一个缓冲区.利用out写出的内容,会先缓冲在out缓冲区中,直到out缓冲区满了或者整个页面结束时out缓冲区中的内容才会被写出到response缓冲区中,最终可以带到浏览器页面进行展示 

   page指令中的 

    [buffer=”none | 8kb | sizekb” ]可以用来禁用out缓冲区或设置out缓冲区的大小,默认8kb 

   [ autoFlush=”true | false”]用来设置当out缓冲区满了以后如果在写入数据时out如何处理,如果是true,则先将满了的数据写到response中后再接受新数据,如果是false,则满了再写入数据直接抛异常
  在jsp页面中需要进行数据输出时,不要自己获取response.getWriter,而是要使用out进行输出,防止即用out又用response.getWriter而导致输出顺序错乱的问题

pageContext

(1)可以作为入口对象获取其他八大隐式对象的引用
getException方法返回exception隐式对象
getPage方法返回page隐式对象
getRequest方法返回request隐式对象
getResponse方法返回response隐式对象
getServletConfig方法返回config隐式对象
getServletContext方法返回application隐式对象
getSession方法返回session隐式对象
getOut方法返回out隐式对象


(2)域对象,四大作用域的入口,可以操作四大作用域中的域属性

作用范围: 当前jsp页面 

生命周期: 当对jsp页面的访问开始时,创建代表当前jsp的PageContext,当对当前jsp页面访问结束时销毁代表当前jsp的pageContext 

作用:在当前jsp中共享数据
public void setAttribute(java.lang.String name,java.lang.Object value)
public java.lang.Object getAttribute(java.lang.String name)
public void removeAttribute(java.lang.String name)

public void setAttribute(java.lang.String name, java.lang.Object value,int scope)
public java.lang.Object getAttribute(java.lang.String name,int scope)
public void removeAttribute(java.lang.String name,int scope)

PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
  findAttribute方法 – 搜寻四大作用域中的属性,如果找到则返回该值,如果四大作用域中都找不到则返回一个null,搜寻的顺序是从最小的域开始向最大的域开始寻找
(3)提供了请求转发和请求包含的快捷方法 

pageContext.include(“/index.jsp”); 

pageContext.forward(“/index.jsp”); 

3.零散知识 

(1)jsp映射 

< servlet> 

 < servlet-name>index 

 < jsp-file>/index.jsp 

< /servlet> 

< servlet-mapping> 

 < servlet-name>index 

 < url-pattern>/jsp/* 

< /servlet-mapping>
(2)JSP最佳实践
(3)域的总结 

servletContext (application) 

session (session) 

request (request) 

pageContext
如果一个数据只在当前jsp页面使用,可以使用pageContext域存储 

如果一个数据,除了在当前Servlet中使用,还要在请求转发时带到其他Servlet处理或jsp中显示,这个时候用request域 

如果一个数据,除了现在我自己要用,过一会我自己还要用,存在session域 

如果一个数据,除了现在我自己要用过一会其他人也要用,存在ServletContext域中

什么是隐式对象?

JSP的隐式对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。

 

1、application:

1.1 application对象有效的范围是从web应用程序服务器一开始执行,到web服务器结束服务为止。

1.2 对于一个网站中所有的JSP页面,application对象只有一个。它们操作的是同一个application对象。

1.3 application是一个全局变量,所有访问同一服务器的客户都可访问application对象。

使用下面一个小例子来证明,在开启了服务器后,在不同的浏览器中访问,可以看到计数器是不断上升的,而不会从1开始。

Java代码  


       <%  

int count = 0;  

if(application.getAttribute("count") == null){  

    count = 1;  

    application.setAttribute("count", count);  

}else{  

    //值得注意的是,如果存进去的是int值,那么返回的也将是int值,而不是String类型的值  

    count = (Integer)(application.getAttribute("count"));  

    count ++;  

    application.setAttribute("count", count);  

}  

  

out.print("你是第"+count+"位访客...");  

%>  

 

1.4 获取服务器系统相关信息

application对象负责提供应用程序在服务器中运行时的一些全局信息,因此我们可以利用application来获取一些系统相关信息。

Java代码  


<%  

    out.print("服务器信息: " + application.getServerInfo()+"<br/>");  

    out.print("Java Servlet API 主版本号: "  

            + application.getMajorVersion()+"<br/>");  

    out.print("Java Servlet API 次版本号: "+application.getMinorVersion()+"<br/>");  

    out.print("本网页的真实路径:"+application.getRealPath("index1.jsp")+"<br/>");  

    %>  

 

 

将得到输出结果:

服务器信息: Apache Tomcat/7.0.55

Java Servlet API 主版本号: 3

Java Servlet API 次版本号: 0本网页的真实路径:E:\Code\Java-Newer\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\jsp_ysdx\index1.jsp

 

2、config

2.1 config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数及服务器的有关信息。

2.2 主要是对web.xml的数据进行读取。实际上是通过getServletContext()方法获得application对象,再根据application对象获得。

可以直接在网页中获得web.xml中设置的数据

Xml代码  


<servlet>  

        <servlet-name>Config</servlet-name>  

        <!-- 此处要设置为将使用该数据的网页名 -->  

        <jsp-file>/index1.jsp</jsp-file>  

        <init-param>  

            <param-name>username</param-name>  

            <param-value>Chalmers</param-value>  

        </init-param>  

        <init-param>  

            <param-name>password</param-name>  

            <param-value>123456</param-value>  

        </init-param>  

    </servlet>  

    <servlet-mapping>  

        <servlet-name>Config</servlet-name>  

        <url-pattern>/servlet/config</url-pattern>  

    </servlet-mapping>  

 

 

Java代码  


out.print("username: " + config.getInitParameter("username")  

            + "<br/>");  

    out.print("password:" + config.getInitParameter("password"));  

 

输出结果为:

username: Chalmers

password:123456

 

3、exception

作用如名所示,用来处理页面异常的。

3.1 exception对象常用方法如下

  (1)getMessage()方法

  (2)toString()方法

  (3)printStackTrace()方法

  (4)getLocalizedMessage()方法

  (5)fillStackTrace()方法

3.2 用法:

注意:exception对象只能在定义了<%@ page isErrorPage="true"%>中使用,否则没有该对象

testException.jsp

Java代码  


<%@ page language="java" contentType="text/html; charset=UTF-8"  

    pageEncoding="UTF-8"%>  

    <%@ page errorPage="handleException.jsp"%>  

  

    <%  

        int a = 0;  

        int b = 10 / a;  

    %>  

 

 

handleException.jsp

Java代码  


<%@ page language="java" contentType="text/html; charset=UTF-8"  

    pageEncoding="UTF-8"%>  

    <%@ page isErrorPage="true"%>  

  

    <%  

        out.print(exception.getMessage() + "<br/>");  

        exception.printStackTrace();  

    %>  

 

 

4、out

4.1 out对象主要用于向浏览器端输出数据

4.2 out实际上是带有缓冲特性的PrinterWriter,可以称之为JspWriter。缓冲区容量是可以设置的,甚至也可以关闭,

只要通过page指令的buffer属性就可以达到此目的。

4.3 JSP文件代码中的文件内容会自动生成out.print()或者out.println()输出。

 

5、page

5.1 page对象指代JSP页面本身、代表了正在运行的由JSP文件产生的类对象。

5.2 page对象的常用方法如下。

  (1)getClass()方法

  (2)equals()方法

  (3)clone()方法

  实际上就是从Object中继承的方法

 

6、request

6.1 请求有效:请求页面A,并向A中传递某些参数。

6.2 请求有效对象在处理结束时就会失效。

6.3 request对象可以获取哪些信息

6.3.1 建立HTML表单

   <form  action=“action” method=“method” name=“name”>。。。</form>

6.3.2 用REQUEST对象处理

   JSP页面将数据存放在request对象里,并将该请求传递到下一个页面,下一个页面访问request对象,处理上一个JSP页面传递过来的数据。

6.3.3 通过超链接来传递

   <a   href="aaa.jsp?aa=aa&bb=bb&cc=cc">aaa</a>

6.3.4 通过jsp动作标签param来进行传递

6.4 传递一组数据

Java代码  


//发送一组数据到receive.jsp  

<form action="receive.jsp" method="post">  

  跑步<input type="checkbox" name="habits" value="running" /><br />   

  阅读<input type="checkbox" name="habits" value="reading" /><br />  

  游戏<input type="checkbox" name="habits" value="game" /><br />  

<input type="submit" value="提交" />  

</form>  

 

//接收

//参数要一致

Java代码  


String[] habits = request.getParameterValues("habits");  

for(String s : habits){  

out.print(s+"<br/>");  

}  

 

 

7、response

7.1 response对象负责将服务器端的数据发送回浏览器的客户端。主要用于向客户端发送数据,如Cookie、HTTP文件头等信息。

7.2 利用response实现自动刷新

7.2.1 刷新当前界面

Java代码  


response.setHeader("refresh", "3");  

out.print(new Date().toString());  

 

结果:每隔3秒刷新一次界面,显示当前时间

7.2.2 跳转界面

Java代码  


<%  

out.print("3秒后刷新...");  

response.setHeader("refresh", "3;url=count.jsp");  

%>  

 

7.3 添加Cookie

Java代码  


<%  

        Cookie cookie = new Cookie("username", "Chalmers");  

        //设置保存时间为60*60秒  

        cookie.setMaxAge(60 * 60);  

        response.addCookie(cookie);  

    %>  

 

 

Java代码  


<%  

        Cookie[] cookies = request.getCookies();  

        for (Cookie c : cookies) {  

            if (c.getName().equals("username")) {  

                out.print(c.getValue());  

  

                return;  

            }  

        }  

        out.print("没有...");  

    %>  

 

 

8、pageContext

8.1 pageContext对象能够存取其他隐含对象。

8.2 当隐含对象本身也支持属性时,pageContext对象也提供存取那些属性的方法。

 

9、session

9.1 session对象用于存储一个用户的会话状态,也就是说,session对象是对某个用户的会话过程中的信息存储。

9.2 当客户端访问服务器时,会在服务器中搜索对应的sessionID,如果没有找到,那么便会创建一个,如果找到了便直接使用。

所以在session 的有效时间内,每个客户端只有一个sessionID。

 

 

10、pageContext,request、session、application传递参数的使用范围:

10.1 设置参数值

Java代码  


<%  

pageContext.setAttribute("pageContext", "true");  

request.setAttribute("request", "true");  

session.setAttribute("session", "true");  

application.setAttribute("application", "true");  

%>  

 

10.2 当前页面中,所有的对象都可以通过getAttribute获得值

10.2 在request的forward方法传递中,pageContext接收数据失败,所以pageContext只能在定义页面中使用。

10.3 request的include方法同上

10.4 如果使用response的sendRedirect方法,那么request也将接收失败。原因:客户端向服务端请求数据,服务端在向客户端发送数据

完成后,该request便已经结束,客户端访问url时已经是一个新的request了,所以request的使用范围是一个request内。

10.5 在session的有效时间内,数据都是存在的,特别强调的是,关闭浏览器不会清除掉session。

10.6 而application只有在关闭服务端后才会被清除,可见上面的application介绍。

10.7 总结:范围大小: application>session>request>pageContext

 

 

11.Cookie与Session的区别

Cookie是存在浏览器中的

Session是存在服务器中的

 

Cookie的安全性要低于Session

 

Cookie可能会被用户禁用

 

Session的数据是存在服务器内存中,关掉浏览器,会清空Session

临时性Cookie存在浏览器的缓存中,关掉浏览器,会清空

永久性Cookie是存在临时文件中,到达有效期前,一直存在




1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: