Response实例
Response部分方法介绍及实例
客户端浏览器每访问一次web服务器的页面都会提交一次请求,与request对象对应的是response对象,该对象可以用来对客户的请求做出响应,向客户端发送数据。输出的数据可以是各种数据类型,甚至是文件,这可以通过page指令的contentType属性或是response的setContentType()方法来设置。
工具:Myeclipse
一、JSP实现
实例1 页面重定向
在Myeclipse中新建web project,在WebRoot中新建sendRedirectExample1.jsp,发布到Tomcat,代码如下:
<%@ page contentType="text/html;charset=gb2312"%> <html> <body> <%//页面重定向程序片 String url; url=request.getParameter("goaddress"); if(url!=null) response.sendRedirect(url); %> <form name="form1" action="sendRedirectExample1.jsp" method="post" > 页面重定向: <select name="goaddress" onchange="javascript:form1.submit()"> <option value="">========请选择========</option> <option value="http://www.hnwlw.net">湖南省物流公共信息平台</option> <option value="http://www.56edu.com">湖南现代物流职业技术学院</option> <option value="http://www.hnii.gov.cn">湖南省信息化工作办公室</option> <option value="http://www.temco.com.cn">天工远科信息技术有限公司</option> </select> </form> </body> </html>
运行结果后,可以重新选择某个页面并跳转。
实例2 定时刷新页面
在WebRoot中新建refreshExamples2.jsp,代码如下:
<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.util.Date,java.text.SimpleDateFormat"%> <html> <head> <title>定时刷新页面</title> </head> <body> <%//设置刷新页面的时间,每隔1秒钟刷新一次 response.setHeader("refresh","1"); %> 当前的系统时间是: <%//输出当前最新的时间 Date thisDay=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy'年'MM'月'dd'日' hh'时'mm'分'ss'秒'"); out.print(sdf.format(thisDay)); %> </body> </html>
运行结果如下:
二、Servlet实现
实例3 使用PrintWriter流向客户端浏览器输出中文数据
在src下新建包yqq.request.study(此步骤可省略),在包中新建Servlet,取名ResponseDemo01,代码如下:
package yqq.request.study; import java.io.IOException; import java.io.OutputStream; 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 ResponseDemo01 extends HttpServlet { private static final long serialVersionUID = 4312868947607181532L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { outputChineseByPrintWriter(response);//使用PrintWriter流输出中文 } /** * 使用PrintWriter流输出中文 * @param request * @param response * @throws IOException */ public void outputChineseByPrintWriter(HttpServletResponse response) throws IOException{ String data = "中国"; //通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码 //response.setHeader("content-type", "text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8");//设置将字符以"UTF-8"编码输出到客户端浏览器 /** * PrintWriter out = response.getWriter();这句代码必须放在response.setCharacterEncoding("UTF-8");之后 * 否则response.setCharacterEncoding("UTF-8")这行代码的设置将无效,浏览器显示的时候还是乱码 */ PrintWriter out = response.getWriter();//获取PrintWriter输出流 /** * 多学一招:使用HTML语言里面的<meta>标签来控制浏览器行为,模拟通过设置响应头控制浏览器行为 * out.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'/>"); * 等同于response.setHeader("content-type", "text/html;charset=UTF-8"); */ out.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'/>"); out.write(data);//使用PrintWriter流向客户端输出字符 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
运行结果如下:
实例4 使用Response实现中文文件下载
代码如下,需要注意的是 getRealPath("/images/测试测试.jpg")这个地方,我是在项目javaweb的文件夹下,创建images文件夹,导入了一个“测试测试.jpg”的图片
package yqq.request.study; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author gacl * 文件下载 */ public class ResponseDemo02 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { downloadChineseFileByOutputStream(response);//下载中文文件 } /** * 下载中文文件,中文文件下载时,文件名要经过URL编码,否则会出现文件名乱码 * @param response * @throws FileNotFoundException * @throws IOException */ private void downloadChineseFileByOutputStream(HttpServletResponse response) throws FileNotFoundException, IOException { String realPath = this.getServletContext().getRealPath("/images/测试测试.jpg");//获取要下载的文件的绝对路径 String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//获取要下载的文件名 //设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码 response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8")); InputStream in = new FileInputStream(realPath);//获取文件输入流 int len = 0; byte[] buffer = new byte[1024]; OutputStream out = response.getOutputStream(); while ((len = in.read(buffer)) > 0) { out.write(buffer,0,len);//将缓冲区的数据输出到客户端浏览器 } in.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
运行结果如下:
保存类型乱码,不知道为啥
参考资料 《java web轻量级开发全体验》
参考网址 http://www.cnblogs.com/xdp-gacl/p/3789624.html
代码是别人的,结果是自己跑的,主要为了熟悉环境搭建和项目流程