HttpServletResponse
来源:互联网 发布:金庸群侠传 武功数据 编辑:程序博客网 时间:2024/05/29 02:49
HttpServletResponse对象是用来操作HTTP请求中的响应部分(响应行、响应头、和响应正文)的,在客户端请求访问的时候,服务器在调用Service()方法之前会先创建request和reponse对象,前者封装了请求的消息,后者封装了服务器响应的消息,在执行玩srevice()方法后,服务器要在两个对象被销毁之前得到这两个对象中的信息,然后将其反馈给客户端,下面是HttpServletResponse对象中操作这些内容的常用方法
1、响应行
响应行中可以操作的内容只有一个状态码了(如200,404等),在这里可以使用setStatus(int s)方法来设置响应状态码
2、响应头
操作响应头的方法主要有两个:
①、sendRedirect(String location)请求重定向
②、setHeader(String name,String value)设置响应头的信息(是一个映射),比如可以设置以什么方式解码
下面是一个请求重定向(不是请求转发)的例子:
Servlet一:
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Test_Redirect extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("A:我找小明"); System.out.println("B:他不在这,我可以告诉你他在哪,你自己去找吧"); /*resp.setStatus(302);//设置状态码为302告诉客户端重新定向资源,方式一 resp.setHeader("location", "/Servlet/redirect1");*/ resp.sendRedirect("/Servlet/redirect1");//设置重定向地址,方式二 System.out.println("A:好的,我知道了"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doGet(req, resp); }}
Servlet二:
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Test_Redirect1 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("我是小明"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doGet(req, resp); }}
两个Servlet的xml配置:
<servlet> <servlet-name>redirect</servlet-name> <servlet-class>ServletDemo2.Test_Redirect</servlet-class></servlet><servlet-mapping> <servlet-name>redirect</servlet-name> <url-pattern>/redirect</url-pattern></servlet-mapping><servlet> <servlet-name>redirect1</servlet-name> <servlet-class>ServletDemo2.Test_Redirect1</servlet-class></servlet><servlet-mapping> <servlet-name>redirect1</servlet-name> <url-pattern>/redirect1</url-pattern></servlet-mapping>
输出结果为:
3、响应正文
响应正文包含着浏览器需要解析的内容,因此操作其主要有以下方法(以下方法均在其父类ServletResponse中):
①、getWriter() 字符输出流
②、getOutputStream() 字节输出流,返回一个ServletOutputStream对象, 该对象是用于将二进制数据发送到客户端的输出流
③、setCharacterEncoding(String charset) 告知服务器用什么方式编码解析
④、setContentType(String Type) 告知浏览器和服务器应该使用什么编码
下面是关于操作响应正文的具体例子
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Test_HttpServletResponse extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /*Tomcat服务器默认的编码为ISO-8859-1,不支持中文,应当告诉浏览器和服务器,使用UTF-8编码 方式一 resp.setCharacterEncoding("UTF-8");//告诉服务器使用什么编码解析文本 resp.setHeader("content-type", "text/html;charset=UTF-8");//设置响应消息头,告诉浏览器使用什么编码解析 */ //方式二 resp.setContentType("text/html;charset=UTF-8");//告知服务器使用什么解析文本,告知浏览器(客户端)使用什么编码 PrintWriter out = resp.getWriter();//得到字符输出流 out.write("你好,世界!");//向客户端浏览器响应文本 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}
以下为下载一张图片的例子
package ServletDemo2;import java.io.FileInputStream;import java.io.IOException;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 下载一张图片 * @author wushijia * */public class Download extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1、得到文件的绝对路径,并且通过该路径得到一个字节输入流 String path = this.getServletContext().getRealPath("/WEB-INF/classes/TomCat.png");//得到下载文件的绝对路径 FileInputStream fis = new FileInputStream(path); //2、创建字节输出流 ServletOutputStream sos = resp.getOutputStream(); //3、得到下载的文件名 String filename = path.substring(path.lastIndexOf("\\")+1);//得到的文件名为TomCat.png //4、设置文件编码 filename = URLEncoder.encode(filename, "UTF-8");//编码为UTF-8 //5、告知客户端(浏览器)要下载文件 resp.setHeader("content-disposition", "attachment;filename="+filename); resp.setHeader("content-type", "image/png");//文件类型 //6、输出 byte[] b = new byte[1024]; int len = 0; while((len=fis.read(b)) != -1){ sos.write(b, 0, len); } sos.close(); fis.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); }}
在以上的例子中,第4步的作用是将不安全的文件名改为UTF-8编码,即将文件名中的字母用他们本身替换,将"."、","、"_"、"-"、"*"用他们本身替换,将空格替换为"+",除了这些以外的字符,都是不安全字符,将它们替换为%xy,即16进制格式,其中xy是两个16进制数值
阅读全文
0 0
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- HttpServletResponse
- 微信|支付宝|银联支付(电脑和手机端区别)
- [LintCode]Sort Integers(C++)
- svn迁移出的项目中文乱码解决
- gdb 调试高级命令
- 事务注意事项
- HttpServletResponse
- 约瑟夫问题--双向循环链表的创建与删除
- 贪心算法poj 3617,3069,3253
- sem的关键词怎么拓展、分组、导入客户端,世上最全为你解决!!(网络营销sem)
- 操作系统知识整理3:进程管理
- 剑指offer-40.数组中只出现一次的数字
- Servlet过滤器Filter和监听器
- Caffe-windows入门学习,编译、训练、测试详细教程
- 关于WdatePicker控件的onchange事件如何使用————2017/8/5