一、JSP隐式对象概述

为了简化jsp表达式和脚本片断代码的编写,JSP一共提供了9个预先定义的变量,这些变量也称为隐式对象或内置对象。

在 jsp生成的Servlet源码中,有如下声明:

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException { //这里声明了内置对象
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null; //有一些内置对象是在这初始化的
try {
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
"err_page.jsp", true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out; out.write('\r');
out.write('\n');
....
}

这里能找到8个内置对象, 还差一个 exception。

只要在专门用于错误处理的页面,才有这个 对象,将页面设为错误页: <%@ page isErrorPage="true" %>,则会发现 在上面的 _jspService 方法中又多了一个 exception 对象,Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

* 共有九大内置对象

//九大内置对象
1.request //HttpServletRequest
2.response //HttpServletResponse
3.pageContext //pageContext
4.application //ServletContext
5.session //HttpSession
6.page //Object
7.out //JspWriter
8.exception //Throwable
9.config //ServletConfig

1.request对象  //HttpServletRequest

* request 获取请求参数的方法

-- String getParamter(String name)

-- Enumeration getParameterNames();  //得到所有请求参数的名称

-- String [] getPrameterValues(String name) ; //取得所有的相同name的值

public class StrUtil {
public static String linkListSql(String [] list){
String str="(";
for(int i=0;i<list.length;i++){
if(i<list.length-1){
str+=list[i]+",";
}else{
str+=list[i];
}
}
str+=")" ;
return str;
}
}
//dao中:
public int delUsers(String[] idList) {
String sql="delete from userInfo where id in "+StrUtil.linkListSql(idList);
System.out.println(sql);
return DBUtil.update(sql, null);
}

--Map getParameterMap() //得到一个Map

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Map<String,String[]> map =request.getParameterMap(); Set<Map.Entry<String,String[]>> entrySet=map.entrySet();
Iterator<Map.Entry<String, String[]>> it=entrySet.iterator();
while(it.hasNext()){
Map.Entry<String, String[]> item=it.next();
System.out.println(item.getKey()+":");
String [] valueList=item.getValue();
for(int i=0;i<valueList.length;i++){
System.out.println(valueList[i]);
}
System.out.println("--------");
}
}

2.request 获取请求头的方法

-- getHeader(String name)   //根据请求头的名称得到内容

-- Enumeration getHeaderNames() //取得所有的请求头名称

-- int getIntHeader(String name) //根据名称,得到整数类型的标头

-- Cookie [] getCookies() //取得所有与请求头相关的Cookie

Enumeration  headList =request.getHeaderNames();
while(headList.hasMoreElements()){
String headerName=headList.nextElement().toString();
System.out.println(headerName+":");
System.out.println(request.getHeader(headerName));
System.out.println("----");
}

* request

String getContextPath() //取得Context路径     --- /show-admin-mvc

String getMethod() //取得Http 方法(GET ,POST)      --GET

String getProtocol() //取得使用的协议(HTTP/1.1,HTTP/1.0)     --HTTP/1.1

String getQueryString() //取得请求的参数字符串,不过HTTP的方法必须为GET      --userName=f e=f&password=f e=f

String getRequestSessionId() //取得客户端的SessionId

String getRequestURI() //取得请求的URL,但不包扩请求的参数 字符串      --UserWeb/Test.jsp

String getRemoteAddr() //取得用户的IP地址  很有用

String getRemoteHost() //取得用户的主机名

int getRemotePort() //取得用户的主机端口

String getRemoteUser() //取得用户的名称

void setCharacterEncoding(String encoding) //设置编码格式,用来解决页面传递中文的问题

3.response 对象

将处理jsp处理数据后的结果返回给客户端,该对象实现javax.servlet.http.HttpServletResponse 接口

* 设定响应头的方法

void addCookie(Cookie cookie)

void addDateHeader(String name,long date)

void addHeader(String name,String value);

void addIntHeader(String name,int value);

void setHeader(String name,String value);

* 设定响应状态码的方法

void sendError(int sc); 传递状态码(status code)

void sendError(int sc,String msg)传送状态码和错误信息  //response.sendError(404,"哈哈,错了,活 gai  " );

void setStatus(int sc) 设定状态码

* 用于重定向的方法

sendRedirect(String url);

4.session 对象

实现 javax.servlet.htt.HttpSession接口

setAttribute(String name,Object obj);

long getCreationTime() 取得Session产生的时间,毫秒,从1970年1月1日零时起算

String getId() //取得Session 的 Id

long getLastAccessedTime() 最得最后用这个Session发送的时间,同上

void invalidate() 取消session对象 并将其存放的内容释放

boolean isNew()  判断Session是否为新 (服务器产生,但client尚未使用)

void setMaxInactiveInterval(int interval) 过期时间,以秒为单位

5 application 对象

实现javax.servlet.ServletContext 接口

服务器启动后它就产生了

* 容器相关信息的方法

int getMajorVersion() //取得Container主要的Servlet API 版本   --2

int getMinorVersion //取得次版本

String getServerInfo () //取得Container 的名称和版本

* 有关服务器的路径和文件的方法

String getMimeType(String file)取得指定文件的MIME类型

ServletContex getContext(String uripath)取得指定Local URL 的 Application context

String getRealPath(String path) 取得本地端path的绝对路径

例如 : <% out.println(application.getRealPath("Login.jsp"));%>//C:\Program Files\Tomcat 6.0\webapps\UserWeb\Login.jsp

* 有关日志记录的方法

void log(String msg)将信息写入日志文件中

void log(String msg,Throwable throwable)将stack trace所产生的异常信息写入log文件中

6.pageContext 对象  //PageContext

提供了返回JSP页面的其他隐式对象的方法

getPage()

getRequest()

getResponse()

getServletConfig()

getServletContext() //返回applaction隐式对象

getSession()

getException()

getOut()

pageContex 对象是通过调用 JspFactory.getPageContext 方法获得的

描述 JSP 文档的运行环境提供对所有其他隐式对象及其属性的访问

void forward (path) //可以进行跳转, 属于请求的转发  //  pageContext.forward("login.jsp");

ServletConfig getServletConfig() //返回servlet配置对象(即config对象)

///例子
public void test(PageContext context){
context.getRequest().setAttribute("requestKey","这是往request放的东西");
context.getSession().setAttribute("sessionkey", "这是往session放的东西");
context.getServletContext().setAttribute("applicationKey", "这是application的");
}

7.exception 对象  // Throwable

要使用它,必须在当前页面设置  。。。 isErrorPage="true"  %>

别的页页设置 errorPage="ErrProcess.jsp"%>

8.page对象

Object page=this  表示jsp页面本身

9.config对象  //ServletConfig

存储 Servlet 配置对象,是 javax.servlet.servletConfig 接口的一个实例。

重要方法:

Enumeration getInitParameterNames()

String getInitParameter(name)

10.out对象  JspWriter

用来向jsp页面发送文本形式的实体内容,它是调用pageContext 的getOut()方法取得的它和以前学的 ServletResonse.getWriter方法返回的 PrintWriter 对象常相似,但两者是不同的对象。JSP中的out 的类型为JspWriter,相当于一个带缓存功能的PrintWriter,相当于PrintWriter的包装类

11.访问各个域范围中的属性

在pageContext, request,session,appaction 对象中,都可以调用 setAttribute 和 getAttribute 方法来设置和检索属于各自域范围内的属性, 它们的不同之处如下:

--appaction 中的,可以被同一个web应用程序中所有的Servlet和JSP页面访问

--session 中的,可以被同一个会话所有的Servlet和 JSP页面访问

--request 中的,可以被同一个请求中的所有Servlet 和 js页面访问

--pageContext 中的,仅可以被当前JSP页面的当前响应过种中调用的各个组件访问

pageContext 类还提供了对个各域范围的属性进行统一管理的方法,它的setAttribute 方法有如下重载

* public void  setAttribute(String name,Object value); //page范围

* pbulic void setAttribute(String name,Object value,int scope)  //scope 指定域范围

scope 对应的常量: PageContext. //这几个常量定义在 PageContext 类中

APPLICATION_SCOPE,

SESSION_SCOPE,

REQUEST_SCOPE,

PAGE_SCOPE

//例子

pageContext.setAttribute("key",value,PageContext.SESSION_SCOPE)  //相当于往session中放值

12.Mime类型

不管浏览器接收到的是什么数据,实际上都是0,和 1 给成的二进制数据,浏览器不知道它,接收的是图片,普通网页,还是Excel文档,因为此,web服务器必须通过某种方式告诉浏览器所接收的实体内容代表的是哪种格式的数据,浏览器才能正确的处理,计算机应用中有多种通用数据格式,人们为每一种通用的数据格式都定义了一个名称,称为 MIME (Mutipurpose Internet Mail Extension 多用途Internet 邮件扩展) 类型Content-Type头字段用于指出实体中内容的Mime 类型,大多数Web服务器都可以设置文件扩展名和Mime类型的对应关系。在tomcat 中,可以在 C:\Tomcat6.0\conf\web.xml 中找到大量的这种Mime类型的对应设置。

Java基础——JSP(二)的更多相关文章

  1. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  2. java基础(二章)

    java基础(二章) 一,变量 1.变量是内存中的一个标识符号,用于存储数据 2.变量命名规则 l  必须以字母.下划线 _ .美元符号 $ 开头 l  变量中,可以包括数字 l  变量中,不能出现特 ...

  3. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  4. java基础-多线程二

    java基础-多线程二 继承thread和实现Runnable的多线程每次都需要经历创建和销毁的过程,频繁的创建和销毁大大影响效率,线程池的诞生就可以很好的解决这一个问题,线程池可以充分的利用线程进行 ...

  5. JAVA基础(二)—— 常用的类与方法

    JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...

  6. Java实习生常规技术面试题每日十题Java基础(二)

    目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...

  7. Java基础——JSP(一)

    一.JSP的由来 在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变.例如, 一个新闻的浏览次数,只有这个次数是动态改变的,而Servlet程序返回客户端的代码全是java程序动 ...

  8. Java基础系列二:Java泛型

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...

  9. Java 基础(二)| 使用 lambad 表达式的正确姿势

    前言 为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握 lambda 表达式,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 ...

  10. Java基础(十二)--clone()方法

    Clone在Java中就是用来复制对象,通过分配一个和源对象相同大小的内存空间,然后创建一个新的对象,那么他和=的区别在哪? 通过=实现对象拷贝: @Data @NoArgsConstructor @ ...

随机推荐

  1. GridControl简单属性操作

    1.单行记录整行选中 GridView->OptionsBehavior->EditorShowMode 设置为:Click 2.如何让行只能选择而不能编辑(或编辑某一单元格) 只读 Gr ...

  2. FluentAPI详细用法

    设置主键 modelBuilder.Entity<x>().HasKey(t => t.Name); 设置联合主键 modelBuilder.Entity<x>().Ha ...

  3. DS-博客作业03--栈和队列

    1.本周学习总结 第三章主要介绍栈和队列的基本概念,存储结构,基本运算算法设计和应用实例.从组成元素的逻辑关系来看,栈和队列都属于线性结构.栈和队列与线性表的不同之处就在于他们的相关运算具有一些特殊性 ...

  4. Mongodb--基础(连接,增删改查,数据类型)

    mongodb 日常启动命令 mongod --dbpath D:\data\db 一.启动,连接 mongodb是一个非关系型数据库 1. 启动MongoDB服务: 安装时我并没有将mongodb服 ...

  5. GC日志时间分析

    在GC日志里,一条完整的GC日志记录最后,会带有本次GC所花费的时间,如下面这一条新生代GC: [GC [DefNew: 3298K->149K(5504K), secs] [Times: us ...

  6. js获取当前页面相关信息

    1. 获取整个url: console.log(window.location.href)  http://localhost:8082/Index.html?name=tom 2. 获取域名加端口号 ...

  7. flaks___git

    今天呢  我给大家分享一个超实用的一个把代码分享到云端的一种操作 比如我们在家里,要想做项目的话可以直接从云端上拉取下来代码直接开始工作了 而且还可以随时修改,没有地点的局限性了,只要你想敲,随时随地 ...

  8. js缓存问题,修改js后代码不生效

    问题描述 最近在上线新版本项目的时候,发现有的用户的操作还是调用的老版本JS里面的内容,这样就造成原来新的JS里面加上的限制不能限制用户的操作,从而导致用户可以重复操作. 问题产生原因 如果在用户之前 ...

  9. centos7 系统优化

    #!/usr/bin/env bash #设置环境变量 export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/u ...

  10. 解决 ORA-27102: out of memory

    记一次故障处理总结: 操作系统:windows server 2008 R2数据库版本:11.2.0.2 故障描述:外部应用连接数据库,提示连接不正常: 排错过程:1.首先 检查数据库监听服务状态是否 ...