JSP 内建对象

## out

out对象用来在JSP页面中输出有关内容。out是类javax.servlet.jsp.JspWriter的一个对象，能够把信息回送给客户端的浏览器。下面列出了out对象的一些常用方法。

下面利用out对象输出一个具有特殊效果的表格。该表格有两种底色，每隔一行换一种颜色，也就是说，奇数行一种颜色，偶数行一种颜色。源代码如下：

1. <%@ page contentType="text/html;charset=GBK" %>

2. <HTML>

3. <%!

4. int i=0;

5. %>

6. <HEAD>

7. <Title>Change color in table row</Title>

8. </HEAD>

9. <BODY>

10. <CENTER>

11. <Table width="80%">

12. <%

13. i=0;

14. while(i<6) {

15. i++;

16. if(i%2==0) {

17. out.println("<tr bgcolor=#00FF00>");

18. }else {

19. out.println("<tr bgcolor=#FF0000>");

20. }

21. %>

22. <TD>当前行数：<%=i%></TD>

23. </TR>

24. <%

25. }

26. %>

27. </Table>

28. </CENTER>

29. </BODY>

30. </HTML>

显示的效果如下图所示：

输出特殊的表格

需要注意的是，在程序中用到了page指令，主要是为了解决在JSP页面中不能正常显示中文的问题。另外，在程序中。用到了<% = i %>的语法格式，这是out.print()简写。

综合训练的例子：

out.jsp

1. <%@ page language="java" import="java.util.*" contentType="text/html;charset=GB2312" pageEncoding="GB2312"%>

2. <%

3. String path = request.getContextPath();

4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

5. %>

6.

7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

8. <html>

9. <head>

10. <base href="<%=basePath%>">

11.

12. <title>My JSP 'out.jsp' starting page</title>

13.

14. <meta http-equiv="pragma" content="no-cache">

15. <meta http-equiv="cache-control" content="no-cache">

16. <meta http-equiv="expires" content="0">

17. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

18. <meta http-equiv="description" content="This is my page">

19. <!--

20. <link rel="stylesheet" type="text/css" href="styles.css">

21. -->

22.

23. </head>

24.

25. <body>

26. <%

27. out.println("out对象应用实例：<br><hr>");

28. out.println("<br>out.println(boolean):");

29. out.println("true");

30. out.println("<br>out.println(char):");

31. out.println('a');

32. out.println("<br>out.println(char[]):");

33. out.println(new char[]{'a','b'});

34. out.println("<br>out.println(double):");

35. out.println(5.66d);

36. out.println("<br>out.println(float):");

37. out.println(36.8f);

38. out.println("<br>out.println(int):");

39. out.println(8);

40. out.println("<br>out.println(long):");

41. out.println(123456789123456L);

42. out.println("<br>out.println(object):");

43. out.println(new java.util.Date());

44. out.println("<br>out.println(string):");

45. out.println("Hello jsp");

46. out.println("<br>out.newLine():");

47. out.newLine();

48. out.println("<br>out.getBufferSize():");

49. out.println(out.getBufferSize());

50. out.println("<br>out.getRemaining():");

51. out.println(out.getRemaining());

52. out.println("<br>out.isAutoflush():");

53. out.println(out.isAutoFlush());

54. out.flush();

55. out.println("<br>调用out.flush()");

56. out.close();

57. out.println("这句不会打出来滴~~");

58.

59. %>

60. </body>

61. </html>

## request

request是类javax.servlet.HttpServletRequest的一个对象，当客户端请求一个JSP页面时，JSP容器进行处理后，由request对象进行封装。请求信息的内容包括请求的头信息、系统信息、请求的方式、请求的参数名称、参数值等，通常用得最多的是客户端请求的参数名称和参数值。下面列出了request对象常用的方法。

request对象常用的方法

下面是一个使用request对象获取用户提交的所有参数名称和参数值的例子。

HTML源代码如下：

1. <html>

2. <head>

3. <title>Test HTML</title>

4. </head>

5. <body>

6. <form action="params.jsp">

7. 请输入学员ID：<br>

8. <Input type="text" name="myid"><br>

9. 请输入学员name：<br>

10. <Input type="text" name="myname"><br>

11. 请选择学员性别：<br>

12. <Input type="radio" name="mysex" value="m" checked>男

13. <Input type="radio" name="mysex" value="f">女<br>

14. <Input type="submit" name="mysubmit">

15. <br><Input type="reset" value="重新填写"><br>

16. </form>

17. </body>

18. </html>

与之对应的JSP文件源代码如下：（下面代码单独放在一个表格框中）。

1. <%@page contentType="text/html;charset=GBK"%>

2. <%@page import="java.util.*"%>

3. <%

4. String current_param = "";

5. request.setCharacterEncoding("GBK"); //处理页面传递的中文问题

6. Enumeration params =request.getParameterNames();//得到所有的参数名称

7. while((params.hasMoreElements()) {

8. current_param =(String)params.nextElement();

9. out.println("Name：" + current_param + "<br>");

10. out.println("Values："+request.getParameter(current_param)+ "<br>");

11. }

12. %>

13.

JSP页面的显示效果如图3-5所示：

图获取客户提交的参数

## response

response对象是类javax.servlet.http.HttpServletResponse的一个对象。JSP会根据客户端的请求建立一个默认的response对象。这个对象封装了JSP产生的响应，然后被发送到客户端以响应客户的请求。下面列出了response对象常用的方法。

## session

session对象用来保存每个用户信息，以便跟踪每个用户的操作状态。其中，session信息保存在容器中，session的ID保存在客户机的cookie中。在许多服务器上，如果浏览器支持cookies，就直接使用cookies。但若不支持cookies，那么就会自动转化为URL-rewriting（重写URL，这个URL包含客户端的信息），session自动为每个流程提供了方便的存储信息的方法。下面列出了session对象常用的方法。

表3-5

举一个例子，在开始页面要求用户输入账户信息，验证合法后，若其它页面需要使用账户信息，就不需要用户再次输入，而可以从session对象中获取。对于session对象，常用的方法是setAttribute()、getAttribute()和removeAttribute()，分别可以对session中的对象进行存取和删除。利用session的特性，可以用它实现网上购物，如图所示：

图购物页面示例

下面是使用session对象实现简易购物车的例子。

首先，在session-1.jsp中，session对象使用属性“shop”和“price”保存了“主板”和“100”，源程序如下：

1. <%@ page contentType="text/html;charset=GBK" %>

2. <HTML>

3. <HEAD>

4. </HEAD>

5. <% // 初始化

6. If(session.getAttribute("flag")== null){

7. session.setAttribute("flag", "ok");

8. session.setAttribute("shop", "");

9. session.setAttribute("price", "");

10. }

11. session.setAttribute("shop", session.getAttribute("shop")+"主板，");

12. session.setAttribute("price", session.getAttribute("price")+"100，");

13. out.println(session.getAttribute("shop")+ "<br>");

14. out.println(session.getAttribute("price")+"<br>");

15. %>

16. <BODY>

17. <A href="session-2.jsp">session-2.jsp</A>

18. </BODY>

其页面显示效果如图所示。

图简易购物车

单击session-2.jsp链接，页面跳转到session-2.jsp。在此页面中，修改了session对象的属性值，其源程序如下：

1. <%@ page contentType="text/html;charset=GBK" %>

2. <HTML>

3. <HEAD>

4. </HEAD>

5. <%

6. session.setAttribute("shop",session.getAttribute("shop")+"硬盘，");

7. session.setAttribute("price",session.getAttribute("price")+"200，");

8. out.println(session.getAttribute("shop")+ "<br>");

9. out.println(session.getAttribute("price")+ "<br>");

10. %>

11. <BODY>

12. <A href="session-3.jsp">session-3.jsp</A>

13. </BODY>

14. </HTML>

15.

页面显示效果如图所示：

图简易购物车

## pageContext

pageContext对象被封装成javax.servlet.jsp.pageContext接口，它为JSP页面包装页面的上下文。管理对属于JSP中特殊可见部分中已命名对象的访问。它的创建与初始化都是由容器来完成的。JSP页面里可以直接使用pageContext对象的句柄。pageContext对象的getXXX()，setXXX()和findXXX()方法可以根据不同的对象范围，实现对这些对象的不同管理。下面列出了pageContext对象常用的方法。

表pageContext对象常用的方法

## application

application是使用范围最广的上下文状态。它允许JSP页面的servlet与包括在同一应用程序中的任何Web组件共享信息。application变量是对一个Web Application有效的全局变量，在保存一些全局有效的值（如保存用户共享的信息）时非常有用。一旦创建，除非服务器关闭，否则将一直保持下去。下面列出了application对象常用的方法。

表application对象常用的方法

有时候服务器需要管理整个应用参数，使得每个用户都能获得同样的参数值。JSP使用ServletContext对象，操作的方法和Session一样， 例如：

1. //设置一个应用变量

2. getServletContext().setAttribute(“Item”,ItemValue);

3. //得到item

4. Integer i=(Integer)getServletContext().getAttribute(“ItemName”);

Application从创建Bean开始，就能在任何使用相同Application的JSP文件中使用Bean。这个Bean存在于整个application生存周期内，任何在分享此application的JSP文件都能使用同一Bean。

## config

config对象被封装成javax.servlet.ServletConfig接口，它表示Servlet的配置。当一个Servlet初始化时，容器把某些信息通过此对象传递给这个Servlet。下面列出了config对象常用的方法。

表config对象常用的方法

方法 | 功能
getServletContext() | 返回执行者的Servlet上下文
getServletName() | 返回Servlet的名字
getInitParameter(String name) | 返回名字为name的初始参数的值
getInitParameterNames() | 返回这个JSP的所有的初始参数的名字

## page

page对象是java.lang.Object类的一个实例。它指定的是JSP实现类的实例。即，JSP本身。JSP实现类对象的一个句柄，只有在JSP页面的范围之内才是合法的。实际上就是我们设计的 .jsp 网页自己，这是默认的对象，如同 java 中的 this。

## exception

exception对象是java.lang.Throwable类的一个实例。它指的是运行时的异常。只有在错误页面（即，指令中有isErroePage=true的页面）才可以使用此对象。

主功能部分的程序如下：

1. <%--字符集设为“gb2312”，使动态页面支持中文--%>

2. <%@ page contentType=“text/html;charSet=gb2312”%>

3. <!--这个实例演示怎样使用一个在errorPage中定义的错误页面，这个JSP故意设置一个异常NullPointerException，然后调用错误页面( ErrorPage.jsp ）-->

4. <%--定义错误页面--%>

5. <%@ page errorPage =“ErrorPage.jsp”%>

6. <html>

7. <head></head>

8. <%! String str =null;%>

9. <body bgcolor = #ffffff><h2>调用一个值为null的String的方法会抛出一个异常…</h2>

10. <%--故意出错，抛出异常--%>

11. 字符串的长度

12. <%= str.length()%>

13. </body>

14. </html>