JSP内置对象总结

简介: JSP内置对象总结

1 定义

   内置对象指的是已经由jsp内部默认内置好的,由容器统一实现和管理,使用者不用自己定义即可使用的一系列对象集合

   如下例子是其中out对象的使用用例。

<%
        int[] values = {10,20,30};
        for(int value : values) { 
            out.println(value); //out 为 JSP 中的内置对象
        }
%>


2 特点

  1. 由JSP规范提供,不用编写者实例化。
  2. 通过Web容器实现和管理。
  3. 所有JSP页面均可使用。
  1. 只有在脚本元素的表达式或代码段中才可使用,如(<%=使用内置对象%>或<%使用内置对象%>)

3 按照功能分类

  1. 输出输入对象:requestion对象、application对象;  
  2. 通信控制对象:pageContext对象、session对象、application对象;  
  3. Servlet对象:page对象、config对象;
  1. 错误处理对象:exception对象。

  注:在实际开发中,常用的内置对象有out、request、response、session、application,而内置对象pageContext、page、exception、config使用的频率不高。

4 web程序的请求与响应模式

   web程序是基于http协议的,使用请求/响应的模式来实现交互。

这里面涉及到两个角色,一个是客户端,另一个是服务端。客户端向服务端发起请求,就是我们平常说的Request,服务端收到请求后,响应客户端并发送应答,就是我们平常说的response。

   这个过程就是一个请求,一个应答。

5 out对象的用途

   out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

5.1 out对象使用场景(一)

   向客户端输出信息是out对象的常用功能,实例代码如下:

<%
    out.print("我来自于out对象。");
    out.println("我来自于out对象,但我后面还跟着一个换行符。");
%>

上面两行代码会向浏览器输出对应的字符串。

   输出结果同如下html。

<body>
我来自于out对象。我来自于out对象,但我后面还跟着一个换行符。
</body>

管理响应缓冲,是out对象的一个重要使用场景。可以重置相应流,以便重新开始输出,主要的方法如下表格:

方法

说明

clear()

清除缓冲区中的内容。如果响应已经提交,则会有产生IOException异常

clearBuffer()

清除当前缓冲区中的内容。

flush()

刷新流。

isAutoFlush()

检测当前缓冲区已满时是自动清空,还是抛出异常。

getBufferSize()

获取缓冲区的大小。

6 get与post提交方式的区别

  1. GET在浏览器回退时是无害的,而POST会再次提交请求。
  2. GET产生的URL地址可以被Bookmark,而POST不可以。
  3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  4. GET请求只能进行url编码,一般编码为application/x-www-form-urlencoded,而POST支持多种编码方式.application/x-www-form-urlencoded或者multipart/form-data,并且可以对二进制请求体用多种编码方式。
  5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  6. GET请求在URL中传送的参数是有长度限制的,一般为2K,而POST没有限制。
  7. GET请求参数只接受ASCII字符,而POST没有限制。
  8. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  9. GET参数通过URL传递,POST放在Request body中。

7 request对象的作用

   request对象封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方式和请求参数等。通过request对象提供的相应方法可以处理客户端浏览器提交的HTTP请求中的各项参数。

 request对象的作用域为一次请求。

   一些常用的方法如下:

 方法  说明
 String getParameter(String name)  根据页面表单组件名称获取页面提交数据。
 String[] getParameterValues(String name)  获取一个页面表单组件对于多个值时的用户的请求数据。
 void setCharacterEncoding(String env)  指定每个请求的编码,在调用 request.getParameter() 方法之前进行设定,可以用于解决中文乱码问题。
 request.getRequestDispatcher(String path)  返回一个 RequestDispatcher 对象,该对象的 forward 方法用于转发请求。
 void setAttribute(String name,Object object)  将数据保存到request范围内的变量中。
Object getAttribute(String name)  获取request范围内的变量中的数据。
 void removeAttribute(String name)  删除request范围内的变量中的数据。
 Cookie[] getCookies()  获取到所有cookie对象的集合。

7.1 使用场景-获取请求参数

   获取请求参数是request对象的常用接口之一。

   下面用代码来演示在一个GET请求中的常规使用。

  1. 客户端user.jsp通过如下代码提交删除请求。
<a href='delete.jsp?id=123'>删除</a>

   2. 在delete.jsp中,我们可以通过如下代码获取客户端提交的id参数值。

<%
    String userId = request.getParameter('id');
    // 根据userId进行后续的操作
%>

7.2 使用场景-在作用域管理属性

   因为request的作用域是一次请求有效,在进行请求转发时,需要把第一次请求的数据重新设置,以便这是数据能到达后面跳转处理的页面。

 用一个登录跳转的例子简单说明。


   我们有一个登录页面login.jsp,处理登录的页面do_login.jsp,登录成功后的页面index.jsp。


   在login.jsp中有用户名(userName)、密码两个参数(password),提交到do_login.jsp后,我们用如下代码获取参数并重新设置参数,要不然登录后跳转到index.jsp页面无法获取到这两个参数。    <%

<%
    // 获取login.jsp提交过来的参数
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
    // 在作用域里重新设置参数
    if (userName != null) {
        request.setAttribute("userName", userName);
    }
    if (password != null) {
        request.setAttribute("password", password);
    }
    // 跳转到index.jsp
    request.getRequestDispatcher("index.jsp").forward(request, response);
%>

7.3 使用场景-操作cookie

由于http协议是无状态的,所以客户端(浏览器)需要用一种机制(cookie)来保存一些服务端发过来的一些数据,如用户登录信息,用户的一些跟踪操作,用户名密码等。cookie是以key/value的形式保存在客户端的某个指定目录下。

   写入cookie:

<%  
    //写入cookie对象
    request.setCharacterEncoding("UTF-8");  //设置请求的编码
    Cookie cookie = new Cookie("w3c","你好,欢迎来到w3c课堂");  //创建并实例化cookie对象
    cookie.setMaxAge(60*60*24*10);  //设置cookie有效期为10天
    response.addCookie(cookie);  //保存cookie对象
%>

 读取cookie:

<%
    //读取cookie值
    Cookie[] cookies = request.getCookies();  //从request中获取cookie对象的集合
    String user = "";
    if(cookies != null) {
        //遍历cookie对象集合
        for(Cookie cookie : cookies) {
            if(cookieItem.getName().equals("w3c")) {
                user = cookieItem.getValue();  //读取cookie对象的的值
            }
        }
    }
%>

7.4 使用场景-设置编码

   对于unicode字符串来说,在传递过程中容易产生乱码,如中文,韩文,日文等。这是因为请求参数的文字编码方式与页面不一致所造成的,请求参数都是ISO-8859-1国际编码,而页面一般采用的是UTF-8编码。因此,只要将获取到的请求参数用UTF-8重新编码参数即可。具体见如下代码:

   请求链接为:

<a href='decode.jsp?name=程序猿&country=CN'>中文参数链接</a>

   则在decode.jsp页面可通过如下代码获取参数:

<div>
    名字:<%= new String(request.getParameter("name").getBytes("ios-8859-1"), "UTF-8") %>
    国籍:<%= request.getParameter("name") %>
</div>

7.5 使用场景-获取客户端信息

获取客户端的信息,如ip, 请求头等,可获取的接口如下:

 方法  说明
 getHeader(String name)  获取HTTP协议定义的文件头信息。
 getHeader(String name)  返回指定名字的request Header的所有值,其结果是一个枚举型的示例。
 getHeaderNames()  返回所有request Header的名字,其结果是一个枚举型的实例。
 getMethod()  获取客户端向服务器端传送数据的方法,如get、post、header、trace等。
 getProtocol()  获取客户端向服务器端传送数据所依据的协议名称。
 getRequestURI()  获取发出请求字符串的客户端地址,不包括请求参数。
 getRequestURL()  获取发出请求字符串的客户端地址。
 getRealPath(String path)  返回当前请求文件的绝对路径。
getRemoteAddr()  获取客户端的IP地址。
 getRemoteHost()  获取客户端的主机名。
getServerName()   获取服务器的名字。
getServletPath()  获取客户端所请求的脚本文件的文件路径。
getServerPort()  获取服务器的端口号。

7.6 使用场景-国际化

   如果你的站点需全球站点,需要国际化,这个接口你就会用到。getLocal和getLocals接口返回的是浏览器在accept-language请求头里的指定的语言,这个字段是向服务端表明客户端浏览器的本地语言是什么。由此来决定返回合适的语言。

<%
  java.util.Locale locale = request.getLocale();
  String str = "";
  if(locale.equals(java.util.Locale.US)) {
    str = "Hello, Welcome to w3c international website!";
  } else if(locale.equals(java.util.Locale.CHINA)) {
    str = "您好,欢迎访问w3c中国站点!";
  }
%>
<%= str %>

8 response对象是什么

response对象用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应,并发送到客户端以响应客户端的请求。请求的数据可以是各种数据类型,包括文件。

   作用域为jsp页面内。

8.1 使用场景-重定向

   重定向是一个常用的处理逻辑。

  使用sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持跨域,这一点与转发不同。从客户端来说相当于重新发送一个请求。用户可以从浏览器的地址栏中看到跳转后的地址。进行重定向后,原有请求request失效,开始一个新的request对象。


   比如一个常用场景是登录成功后会重定向到首页。  

<%
    response.sendRedirect("index.jsp");
%>

8.2 使用场景-添加响应头

   通过response对象可以设置HTTP响应头,其中最常用的是禁用缓存、设置页面自动刷新和定时跳转网页,还有就是一些协议响应头。

<%
    //禁用缓存,告诉客户端浏览器,不要缓存此次响应
    response.setHeader("Cache-Control", "no-store");
    response.setDateHeader("Expires", 0);
    //设置页面自动刷新,可以实现页面的自动刷新
    response.setHeader("refresh", "10");
    //定时跳转网页,5s后跳转到首页
    response.setHeader("refresh", "5;URL=index.jsp");
%>

8.3 使用场景-设置输出缓冲

   通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区。

   response对象提供的对缓冲区进行配置的方法:

 方法  说明
 flushBuffer()  强制将缓冲区的内容输出到客户端。
 getBufferSize()  获取响应所使用的缓冲区的实际大小,如果没有使用缓冲区,则返回0。
 setBufferSize(int size)  设置缓冲区大小。单位为K,0代表不缓冲。
 reset()  清除缓冲区的内容,同时清除状态码和报头。
 isCommitted()  检查服务器端是否已经把数据写入到可客户端。


目录
相关文章
|
7月前
|
存储 缓存 Java
JSP九大内置对象及基本使用
JSP九大内置对象及基本使用
153 0
|
Java
17JavaWeb基础 - JSP的九大内置对象/四大作用域
17JavaWeb基础 - JSP的九大内置对象/四大作用域
83 0
|
Java
jsp内置对象和路径
jsp内置对象和路径
99 0
|
4月前
|
缓存 Java 应用服务中间件
JSP的内置对象 request和response
这篇文章详细介绍了JSP的内置对象,包括request、response、out、session和application对象的使用方法和特性,以及如何通过这些对象处理HTTP请求和响应、管理会话和输出数据。
|
7月前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
79 2
|
Java
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(二)
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(二)
115 0
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(二)
|
Java 存储
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(一)
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(一)
67 0
欢迎来到Jsp编程课时四——内置对象 中四大作用域。(一)
|
Java
2022年欢迎来到Jsp编程第二课:JSP核心九大内置对象
2022年欢迎来到Jsp编程第二课:JSP核心九大内置对象
94 0
|
存储 Java
每日一道面试题之jsp 有哪些内置对象?作用分别是什么?
每日一道面试题之jsp 有哪些内置对象?作用分别是什么?
|
Java
jsp相关概念以及九大内置对象
jsp相关概念以及九大内置对象
94 0