一、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. 转(C# 类似右键菜单弹出窗体)

    文章来自 https://www.cnblogs.com/ahdung/p/FloatLayerBase.html 每天进步一点点 新建类  FloatLayerBase 继承Form, 自己有点小改 ...

  2. JQuery Mobile - 自定义图标!

    环境 jquery1.9.1.js jquery mobile 1.4.2版 图标制作 18x18px 底透明的png图标 使用图标,这个过程开始怎么弄都不行,只有个灰色的圆出现,不见图标:或者出现图 ...

  3. Python3.5 学习二十

    学会用三种方法检索数据 1.对象方式 2.字典方式 3.元组方式 models后面,如果是.values() 则为字典方式 如果是value_list() 则为元组方式 跨表操作时,如果是对象,可以用 ...

  4. time clock getrusage clock_gettime gettimeofday timespec_get 对比

    http://stackoverflow.com/questions/12392278/measure-time-in-linux-time-vs-clock-vs-getrusage-vs-cloc ...

  5. Linux学习笔记-基本操作4

    1. gdb调试2. makefile的编写3. 系统IO函数 1. gdb调试:        1. 启动gdb + 可执行文件        2. 查看代码:                l== ...

  6. node - 使用request发送http请求

    在nodejs的开发中,有时需要后台去调用其他服务器的接口,这个时候,就需要发送HTTP请求了.有一个简单的工具可以用,Simplified HTTP request client,可以比较方便的模拟 ...

  7. Spring集成Solr搜索引擎

    1.导入jar包<dependency><groupId>org.apache.solr</groupId><artifactId>solr-solrj ...

  8. POJ 2782

    #include <iostream> #include <algorithm> #define MAXN 100005 using namespace std; int _m ...

  9. C# 多线程六之Task(任务)三之任务工厂

    1.知识回顾,简要概述 前面两篇关于Task的随笔,C# 多线程五之Task(任务)一 和 C# 多线程六之Task(任务)二,介绍了关于Task的一些基本的用法,以及一些使用的要点,如果都看懂了,本 ...

  10. 字符、字符串和文本的处理之Char类型

    .Net Framework中处理字符和字符串的主要有以下这么几个类: (1).System.Char类 一基础字符串处理类 (2).System.String类 一处理不可变的字符串(一经创建,字符 ...