JSP的response隐含对象在转换为Servlet之后,对应于javax.servlet.http.HttpServletResponse类 型对象,
HttpServletResponse对象是有关于对客户端请求之回应,您可以利用它来设定一些要回应的讯息,例如标题讯息、回应状态码等,必要的话,
您也可以由HttpServletResponse取得PrintWriter对象,由它来回应客户端,以获得PrintWriter的好处,而不是使用
JSP默认的out(JSPWriter)来应答客户端。 首先介绍几个 response(HttpServletResponse)设定标头(Header)的方法,要使用这些标头,您必须对HTTP协议先有些了解,这请自行查阅相关书籍,这边假设您已经了解标头的意义。 下面是如何设定"Refresh"标头,在指定的时间后刷新网页,或载入指定的网页:
<%! int reloadCount = 0; %> setHeader()方法是一个通用的标头设定方法,您可以用它来设定任何“名称/值”的标头,上面这个例子会每三秒钟自动载入网页,您可以由网页上不 断递增的数字看到重新载入的次数,如果标头设定的是一个整数值,则您也可以直接使用setIntHeader(),它是专门用来设定整数值标头的版本,例 如: response.setIntHeader("Refresh", 3);
使用setHeader()的好处是,您可以像以下这么设定标头: response.setHeader("Refresh",
"3; URL=http://caterpillar.onlyfun.net/"); 上面的设定会在载入网页,在3秒之后重新载入指定的网页;注意标头的设定必须在送出任何网页本体(Body)之前设定好,如果网页本体(例如HTML内容)已经送出,则设定标头的动作是无用的。 如果您想要浏览器不要快取网页,由于HTTP/1.0与HTTP1.1的设定方式不同,您可以使用先判定协定种类以设定不同的标头,例如:
<% setDateHeader()是setHeader()的Date设定版本,第二个参数是设定Date的Long数值,0表示GMT 1970/1/1 00:00。 setHeader()、setIntHeader()与setDateHeader()方法会直接覆盖标头设定,如果您要对同一个标头进行多值设定,可以使用add开头的方法,例如:
<%@page contentType="text/html;charset=Big5"%> 这个例子中先设定标头Refresh为3,然后加入URL信息,新的信息并不会覆盖之前的标头设定,其作用相当于: response.setHeader("Refresh",
"3; URL=http://caterpillar.onlyfun.net/"); 同样的,以add为开头来设定标头的方法也有Int与Date版本。 response(HttpServletResponse)的setStatus()方法是用来设定回应的状态码,例如404 Not Found,HttpServletResponse类中提供了一些助忆常量设定,例如SC_NOT_FOUND就是表示404状态码(您可以在 Servlet API文件中查询相关的助忆常量),使用setStatus()必须自行处理回应方式,如果是错误相关网页,您可以使用sendError()方法,这个方法会根据服务器的默认错误网页回报方式显示错误讯息,例如:
<%@page contentType="text/html;charset=Big5"%> 对Tomcat来说,会显示以下的讯息: HTTP Status 404 - 找不到文件
type Status report message 找不到文件 description The requested resource (找不到文件) is not available. ..... 使用setStatus()必须自行处理回应方式,下面是一个例子,它可以让浏览器直接导向至指定的网页:
<% 事实上,上面的程序只要使用sendRedirect()方法就可以了,例如:
<% response是HttpServletResponse类型的对象,在Servlet的实现中,是从 HttpServletResponse对象取得PrintWriter对象,由它来写出回应至服务器的本体信息,在JSP中也可以取得 PrintWriter对象,例如您可以用PrintWriter来显示异常的堆追踪:
<%@page contentType="text/html;charset=Big5" |