JSP内置对象,JSP提供了由容器实现和管理的内置对象,也可以称之为隐含对象,这些内置对象不需要通过
JSP页面编写来实例化,在所有的JSP页面中都可以直接使用,它起到了简化页面的作用。
  在JSP中一共预先定义了9个这样的对象,分别为request、response、session、applicition、out、
pageContext、config、page和exception。
    
    request对象
        request对象封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方式
和请求参数等。通过request对象提供的相应方法可以处理客户端浏览器提交的HTTP请求中的各项参数。
    1.访问请求参数
        当通过超链接的形式发送请求时,可以为该请求传递参数,这可以在超链接后加“?”来实现。(注意这
    个问号为英文半角符号)。
        例1:
            <a herf="delete.jsp?id=1&name="user"">删除</a>
        说明:如果同时指定多个参数,参数之间用符号“&”分隔。
        例2:在delete.jsp页面,可以提供request对象的getParameter()方法获取传递的参数值
                request.getParameter("id");
        说明:在使用request.getParameter()方法获取传递的参数时,如果指定的参数不存在,将返回null,
        如果指定了参数名,但未指定参数值,将返回空字符串("")。
 
  例3:index.jsp向deal.jsp传参数
    index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<a href="deal.jsp?id=1&&user=">处理页</a>
</body>
</html>

    deal.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Deal</title>
</head>
<body>
<%
String id = request.getParameter("id");
String user = request.getParameter("user");
String pwd = request.getParameter("pwd");
%>
id值为:<%=id %> <br>
user值为:<%=user %> <br>
pwd值为:<%=pwd %>
</body>
</html>

  结果:    

    

2.在作用域中管理属性

     在进行请求转发时,需要把一些数据传递到转发后的页面进行处理。这时,就需要request对象的
    setAttribute()方法将数据保存到request范围内的变量中。
        语法格式:
            request.setAttribute(String name,Object object);
        参数说明:
            name:  表示变量名,为String类型,在转发后的页面取数据时,通过这个变量名来获取数据;
            object:用于指定需要在request范围内传递的数据,为Object类型;
        将数据保存到request范围内的变量中后,可以通过request对象的getAttribute()方法获取改变量的
    值,语法格式如下:
            request.getAttribute(String name);
        例1:
    index.jsp
    

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<%
try{
int money = 100;
int number = 0;
request.setAttribute("result",money/number);
}catch(Exception e){
request.setAttribute("result", "页面产生错误!");
}
%>
<jsp:forward page="deal.jsp"/>
</body>
</html>

    deal.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Deal</title>
</head>
<body>
<%String message = request.getAttribute("result").toString();%>
<%=message %>
</body>
</html>
3.获取cookie
        在Web中cookie的意思的小段的文本信息,在网络服务器上生成,并发送给浏览器。通过使用cookie可以
    标识用户身份,记录用户名和密码,跟踪重复用户等。浏览器将cookie以key/value的形式保存到客户机的某
    个指定目录内。
        cookie.getCookie()可获取所有cookie对象的集合;
        cookie.getName()可以获得指定名称的cookie;
        cookie.getValue()可获得cookie对象的值;
        response.addCookie()将一个cookie对象发送到客户端;
        在向cookie中保存信息时,如果包含中文,则需要调用java.net.URLEncoder类的encode()方法将要保
    存到cookie中的信息进行编码;在读取cookie的内容时,应用java.net.URLDecoder类中的decode()方法进
    行解码。
        例1:通过cookie保存并读取用户登录信息。
    index.jsp
<%@page import="java.net.URLDecoder"%>
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
String user = "";
String date = "";
if (cookies != null) {
for (int i = 0; i < cookies.length; i++)
if (cookies[i].getName().equals("myCookie")){
String url = cookies[i].getValue().split("#")[0];
user = URLDecoder.decode(url,"UTF-8");
date = cookies[i].getValue().split("#")[1];
}
}
if ("".equals(user) && "".equals(date)) {
%>
欢迎光临!
<form action="deal.jsp" method="post">
输入姓名:<input name="user" type="text" value="">
<input type="submit" value="确定">
</form>
<%
}else{
%>
欢迎<strong><%=user %></strong>,注册时间为:<%=date %>
<%
}
%>
</body>
</html>

    deal.jsp

<%@page import="java.util.Date"%>
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Deal</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
String user = URLEncoder.encode(request.getParameter("user"), "UTF-8");
//这里URLEncoder会出现解析错误,重写为java.net.URLEncoder.encode()后错误消失
String s = user+'#'+new java.util.Date().toLocaleString();
Cookie cookie = new Cookie("myCookie",s.trim().replaceAll(" ",""));
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
//出现错误java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
//根本问题cookie中不接受非法字符,非法字符,如堆栈中所述,[32],可以查询32对应的ASCII码,如此处是:空格。
//解决方法如上17行代码所示,去掉空格
%>
<script type="text/javascript">window.location.href="index.jsp"</script> </body>
</html>

 4.获取客户端信息

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
获取客户端信息
<!-- getHeader(String)获得HTTP协议定义的文件头信息 -->
<br>获得Http协议定义的 文件头信息Host的值:<%=request.getHeader("host") %>
<br>获得Http协议定义的 文件头信息User-Agent的值:<%=request.getHeader("user-agent") %>
<br>获得Http协议定义的 文件头信息accept-language的值:<%=request.getHeader("accept-language") %> <!-- getHeaders(String)返回指定名字的request Header的所有值,其结果是一个枚举类型 -->
<!-- getHeadersNames()返回所有request Header的名字,结果也是一个枚举实例 --> <!-- getMethod()获得客户端向服务器传送数据的方法 -->
<br>客户提交信息的方式:<%=request.getMethod() %> <!-- getProtocol()获得客户端向服务器端传送数据所依据的协议名称 -->
<br>使用的协议:<%=request.getProtocol() %> <!-- getRequestURI()获得发出请求字符串的客户端的地址,不包括请求的参数 -->
<br>获取发出请求字符串的客户端地址:<%=request.getRequestURI() %>
<!-- getRequestURL()获得发出请求字符串的客户端的地址 -->
<br>获取发出请求字符串的客户端地址:<%=request.getRequestURL() %> <!-- getRealPath()返回当前请求文件的绝对路径 (过时了)-->
<br>获得请求文件的绝对路径:<%=request.getRealPath("index.jsp") %> <!-- getRemoteAddr()获取客户端的IP地址 -->
<br>获取提交数据的客户端的IP地址:<%=request.getRemoteAddr() %> <!-- getRemoteHost()获取客户端的主机名 -->
<br>获取客户端的主机名:<%=request.getRemoteHost() %> <!-- getServerName()获取服务器的名字 -->
<br>获取服务器的名称:<%=request.getServerName() %> <!-- getServerPort()获取服务器的端口号 -->
<br>获取服务器的端口号:<%=request.getServerPort() %> <!-- getServletPath()获取客户端所请求的脚本文件的文件路径 -->
<br>获取客户端所请求的脚本文件的文件路径:<%=request.getServletPath() %>
</body>
</html>

结果显示:

5.页面信息国际化
        浏览器可以通过accept-language的HTTP报头向Web服务器指明它所使用的本地语言。request对象中的
    getLocale()和getLocales()方法允许开发人员获得此信息,获取的信息属于java.util.Locale类型。
    java.util.Locale类型的对象封装了一个国家或地区所使用的语言。
<%
java.util.Locale locale=request.getLocale();
String str="";
if (locale.equals(java.util.Locale.US))
str="Welcome to my web!";
if (locale.equals(java.util.Locale.CHINA))
str="欢迎访问我的网站!";
%>
<%=str %>
response对象
        response对象用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应,并发送到客户端以响应
    客户端的请求。请求的数据可以是各种类型,甚至是文件。request对象在JSP页面内有效。
    1.重定向页面
        使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持将地址
    重定向到不同的主机,这一点与转发不同。在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。进
    行重定向操作后,request中的属性全部失效,并开始一个新的request对象。
        语法格式:
        response.senRedirect(String path)
    2.处理HTTP文件头
        通过response对象可以设置HTTP的响应报头,下面介绍最常用的操作。
        a.禁用缓存
            在默认情况下,浏览器会对显示的网页内容进行缓存。这样,当用户再次访问相关网页时,浏览器会
        判断网页是否发生变化,如果没有变化则直接显示缓存中的内容,这样可以提高网页的显示速度。对于一
        些安全性较高的网站,通常需要禁用缓存。

<%
response.setHeader("Cache-Control","no-store");
response.setDateHeader("Expires",0);
%>
        b.页面自动刷新

<%
response.setHeader("refresh","10")//秒
%>
        c.定时跳转页面

<%
response.setHeader("refresh","5;URL=login.jsp");
%>
    3.设置输出缓存
        通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区(暂时放置
    输入输出内容的内存)。当满足以下三种情况时,就会把缓冲区的内容写到客户端:
            (1)Jsp页面的输出信息已经全部写入到了缓冲区    
            (2)缓冲区已满
            (3)Jsp中调用了response.flushBuffer()或out.flush()
        response对象提供的方法:
            flushBuffer()       强制将缓冲区的内容输出到客户端
            getBufferSize()     获取响应所使用的缓冲区实际大小,如果没有缓冲区则返回0
            setBufferSize()     设置缓冲区的大小
            reset()             清除缓冲区的内容,同时清除状态码和报头
            isCommitted()       检查服务器端是否已经把数据写入到了客户端
    
    session对象
        session在网络中被称为会话。由于HTTP协议是一种无状态协议,也就是当一个客户端向服务器发出请求,
    服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP
    协议提供了session。提供session可以在应用程序的Web页面间进行跳转时,保存用户的状态,使整个用户会
    话一直存在下去,知道关闭浏览器。但是如果再一个会话中,客户端长时间不向服务器发出请求,session对象
    就会自动消失。这个时间取决于服务器,比如Tomcat服务器默认为30min。
        保存信息:
            session.setAttribute(String name,Object obj)
            name :指定在session中的变量名
            obj:保存的对象
        获取信息:
            session.getAttribute(String name)
            getAttribute()返回的是Object类型
        移除信息:
            session.removeAttribute(String name)
        销毁session:
            session.invalidate()
        生命周期:
            getLastAccessedTime();      返回客户端最后一次与会话相关联的请求
            getMaxInactiveInterval();   以秒为单位返回一个会话内两个请求的最大时间间隔
            setMaxInactiveInterval();   以秒为单位设置session的有效时间
    
    application对象
        application对象用于保存所有应用程序的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。
    当application对象没有被销毁时,所有用户都可以共享该application对象。与session相比,application
    生命周期更长,类似于“全局变量”。
        1.访问应用程序的初始化参数
            应用程序初始化参数在web.xml文件中设置,web.xml文件位于Web应用所在目录下的WEB-INF子目录
        中,在web.xml文件中通过<context-param>标记配置初始化参数。
            application.getInitParameter(String name);  返回已命名的参数值
            application.getAttributeNames();            返回所有已定义的参数名的枚举
        ......
    
    out对象
        out对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。
        1.输出数据
            out.print("");
            out.println("");
            输出时,println的换行并不会显示,可以用<pre>来显示效果
        2.管理响应缓冲
            out.clear()             清除缓冲区内容,类似重置响应流,如果响应已提交,则会产生异常
            out.clearBuffer()       清除当前缓冲区内容,即使已提交,也能使用
            out.flush()             刷新流
            out.isAutoFlush()       监测当前缓冲区已满时是自动清空还是抛出异常
            out.getBufferSize()     获取缓冲区大小
    pageContext对象
        通过它获取JSP页面的其他对象,实际开发很少使用
    config对象
        主要用于取得服务器的配置信息
    page对象
        page对象代表Jsp本身
    exception对象
        处理异常对象
 

4.JSP内置对象的更多相关文章

  1. jsp内置对象浅谈

    jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...

  2. JSP内置对象-request

    JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...

  3. JavaWeb学习----JSP内置对象详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  4. Jsp内置对象及EL表达式的使用

    一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...

  5. Java遇见HTML——JSP篇之JSP内置对象(上)

    一.JSP内置对象简介 1.1.内置对象简介 JSP内置对象是WEB容器中创建的一组对象,可以直接使用不需要new,如截图中的out 对象. JSP有九大内置对象: 五大常用对象: out.reque ...

  6. JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础

    JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...

  7. JSP内置对象详解

    jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request ...

  8. JSP内置对象(上)

    在JSP中为了简化页面的开发提供了一些内置的对象.这些对象不需要由JSP的编写者通过new关键字实例化,他们都由容器实现和管理,在所有的JSP页面中都可以使用内置对象. JSP中共有9大内置对象: o ...

  9. JSP内置对象(下)

    JSP中共有9大内置对象: out对象 requset对象 response对象 session对象 pageContext对象 application对象 config对象 page对象 excep ...

  10. jsp内置对象的方法

    JSP内置对象的方法:out:out.print();request:request对象主要用于出列客户端请求.   常用方法:    String getParameter(String name) ...

随机推荐

  1. 格式化hdfs以及namnode没启动

    先stop-all.sh 删除hdfs-site.xml中的这两个目录 然后删除core-site.xml 中的这个目录 然后格式化hdfs hdfs namenode -format 即可启动成功 ...

  2. 设计模式:职责链模式(Chain of Responsibility)

    去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985.211的娃呢),但是对于某些人来说就是福音了.大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不 ...

  3. python_操作MySQL 初解 之__<类方法调用并 增-删-改-查>

    文件一: 调用(sqls文件) # 导入模块 import pymysql from sqls import * # 创建类 class KaoShi(object): # 初始化 def __ini ...

  4. pwd命令和修改PS1环境变量在bash行的显示

    一.pwd:显示当前所在的位置 语法 pwd [选项] ... 描述       打印当前工作目录的完整文件名. -L,--logical              从环境使用PWD,即使它包含符号链 ...

  5. springboot JPA mysql

    官方文档 https://docs.spring.io/spring-data/jpa/docs/1.11.10.RELEASE/reference/html/ 常用关键字 通常,JPA的查询创建机制 ...

  6. Charles学习(二)之使用Map local代理本地静态资源以及配置网页代理在Mac浏览器上调试移动端

    前言 我们在开发的过程肯定是一边写代码,一边查看自己的代码写的是否存在问题,那么问题来了,有两种情况 情况一:我们可以本地起服务,那么我们就可以在本地检查自己的代码,查看运行结果 情况二:本地无法起服 ...

  7. 21 Python之反射

    1.反射 主要是用到了4个函数(  用的最多的就是getattr()和 hasattr()  ): getattr()   从xxx对象中获取到xxx属性值 hasattr()  判断xxx对象中是否 ...

  8. 07 Deque的应用案例-回文检查

    - 回文检测:设计程序,检测一个字符串是否为回文. - 回文:回文是一个字符串,读取首尾相同的字符,例如,radar toot madam. - 分析:该问题的解决方案将使用 deque 来存储字符串 ...

  9. 利用selenium 爬取豆瓣 武林外传数据并且完成 数据可视化 情绪分析

    全文的步骤可以大概分为几步: 一:数据获取,利用selenium+多进程(linux上selenium 多进程可能会有问题)+kafka写数据(linux首选必选耦合)windows直接采用的是写my ...

  10. 自定义zabbix中的普通KEY及LLD KEY

    普通类型KEY 1.agent端: 编写自定义脚本,脚本需要有输出值返回给zabbix-server,并且给对应脚本赋予zabbix用户可执行权限 zabbix-agnet 且定义key名称和comm ...