servlet中的HttpServletResponse对象
作者:互联网
当有多个客户端浏览器去请求Tomcat时,Tomcat会为每一个客户端浏览器创建一对独立的HttpServletRequest与HttpServletResponse对象
HttpServletResponse对象代表服务器的响应,在该对象中封装了响应客户端浏览器的流对象,以及向客户端浏览器响应的响应头,响应数据,响应状态码等信息
设置响应类型
客户端浏览器根据给定的响应类型决定如何处理响应
setContentType("MIME"):通过MIME-Type设置响应类型。
设置字符型响应
- resp.setContentType("text/html")
响应类型为文本型,内容含有html字符串,是默认响应类型
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置响应类型为html型 resp.setContentType("text/html;utf-8"); //获取响应字符流 PrintWriter pw=resp.getWriter(); //向客户端响应数据 pw.println("<!DOCTYPE html>"); pw.println("<html lang=\"en\">"); pw.println("<head>"); pw.println("<meta charset=\"UTF-8\">"); pw.println("<title>Title</title>"); pw.println("</head>"); pw.println("<body>"); pw.println("<font color='#663399'>HelloWord</font>"); pw.println("</body>"); pw.println("</html>"); //刷新流 pw.flush(); //关闭流 pw.close(); }
- resp.setContentType("text/plain")
响应类型为文本型,内容是普通文本,不会解析html标签。
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置响应类型为普通文本型 resp.setContentType("text/plain;utf-8"); //获取响应字符流 PrintWriter pw=resp.getWriter(); //向客户端响应数据 pw.println("<!DOCTYPE html>"); pw.println("<html lang=\"en\">"); pw.println("<head>"); pw.println("<meta charset=\"UTF-8\">"); pw.println("<title>Title</title>"); pw.println("</head>"); pw.println("<body>"); pw.println("<font color='#663399'>HelloWord</font>"); pw.println("</body>"); pw.println("</html>"); //刷新流 pw.flush(); //关闭流 pw.close(); }
- resp.setContentType("application/json")
响应类型为JSON格式的字符串。
设置字节型响应
- resp.setContentType("image/jpeg")
响应类型为图片类型,图片类型为jpeg或jpg格式。
- resp.setContentType("image/gif")
响应类型为图片类型,图片类型为gif格式。
设置响应编码
- response.setContentType("text/html;charset=utf-8");
不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文
- response.setCharacterEncoding("utf-8");
仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是 UTF-8的时候,就会看到乱码,需要手动指定浏览器编码。
重定向响应
- response.sendRedirect(URL地址)
重定向响应会在响应头中添加一个Location的key,对应的value是给定的URL。客户端浏览器在解析响应头后自动向Location中的URL 发送请求。
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //产生重定向响应 resp.sendRedirect("http://www.baidu.com"); }
重定向响应的特点:
1)产生两次请求和两次响应
2)重定向的URL由客户端浏览器发送
3)浏览器地址栏发生改变
案例:
创建一个搜索页面,通过百度搜索引擎完成内容搜索
1)完成搜索页面search.html的编写
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>search</title> </head> <body> <form action="redirect"> <!-- 搜索框--> <input type="text" name="text"> <!-- 搜索按钮--> <input type="submit" value="search" name="search"> </form> </body> </html>
2)完成servlet的编写
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; @WebServlet("/redirect") public class redirect extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取搜索框的值 String value=req.getParameter("text"); //产生重定向响应 resp.sendRedirect("https://www.baidu.com/s?wd="+ URLEncoder.encode(value,"utf-8"));//对浏览器进行URL编码 } }
HttpServletResponse对象实现文件下载
在实现文件下载时,需要在响应头中添加附加信息。
//Content-Disposition-----文件配置,attachment-----附件 response.addHeader("Content-Disposition","attachment; filename="+文件名);
- Content-Disposition:attachment
该附加信息表示作为对下载文件的一个标识字段,直接启动下载功能下载文件。不会在浏览器中 显示而是直接做下载处理。
- filename=文件名
浏览器使用该文件名作为下载文件的文件名。
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //读取要下载的文件 File file=new File("D:\\flower.jpg"); //用字节输入存储文件 InputStream is= new FileInputStream(file); //创建字节数组 byte[] buff=new byte[is.available()]; is.read(buff); //在响应添加附加信息 resp.addHeader("Content-Disposition", "attachment; filename="+file.getName()); //产生响应 //创建字节输出流 OutputStream os=resp.getOutputStream(); //响应到客户端 os.write(buff); //刷新流 os.flush(); //关闭流 os.close(); }
解决文件名是中文名所出现的乱码问题
//将原来的文件名按照gbk的方式变成字节,再按iso-8859-1编码方式变成新的字符串 resp.addHeader("Content-Disposition","attachment;filename="+ new String(file.getName().getBytes("gbk"),"iso-8859-1"));
标签:浏览器,pw,对象,resp,HttpServletResponse,响应,println,servlet 来源: https://www.cnblogs.com/chaplu/p/16068668.html