一、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. sql解决避免除以零的错误

    在实际项目中,我们可能会遇到求百分比,比值等带除法的sql语句.这时,我们也许会遇到分母为零的情况.下面给出我总结的一些方法: 1. 用NULLIF函数: 首先说一下NULLIF函数的语法: NULL ...

  2. ASP.NET CORE之上传文件夹

    最近闲余时间在做一个仿百度网盘的项目,其中就有一个上传文件夹的功能.查了下网上好像对这个问题的描述比较少,所以在此记录一下. 1.网上找来找去发现webkitdirectory这个东西,H5的一个新的 ...

  3. Python黑客——快速编写信息收集器

    i春秋作家:大木瓜 环境:Python 3模块:LxmlRequestBeautifulsoup开始:首先看一下目标站: http://gaokao.chsi.com.cn/gkxx/zszcgd/d ...

  4. Spring boot中使用log4j

    我们知道,Spring Boot中默认日志工具为logback,但是对于习惯了log4j的开发者,Spring Boot依然可以很好的支持,只是需要做一些小小的配置功能.Spring Boot使用lo ...

  5. DevOps - CI - Jenkins

    Jenkins 开源软件项目,其前身为Hudson,旨在提供一个基于Java开发的开放易用的持续集成工具,用于监控持续重复的工作. 主要用于自动而持续地构建/测试软件项目:监控外部调用执行的工作. 官 ...

  6. postgresql-hdd,ssd,效率

    既有ssd又有hdd是将数据存储到ssd还是将索引存储到ssd的效率更高呢? 一种说法是索引是随机扫描,将索引放入ssd效率会增高, 一种说法是将数据放入ssd效率更高   最好的情况是将数据和索引都 ...

  7. Cesium Vue开发环境搭建

    最近被问到如何在 vuejs 中集成 cesium,首先想到的官网应该有教程.官网有专门讲 Cesium and Webpack(有坑),按照官网的说明,动手建了一个Demo,在这记录下踩坑过程. 一 ...

  8. 解决修改css或js文件,浏览器缓存更新问题。

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从 ...

  9. Vue2.5开发去哪儿网App 第四章笔记 下

    1.解决非父子组件之间的传值问题 非父子组件传值(Bus/总线/发布订阅模式/观察者模式) 给 Vue类上挂在一个属性,然后创建vue实例时,实例就拥有了这个属性 Vue.prototype.bus ...

  10. Form表单中不同的按钮进行不同的跳转

    本文参考:http://my.oschina.net/sallency/blog/300568 在开发工作共我们往往会遇到一个表单需要包含多个action不同的提交动作,这时候就不能在使用submit ...