一、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. .NET MVC 学习笔记(三)— MVC 数据显示

    . NET MVC 学习笔记(三)—— MVC 数据显示 在目前做的项目中,用的最多的数据展示控件就是table展示(说不是的请走开,不是一路人),以下详细阐述下table的使用方法. 先看效果: 上 ...

  2. UWP 多语言的三个概念

    首先了解一下 RFC4646 和 BCP-47 是什么东西: RFC4646 The name is a combination of an ISO 639 two-letter lowercase ...

  3. BZOJ 5281--[Usaco2018 Open]Talent Show(分数规划&单调队列&DP)

    5281: [Usaco2018 Open]Talent Show Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 79  Solved: 58[Sub ...

  4. jQuery基础(2)

    一.jQuery的属性操作 jQuery的属性操作分为四部分: html标签属性操作:是对html文档中的标签属性进行读取,设置和移除操作.比如attr().removeAttr(): DOM属性操作 ...

  5. 带你走进二进制-一次APT攻击分析

    原文:https://osandamalith.com/2017/06/04/apt-attack-in-bangladesh/ 由prison翻译整理,首发i春秋   引言;   这是一次来自遥远国 ...

  6. Java - 集成开发环境Eclipse的使用方法和技巧

    00 - Eclipse教程 Eclipse 教程 01 - Eclipse设置编译和运行的环境 建议编译和运行的版本保持一致,否则请特别注意: 低编译,高运行 ---> 可行. 高编译,低运行 ...

  7. 安装rlwrap方便sqlplus使用

    rlwrap包 这是一个为方便使用SQL*PLUS的技巧,为了能像在DOS命令窗口中那样运行SQL*Plus,使用向上.向下键来跳回之前已经执行过的SQL语句. 需要在Linux上安装rlwrap包, ...

  8. TakePhoto实现拍照得到图片和从相册得到图片

    在学郭霖大神的第一行代码的时候,学到利用相机拍照和从本地相册取照片的那一小节的时候,代码写出来但是出了很多问题,APP老是崩溃,一番百度最终还是没有找到解决办法 无奈只能用别人现成的轮子了,然后就发现 ...

  9. Yii2+Swagger搭建RESTful风格的API项目

    在现有的Advanced Template上搭建RESTful API项目的步骤: 本案例前提说明: 本例中不使用\yii\rest\ActiveController自动创建的API,而是自定义一个A ...

  10. Nginx 简易教程

    Nginx 本项目是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx. demos 目录中的示例模拟了工作中的一些常用实战场景,并且都可以通过脚本一键式启动,让您可以快速看到演示效果. ...