HttpServletResponse

1.告诉服务器应用使用UTF-8解析文本的两种方式,告诉客户端要使用什么编码

  1. response.setHeader("content-type", "text/html;charset=UTF-8");
  2. response.setContentType("text/html; charset=UTF-8");

2.getWriter

  1. PrintWriter out = response.getWriter();//得到一个字符输出流
  2. out.write("你好!");//向客户端响应文本内容

3.getOutputStream

  1. response.setContentType("text/html;charset=UTF-8");
  2. ServletOutputStream sos = response.getOutputStream();
  3. sos.write("你好123".getBytes("UTF-8"));//getBytes默认编码为本地编码(即:gbk)

4.下载文件

  1. public void doGet(HttpServletRequest request, HttpServletResponse response)
  2. throws ServletException, IOException {
  3. //通过路径得到一个输入流
  4. String path = this.getServletContext().getRealPath("/WEB-INF/classes/美女.jpg");
  5. FileInputStream fis = new FileInputStream(path);
  6. //创建字节输出流
  7. ServletOutputStream sos = response.getOutputStream();
  8. //得到要下载的文件名
  9. String filename = path.substring(path.lastIndexOf("\\")+1);
  10. //设置文件名的编码
  11. filename = URLEncoder.encode(filename, "UTF-8");//将不安全的文件名改为UTF-8格式
  12. //告知客户端要下载文件
  13. response.setHeader("content-disposition", "attachment;filename="+filename);
  14. response.setHeader("content-type", "image/jpeg");
  15. //执行输出操作
  16. int len = 1;
  17. byte[] b = new byte[1024];
  18. while((len=fis.read(b))!=-1){
  19. sos.write(b,0,len);
  20. }
  21. sos.close();
  22. fis.close();
  23. }

5.告诉客户端不使用缓存

  1. response.setHeader("pragma", "no-cache");
  2. response.setHeader("cache-control", "no-cache");
  3. response.setIntHeader("expires", 0);

6.跳转

  1. public void doGet(HttpServletRequest request, HttpServletResponse response)
  2. throws ServletException, IOException {
  3. response.setContentType("text/html;charset=UTF-8");
  4. /*response.setIntHeader("refresh", 1);//设置1秒钟刷新一次
  5. Random r = new Random();
  6. response.getWriter().write(r.nextInt()+"");*/
  7. response.getWriter().write("注册成功!3秒钟跳到主页");
  8. //设置3秒钟跳转
  9. response.setHeader("refresh", "3;url=/day09_reques_response/demo6");
  10. }

7.重定向

  1. public void doGet(HttpServletRequest request, HttpServletResponse response)
  2. throws ServletException, IOException {
  3. System.out.println("A:我要借钱!");
  4. System.out.println("B:我不有,但是我可以告诉你谁有");
  5. /*//告诉客户端要重新定向新的资源
  6. response.setStatus(302);
  7. //告诉浏览器要去访问哪个URL
  8. response.setHeader("location", "/day09_00_HttpServletResponse/servlet/demo8");*/
  9.  
  10. //请求重定向
  11. response.sendRedirect("/day09_reques_response/demo8");
  12.  
  13. System.out.println("A: 我去了");
  14.  
  15. }

8.response细节  

getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。

getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。 会抛异常。

Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态

行和各响应头组合后输出到客户端。

Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关

闭该输出流对象。

HttpServletRequest

1.request常用方法

  1. 获得客户机信息
  2. getRequestURL方法返回客户端发出请求时的完整URL
  3. getRequestURI方法返回请求行中的资源名部分。
  4. getQueryString 方法返回请求行中的参数部分。
  5. getRemoteAddr方法返回发出请求的客户机的IP地址
  6. getRemoteHost方法返回发出请求的客户机的完整主机名
  7. getRemotePort方法返回客户机所使用的网络端口号
  8. getLocalAddr方法返回WEB服务器的IP地址。
  9. getLocalName方法返回WEB服务器的主机名
  10. getMethod得到客户机请求方式
  11. 获得客户机请求头
  12. getHead(name)方法
  13. getHeaders(String name)方法
  14. getHeaderNames方法
  15. 获得客户机请求参数(客户端提交的数据)
  16. getParameter(name)方法
  17. getParameterValuesString name)方法
  18. getParameterNames方法
  19. getParameterMap方法 //做框架用,非常实用
  20. getInputStream

代码示例

  1. public void doGet(HttpServletRequest request, HttpServletResponse response)
  2. throws ServletException, IOException {
  3. //test1(request);
  4. //test2(request);
  5. //获得相关name的消息头
  6. Enumeration headers = request.getHeaders("accept-language");
  7. while(headers.hasMoreElements()){
  8. String e = (String) headers.nextElement();
  9. System.out.println(e+":"+request.getHeader(e));
  10. }
  11. }
  12.  
  13. private void test2(HttpServletRequest request) {
  14. //获得所有请求消息头的name
  15. Enumeration names = request.getHeaderNames();
  16. while(names.hasMoreElements()){
  17. String e = (String) names.nextElement();
  18. System.out.println(e+":"+request.getHeader(e));
  19. }
  20. }
  21.  
  22. private void test1(HttpServletRequest request) {
  23. //获得请求消息头的信息
  24. String header = request.getHeader("User-Agent");
  25. System.out.println(header);
  26. if(header.toLowerCase().contains("msie")){
  27. System.out.println("你使用的是IE浏览器");
  28. }else if(header.toLowerCase().contains("firefox")){
  29. System.out.println("你使用的是火狐浏览器");
  30. }else if(header.toLowerCase().contains("chrome")){
  31. System.out.println("你使用的是谷歌浏览器");
  32. }else{
  33. System.out.println("你使用的是其它浏览器");
  34. }
  35. }

2.获得参数

  1. private void test1(HttpServletRequest request) throws UnsupportedEncodingException {
  2. //获取表单数据
  3. //根据表单中name属性的名,获取value属性的值方法
  4. String userName = request.getParameter("userName");
  5. String pwd = request.getParameter("pwd");
  6. String sex = request.getParameter("sex");
  7. String[] hobbys = request.getParameterValues("hobby");
  8. String city = request.getParameter("city");
  9. userName = new String(userName.getBytes("iso-8859-1"),"UTF-8");
  10. System.out.println(userName);
  11. System.out.println(pwd);
  12. System.out.println(sex);
  13.  
  14. for (int i = 0;hobbys!=null && i < hobbys.length; i++) {
  15. System.out.print(hobbys[i]+"\t");
  16. }
  17. System.out.println();
  18. System.out.println(city);
  19. }
  1. private void test2(HttpServletRequest request) {
  2. //获取所有的表单name的名子
  3. Enumeration names = request.getParameterNames();
  4. while(names.hasMoreElements()){
  5. String name = (String) names.nextElement();//得到每一个name名
  6. String[] values = request.getParameterValues(name);//根据name名,得到value值
  7. for (int i = 0;values!=null && i < values.length; i++) {
  8. System.out.println(name+"\t"+values[i]);
  9. }
  10. }
  11. }
  1. private void test3(HttpServletRequest request) {
  2. try {
  3. User u = new User();
  4. System.out.println("封装数据前:"+u);
  5. //获取表单数据
  6. Map<String,String[]> map = request.getParameterMap();
  7. for (Map.Entry<String, String[]> m : map.entrySet()) {
  8. String name = m.getKey();
  9. String[] value = m.getValue();
  10. //创建一属性描述器
  11. PropertyDescriptor pd = new PropertyDescriptor(name, User.class);
  12. //得到setter属性
  13. Method setter = pd.getWriteMethod();
  14. if(value.length==1){
  15. setter.invoke(u, value[0]);//给一个值的变量赋值
  16. }else{
  17. setter.invoke(u, (Object)value);//相关于给复选框赋值
  18. }
  19. }
  20. System.out.println("封装数据后:"+u);
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. }
  24. }

依赖包commons-beanutils-1.8.3.jar和commons-logging-1.1.1.jar

  1. private void test4(HttpServletRequest request) {
  2. try {
  3. User u = new User();
  4. System.out.println("封装数据前:"+u);
  5. BeanUtils.populate(u, request.getParameterMap());
  6. System.out.println("封装数据后:"+u);
  7. } catch (Exception e) {
  8. e.printStackTrace();
  9. }
  10. }

3.请求转发(请求一次)

  1. request.getRequestDispatcher("/demo6").include(request, response);

写入需要传递的值

  1. //将非表单的数据添加到request的域中
  2. request.setAttribute("s", str);

获取传过来的值

  1. //将request对象中的移除
  2. //request.removeAttribute("s");
  3. //从request对象中获取s的值
  4. String s = (String) request.getAttribute("s");

4.重定向(请求两次)

  1. //将请求转发到demo6中
  2. //request.getRequestDispatcher("/servlet/demo6").forward(request, response);
  3. //注:请求转发不能跳转到其它应用
  4. //request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
  5. //使用重定向
  6. //response.sendRedirect(request.getContextPath()+"/servlet/demo6");
  7. //可以跳转到其它应用
  8. //response.sendRedirect("http://www.baidu.com");

5.请求包含

  1. //请求包含
  2. request.getRequestDispatcher("/demo6").include(request, response);

6.解决乱码

  1. request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码
  2. userName = new String(userName.getBytes("iso-8859-1"),"UTF-8");//解决get乱码

  

Servlet之HttpServletResponse和HttpServletRequest的更多相关文章

  1. Java Web之路(二)Servlet之HttpServletResponse和HttpServletRequest

    HttpServletResponse 1.告诉服务器应用使用UTF-8解析文本的两种方式,告诉客户端要使用什么编码 response.setHeader("content-type&quo ...

  2. 找不到javax.servlet.http.HttpServletResponse和javax.servlet.http.HttpServletRequest

    导了个项目进eclipse,发现很多文件都报了错,错误提示是没有引入javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServl ...

  3. Servlet (三)HttpServletResponse

    package cn.sasa.serv; import java.io.IOException; import javax.servlet.ServletException; import java ...

  4. JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)

    HttpServletRequest获取请求头信息  (1)获取客户机请求头 String getHeader(String name) Enumeration<String> getHe ...

  5. servlet学习总结(一)——HttpServletRequest(转载)

    原文地址:http://www.cnblogs.com/xdp-gacl/p/3798347.html 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端 ...

  6. Servlet的HttpServletResponse输出

    了解其中的一些字符设置,PrintWriter输出等.. form.html: <!DOCTYPE html> <html> <head> <title> ...

  7. [spring]启动时报错:NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I

    Spring V4.1以后的版本在不支持Servlet3.0的应用服务器上跑时会报如下错误: NoSuchMethodError: javax.servlet.http.HttpServletResp ...

  8. The type javax.servlet.http.HttpServletResponse cannot be resolved. It is indirectly referenced from required .class files

    The type javax.servlet.http.HttpServletResponse cannot be resolved. It is indirectly referenced from ...

  9. javax.servlet.http.HttpServletResponse.getStatus()I

    感谢作者分享:http://blog.csdn.net/szwangdf/article/details/42145463 -------------------------------------- ...

随机推荐

  1. Temporary Segments: What Happens When a Sort Occurs (文档 ID 102339.1)

    APPLIES TO: Oracle Database - Enterprise Edition - Version 8.1.7.4 to 11.2.0.1 [Release 8.1.7 to 11. ...

  2. Oracle 的过程与函数

    一.过程 1 .过程创建和调用 过程 (procedure) 是一个 PL/SQL 语句块,它存储在数据字典中并可被应用程序调用.可以使用过程存储数据库中频繁使用的应用逻辑.当执行一个过程时,其语句被 ...

  3. im4java开发向导

    0.搜索ImageMagick下载安装 1.Setting up the Environment    引入im4java到classpath    设置图片处理引擎的command searchpa ...

  4. Web 项目 中读取专用配置文件

    在 web 开发中,有时我们要为 业务逻辑处理 配置专用的 配置文件,也就是 xml 文件,这样可以极大的方便维护工作,但是读取 专用的配置文件还需要自己写一个方法,在这里,我封装了一个公用 的方法: ...

  5. 关于javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt;

    今天遇到这样一个异常: 严重: Servlet.service() for servlet jsp threw exceptionjavax.servlet.jsp.JspTagException: ...

  6. 学习记录 java泛型资料

    java泛型资料: 1. 概述在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型就可以在细分成更多的类型.例如原先的类型List,现在在细分成Lis ...

  7. centos6.5没有eth0, 只有eth1, eth1无法上网

    1. cat  /etc/udev/rules.d/70-persistent-net/rules 2.将ATTR(address)=XXXXXXXX的内容 替换  文件/etc/sysconfig/ ...

  8. 华为OJ平台——杨辉三角的变形

    import java.util.Scanner; /** * 杨辉三角的变形 *第一行为1,后面每一行的一个数是其左上角到右上角的数的和,没有的记为0 * 1 * 1 1 1 * 1 2 3 2 1 ...

  9. html5相关

    1.语义化标签: header\section\aside\footer 2.音视频播放: video\audio 其中video支持ogg\mpeg4\webm格式的视频: 3.canvas 一.画 ...

  10. OpenGL ES 中Uniform块

    1.采用uniform Block的原因如果你的程序中包含了多个着色器,而且这些着色器使用了相同的Uniform变量,你就不得不为每个着色器分别管理这些变量.Uniform变量的location是在程 ...