• JSP教程:1天玩转JSP网站开发技术
  • JSP是什么?
  • JSP的特点与工作流程
  • JSP与ASP、PHP的比较
  • JSP页面的组成及其元素
  • JSP开发环境搭建(Tomcat的安装和配置)
  • 第一个JSP程序
  • JSP注释(多种注释详解)
  • JSP声明:变量、方法和类的声明
  • JSP中嵌入Java代码
  • JSP表达式
  • JSP开发模式(四种模式)
  • JSP常见错误以及解决方案
  • JSP指令详解(三大指令)
  • JSP page指令
  • JSP include指令
  • JSP指令应用实例
  • JSP动作
  • JSP include动作
  • JSP param动作
  • JSP forward动作
  • JSP plugin动作
  • JSP useBean动作
  • JSP setProperty动作
  • JSP getProperty动作
  • JSP application 对象
  • JSP out对象:向客户端输出数据
  • JSP request对象:获取客户端的请求信息
  • JSP response对象:响应客户端的请求并向客户端输出信息
  • JSP session对象
  • JSP pageContext对象
  • JSP page对象
  • JSP config对象
  • JSP获取并显示字符串长度
  • 什么是JavaBean?
  • JavaBean工具
  • JavaBean规范
  • JavaBean的属性(Simple、Indexed、Bound、Constrained)
  • JavaBean的Scope属性
  • JavaBean事件
  • JavaBean实现用户登录界面
  • Servlet是什么?
  • Servlet的生命周期
  • Servlet的类和方法
  • Servlet客户端跳转
  • EL是什么?(详解)
  • JSP EL表达式的基本语法及运算符的优先级(一览表)
  • JSP EL 点(.)运算符和下标([])运算符
  • JSP EL算数运算符
  • JSP EL关系运算符
  • JSP EL逻辑运算符
  • JSP EL条件运算符
  • JSP EL empty空运算符
  • EL表达式中的常量与变量
  • EL表达式的保留字
  • EL表达式的内置对象及其作用域
  • 使用EL表达式访问JavaBean
  • 使用EL表达式访问集合
  • EL表达式内置对象param和paramValues
  • EL表达式内置对象cookie
  • EL表达式内置对象initParam
  • JDBC 的定义及产品组件
  • 建立JDBC连接
  • 利用JDBC发送SQL语句
  • JDBC API ResultSet接口(记录集接口)
  • JDBC RowSet接口
  • JDBC BaseRowSet类和CachedRowSet类
  • 填充CachedRowSet对象记录集(三种方法)
  • File类(在JSP中的使用)详解
  • 使用字节流读/写文件
  • RandomAccessFile类
  • JSP文件上传
  • XML是什么?
  • XML的基本语法
  • JDK 中的 XML API
  • DOM解析XML
  • SAX解析XML
  • DOM4j解析XML
  • response 对象和 request 对象相对应,用于响应客户请求,向客户端输出信息。response 是 Http

    ServletResponse 的实例,封装了 JSP 产生的响应客户端请求的有关信息,如回应的 Header,回应本体(HTML 的内容)以及服务器端的状态码等信息,提供给客户端。请求的信 息可以是各种数据类型的,甚至是文件。

    response 对象的常用方法如表 1 所示。下面介绍 response 对象的应用。

    方法 说明
    void addCookie(Cookie cookie) 添加 Cookie 的方法
    void addHeader(String name,String value) 添加 HTTP 文件指定的头信息
    String encodeURL(String url) 将 URL 予以编码,回传包含 Session ID 的 URL
    void flushBuffer() 强制把当前缓冲区内容发送到客户端
    int getBufferSize() 返回响应所使用的实际缓冲区大小,如果没使用缓冲区, 则该方法返回 0
    void set BufferSize(int size) 为响应的主体设置首选的缓冲区大小
    boolean isCommitted() 一个 boolean,表示响应是否已经提交;提交的响应已经 写入状态码和报头
    void reset() 清除缓冲区存在的任何数据,并清除状态码和报头
    ServletOutputStream getOutputStream() 返回到客户端的输出流对象
    void sendError(int xc[,String msg]) 向客户端发送错误信息
    void sengRedirect(java.lang.String location) 把响应发送到另一个位置进行处理
    void setCotentType(String type) 设置响应的 MIME 类型
    void setHeader(String name,String value) 设置指定名字的 HTTP 文件头信息
    void setCotentLength(int len) 设置响应头的长度

    动态设置响应的类型

    利用 page 指令设置发送到客户端文档响应报头的 MIME 类型和字符编码,如

    1. <%@ page contentType="text/html;charset=utf-8"%>

    ,它表示当用户访问该页面时,JSP 引擎将按照 contentType 的属性值即 text/html(网页)做出反应。

    如果要动态改变这个属性值来响应客户,就需要使用 response 对象的 setContentType(String s) 方法。语法格式如下:

    1. response.setContentType("MIME");

    MIME 可以为 text/html(网页)、text/plain(文本)、application/x-msexcel(Excel 文件)、application/msword(Word 文件)。

    【例1】通过 response 对象动态设置响应类型。

    使用 response 对象的 setContentType(String s) 方法动态设置响应的类型,代码如下:

    1. <%@ page contentType="text/html;charset=utf-8" %>
    2. <html>
    3. <head>
    4. <title>
    5. response 对象动态设置响应类型
    6. </title>
    7. </head>
    8. <body>
    9. <h2> response 对象动态设置响应类型 </h2>
    10. <p>请选择将当前页面保存的类型
    11. <form action=" " method="post" name=frm>
    12. <input type="submit" value="保存为word" name="submit1">
    13. <input type="submit" value="保存为Excel" name="submit2">
    14. </form>
    15. <%
    16. if(request.getParameter("submit1")!=null)
    17. response.setContentType("application/msword;charset=GB2312");
    18. if(request.getParameter("submit2")!=null)
    19. response.setContentType("application/x-msexcel;charset=GB2312");
    20. %>
    21. </body>
    22. </html>

    运行结果如图 1 所示。

    response对象动态设置响应类型
    图1 response对象动态设置响应类型

    重定向网页

    在某些情况下,当响应客户时,需要将客户引导至另一个页面,例如,当客户输入正确的登录信息时,就需要被引导到登录成功页面,否则被引导到错误显示页面。此时,可以使用 response 的 sendRedirect(URL) 方法将客户请求重定向到一个不同的页面。例如,将客户请求重定向到 login_ok.jsp 页面的代码如下:

    1. Response.sendRedirect("login_ok.jsp");

    在 JSP 页面中,使用 response 对象中的 sendError() 方法指明一个错误状态。该方法接收一个错误以及一条可选的错误消息,该消息将内容主体返回给客户。

    例如,代码 response.sendError(500”请求页面存在错误”) 将客户请求重定向到一个在内容主体上包含出错消息的出错页面。

    【例2】通过 response 对象重定向网页。使用 response 对象的相关方法重定向网页,完成一个用户登录。

    在页面 3-10.jsp 中输入用户名和密码,如图 2(a) 所示,提交给页面 3-10-deal.jsp 进行处理,如果检测到用户名是 Admin,密码是 123,则重定同到成功登录页面 3-10-ok.jsp,如图 2(b) 所示;否则向客户端发送错误信息。

    通过response对象重定向网页(a)

    通过response对象重定向网页(b)

    图2 通过response对象重定向网页

    3-10.jsp 代码如下:

    1. <%@ page contentType="text/html;charset=utf-8" %>
    2. <html>
    3. <head>
    4. <title>
    5. 用户登录
    6. </title>
    7. </head>
    8. <body>
    9. <form name="forml" method="post" action="3-10-deal.jsp">
    10. 用户名:<input name="user" type="text" /> <br>
    11. 密&nbsp;&nbsp;&nbsp;码:<input name="pwd" type="text" /> <br>
    12. <input type="submit" value="提交" />
    13. <input type="reset" value="重置" />
    14. </form>
    15. </body>
    16. </html>

    3-10-deal.jsp 代码如下:

    1. <%@ page contentType="text/html;charset=utf-8" %>
    2. <html>
    3. <head>
    4. <title>
    5. 处理结果
    6. </title>
    7. </head>
    8. <body>
    9. <%
    10. request.setCharacterEncoding("utf-8");
    11. String user=request.getParameter("user");
    12. String pwd=request.getParameter("pwd");
    13. if(user.equals("Admin")&&pwd.equals("123"))
    14. {
    15. response.sendRedirect("3-10-ok.jsp");
    16. }
    17. else
    18. {
    19. response.sendError(500,"请输入正确的用户和密码!");
    20. }
    21. %>
    22. </body>
    23. </html>

    3-10-ok.jsp 代码如下:

    1. <%@ page contentType="text/html;charset=utf-8" %>
    2. <html>
    3. <head>
    4. <title>
    5. 处理结果
    6. </title>
    7. </head>
    8. <body>
    9. 成功登录!
    10. </body>
    11. </html>

    设置页面自动刷新以及定时跳转

    response 对象的 setHeader() 方法用于设置指定名字的 HTTP 文件头的值,如果该值已经存在,则新值会覆盖旧值。最常用的一个头信息是 refresh,用于设置刷新或者跳转。

    (1) 实现页面一秒钟刷新一次,设置语句如下:

    1. response.setHeader("refresh","1");

    (2) 实现页面定时跳转,如 2 秒钟后自动跳转到URL所指的页面,设置语句如下:

    response.setHeader(“refresh”,”2:URL=页面名称”);

    【例3】用 response 对象自动刷新客户页面,实现秒表的功能,代码如下:

    1. <%@ page contentType="text/html;charset=utf-8" %>
    2. <%@ page import="java.util.*" %>
    3. <html>
    4. <head>
    5. <title>
    6. response 对象设置页面自动刷新
    7. </title>
    8. </head>
    9. <body>
    10. <h2> response 对象设置页面自动刷新</h2>
    11. <font size="5" color=blue> 数字时钟> </font> <br> <br>
    12. <font size="3" color=blue> 现在时刻:<br>
    13. <%
    14. response.setHeader("refresh","1");
    15. int y,m,d,h,mm,s;
    16. Calendar c=Calendar.getInstance();
    17. y=c.get(Calendar.YEAR); //年
    18. m=c.get(Calendar.MONTH)+1; //月
    19. d=c.get(Calendar.DAY_OF_MONTH); //日
    20. h=c.get(Calendar.HOUR); //时(HOUR:十二小时制:HOUR_OF_DAY:十二四小时制)
    21. mm=c.get(Calendar.MINUTE); //分
    22. s=c.get(Calendar.SECOND); //分
    23. out.println(y+"年"+m+"月"+d+"日"+h+"时"+mm+"分"+s+"秒");
    24. %>
    25. </font>
    26. </body>
    27. </html>

    运行结果如图 3 所示。

    response对象自动刷新客户页面
    图3 response对象自动刷新客户页面

    配置缓冲区

    缓冲可以更加有效地在服务器与客户之间传输内容。HttpServletResponse 对象为支持 jspWriter 对象而启用了缓冲区配置。

    【例4】用 response 对象配置缓冲区。使用 response 对象的相关方法输出缓冲区的大小,并测试强制将缓冲区的内容发送给客户,代码如下:

    1. <%@ page contentType="text/html; charset=utf-8" %>
    2. <html>
    3. <head>
    4. <title>
    5. response 对象配置缓冲区
    6. </title>
    7. </head>
    8. <body>
    9. <h2>response对象配置缓冲区</h2>
    10. <%
    11. out.print("缓冲区大小:"+response.getBufferSize()+"<br>");
    12. out.print("缓冲区内容强制提交前"+"<br>");
    13. out.print("输出内容是否提交:"+response.isCommitted()+"<br>");
    14. response.flushBuffer();
    15. out.print("缓冲区内容强制提交后<br>");
    16. out.print("输出内容是否提交:"+response.isCommitted()+"<br>");
    17. %>
    18. </body>
    19. </html>

    运行结果如图 4 所示。

    response对象配置缓冲区
    图4 response对象配置缓冲区