内置对象

发表时间:2017-05-15 16:13:57 浏览量( 24 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、复习

我们先回顾一下,我们这个网络访问的过程是怎样的?

1、http协议特点。

超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。q超文本传输协议 q 无状态协议 q 用于通过 Internet 发送请求消息和响应消息 q 使用端口接收和发送消息,默认为80端口HTTP是基于客户/服务器模式且是面向连接的,HTTP能够传送任意类型数据对象。HTTP连接是一种一次性连接,每次连接只处理一个请求,HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态,

2、http消息头

我们平时上网感觉就是输入网址,然后从服务器下载网页显示就可以了,事实这个过程非常复杂,需要传输的内容也非常多,在一个每一次访问都是一个请求(request),服务器对这个请求都会做出应答(response),在这个过程中传输的内容都是根据http的协议封装到http的消息头中的。http的消息头有其固定个格式规范,从这个消息头里面我们可以得到很多信息,虽然大部分信息对普通用户而言都是无关重要的,但是对我们程序员来说可能是非常有用的。消息头的内容都已经封装到jsp的内置对象里了,所以我们并不需要自己手动的去解析它,这里我们只需要简单的理解就可以了。

二、内置对象

qJSP 隐式对象是 Web 容器加载的一组类 q它不像一般的Java对象那样用”new”去获取实例,而是可以直接在JSP页面使用的对象  q隐式对象的名称是 JSP 的保留字 qJSP 使用 Java 定义的隐式对象来访问网页的动态内容。

事实上我们已经使用过jsp的隐式对象了,比如out对象,不是多有的对象在使用前都必须先new出来吗,为什么这些对象不需要呢,你可以再去查看jsp转译后的java文件,事实这个java文件不是一个普通的java文件,它已经帮助我们构造了很多很有用的对象了,所有这些对象我们并不需要自己手动的去new出来,就可以直接使用了。

常用的隐式对象有:

输入/输出对象:request,response,out。

作用域通信对象:session,application,pageContext。

Servlet 对象:page,config。

错误对象:exception。

上面这些对象我们以后都会学习到,这里先讲解一下exception、request和response三个内置对象。

1、exception对象

qexception对象用于处理 JSP 页面中的错误 qexception 对象用于访问执行 JSP 的过程中引发的异常 qexception 对象是 java.lang.Throwable 类的实例。

先要修改page指令为isErrorPage="true"。

然后就可以在页面上面直接打印了。

<body>

   <%=exception %>

  </body>

2、request对象

request是一个非常重要的对象,它会把用户的请求操作封装在这个对象中。http消息头中一些很有用的信息都可以取得,具体方法如下:

String encodString = request.getCharacterEncoding();//请求编码
int contentLength = request.getContentLength();//请求内容的长度,get提交是-1,post则有长度
String ContentType = request.getContentType();//请求内容的类型,get提交是null,post则为application/x-www-form-urlencoded
String contextPath = request.getContextPath();//页面传来的请求路径,form中的action
String LocalAddr = request.getLocalAddr();
String LocalName = request.getLocalName();
int LocalPort = request.getLocalPort();
String RemoteAddr = request.getRemoteAddr();// 获得客户端的IP地址
String RemoteHost = request.getRemoteHost();// 获得客户端电脑的名字,若失败,则返回客户端电脑的IP地址
String RemoteUser = request.getRemoteUser();
String Method = request.getMethod();//页面提交的方法
String QueryString = request.getQueryString();//请求字符串,get提交则有,post为null
String RequestURI = request.getRequestURI();// 获得发出请求字符串的客户端地址
String ServerName = request.getServerName();// 获得服务器的名字
int ServerPort = request.getServerPort();// 获得服务器的端口号
String ServletPath = request.getServletPath();// 获得客户端所请求的脚本文件的文件路径
System.out.println("编码:" + encodString + ";请求内容的长度:" + contentLength
+ ";请求类型:" + ContentType + ";请求路径:" + contextPath);
System.out.println("本地地址:" + LocalAddr + ";本地名称:" + LocalName
+ ";本地端口:" + LocalPort);
System.out.println("远程地址:" + RemoteAddr + ";远程用户名:" + RemoteUser
+ ";远程端口:" + RemoteHost);
System.out.println("请求方法:" + Method);
System.out.println("请求字符串:" + QueryString + ";请求url:" + RequestURI);
System.out.println("服务名称:" + ServerName + ";服务端口:" + ServerPort);
System.out.println("路径:" + ServletPath);
String user_agent = request.getHeader("User-agent");// 返回客户端浏览器的版本号、类型
System.out.println("user_agent>>" + user_agent);
// 返回所有request header的名字,结果集是一个Enumeration(枚举)类的实例
System.out.println("浏览器和客户端的信息");
Enumeration enumeration = request.getHeaderNames();
while (enumeration.hasMoreElements()) {
   String elent = (String) enumeration.nextElement();
   System.out.println(elent + ">>" + request.getHeader(elent));
}

另外还有三个很有用的方法是

request.getParameter("uanme");
request.setAttribute("name", "value");
request.getAttribute("name");