JSP内置对象

HTTP协议与JSP

我们在浏览器中访问的网页,都是基于HTTP协议的。回顾我们的第一个JSP程序——Hello World,在浏览器输入localhost:8080/Hello.jsp,我们就可以看到Hello world显示在浏览器中。这背后是什么起了作用?

使用浏览器从网站获取HTML页面时,用到的是我们十分耳熟的、听起来非常专业的协议——HTTP协议(超文本传输协议),参加博文HTTP协议概述

HTTP协议规定了信息在internet上的传输方法,特别是规定了浏览器与服务器的交互方法和传递信息方式。常用的方法有GET、POST等。HTTP协议中一个非常重要的内容是HTTP报文,报文是在HTTP 应用程序之间发送的数据块,是传递信息的载体。详细内容参见:http报文详解

我们打开一个网页的过程,简单的说包括请求和响应两个阶段。

首先浏览器向目标主机打开一个连接;并对相应的资源发出请求报文。服务器收到请求后向客户端发出响应报文,所以HTTP协议的核心就是请求和响应。

现在回到JSP的内容上,上篇博文JSP基本语法,本文为大家介绍JSP的内置对象。在JSP页面中有些对象不用什么就可以在java程序片和表达式部分使用,这就是JSP的内置对象。

jsp包含9种内置对象:request、response、out、page、session等。其中request、response分别代表请求和响应对象,是较为重要的的两个。这两个对象提供了服务器和浏览器通信方法的控制。如果有HTTP协议的基础,你一看字面意思就能明白这两个对象的作用,以及一些常用的方法,快速掌握JSP也是很简单的。HTTP协议的知识在web编程中非常重要。

《HTTP权威指南》完整文字版下载地址http://pan.baidu.com/s/1bnz1dMn

1.request:请求对象

该对象封装了用户提交的信息,通过调用该对象想相应的方法可以获取封装的信息。其主要方法如下:

request.getParameterNames(); //Enumeration<String>
request.getParameter(String name);//String
request.getHeader(Sring name); //String
request.getHeadersNames(); //Enumeration<String>
request.getRequestDispatcher("/somePage.jsp").forward(request, response); 
//请求转发

获取请求头

Enumeration<String> headernames =request.getHeaderNames();
while(headernames.hasMoreElements()){
  String headername=headernames.nextElement();
  System.out.print(headername+": ");
  System.out.println(request.getHeader(headername));                        
}

获取post数据,request.getParameter(String s)将失效

StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(
request.getInputStream()));
String s = "";
while ((s = br.readLine()) != null) {
  sb.append(s);
}
System.out.println(sb.toString());

解决中文乱码

//post方式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding( "utf-8" );
//get方式
String string = request.getParamers("");
String = new String(string.getBytes("ISO8859-1","utf-8"));

2.response:响应对象

该对象对客户的请求作出响应,向客户端发送数据。

response.sendRedirect("index.jsp"); //重定向
response.setContenType(String s);
response.addHeader(String name,String value);
response.addCookie(Cookie c);

一个典型的response的HTTP响应报文头

HTTP/1.0 200OK 
Date: Mon,31Dec200104:25:57GMT 
Server: Apache/1.3.14(Unix) 
Content-type: text/html 
Last-modified: Tue,17Apr200106:46:28GMT 
Content-length: 39725426

关于报文的详细内容,参加HTTP报文详解

3.session:会话对象

Tomcat服务器可以使用session记录有关连接的信息。这个session对象有一个String类型的ID,当客户端请求服务器时,服务器会将这个ID号发送给客户端,存放在客户端的Cookie中。

生命周期:客户端向服务器发送第一个请求,服务器创建一个Session对象,到关闭浏览器销毁(近似这么理解)。

session.getID(); //String
session.setAttribute(String key,Object obj);
session.getAttribute(String key); //Object
session.isNew();

session在web开发中特别重要,是解决http协议无状态问题的服务端方案,它能让客户端和服务端一系列交互动作变成一个完整的事务,能使网站变成一个真正意义上的软件。我这里有个关于session的小例子——猜数字,文件如下:

猜数字.rar

4.application :应用程序对象

服务器启动后就产生了这个application对象,所有用户共享这个application对象。直到服务器关闭。

application.setAttribute(String key,Object obj);
application.getAttribute(String key); //Object

5.cookie:客户端对象

cookie是web站点保存在用户硬盘上的一段文本,以“键值对”的方式记录。

向客户端发送cookie

Cookie c=new Cookie("username","guang"); 
response.addCookie(c);

读取保存在客户端的cookie

Cookie cookies[]=request.getCookies(); 
for(Cookie c:cookies){ 
    if("username".equals(c.getName())){ 
        out.println(C.getValue()); 
    } 
} 

设置cookie的有效时间

Cookie c=new Cookie("username","tom"); 
c.setMaxAge(3600);//3600秒

 

6.out:输出对象

out.println(); 
out.newLine(); 
out.close(); 

7.config:配置对象

8.page:页面对象

9.pageContext:页面上下文

posted @ 2015-08-07 17:01  klguang  阅读(1933)  评论(2编辑  收藏  举报