Servlet的核心职责是根据客户端的请求来生成动态响应。ServletResponse接口的主要方法有setContentType(String type),setCharacaterEncoding(String charset)等等。
一、编码类型
MIME(Multipurpose Internet Mail Extensions)多媒体互联网邮件扩展,被加入到HTTP协议中,附加在文档之前的MIME数据类型信息来标识数据类型。HttpServletResponse中响应正文的默认MIME类型为text/html,Web浏览器使用MIME类型来识别非HTML文档,并决定如何显示该文档内的数据。MIME类型不仅可以和插件(plug-in)结合使用,还能和外部程序结合使用,Servelt可以向浏览器返回非HTML文件,比如Adobe PDF和Microsoft word,需要将response对象中的header的content类型设置为“application/pdf”或“application/msword”,即response.setContentType("MIME类型"),使用正确的MIME类型能够保证这些非HTML文件被正确的插件或者外部程序处理显示。
二、流操作
Servlet支持两种输入/输出流,一是字符输入/输入流,ServletResponse的getWrite()方法返回一个PrintWriter()对象,Servlet可以利用PrintWriter来输出字符流形式的正文数据。另一种是字节输入/输出流,ServletResponse的getOutputStream()方法返回一个ServletOutputStream对象,Servlet可以利用ServletOutputStream来输出二进制的正文数据。为了提高输出数据的效率,ServletOutputStream和PrintWrite先把数据写到缓冲区中,当缓冲区内的数据被提交给客户端后,ServletResponse的isCommitted()方法返回true。
三、重定向
ServletResponse接口还提供了一个重要方法sendRedirect(),它将当前请求定位到其它Web组件上,这个组件甚至可以是其他主机上的Web组件。在重定向之前,Servlet可以对当前的请求或者响应对象用过调用SetAttribute方法来添加属性信息。重定向相当于通知客户端重新发起一个新的请求,因此重定向后在浏览器地址栏上会出现页面的URL。需要注意的是,在调用sendRedirect()方法前不允许任何信息输出到客户端,因为Web容器在Servlet组件已经有信息输出到客户端的情况下,是不允许进行重定向的。