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的小例子——猜数字,文件如下:
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:页面上下文