HttpServletRequest和HttpServletResponse

一、HttpServletRequest

1. 简介

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
request就是将请求文本封装而成的对象,所以通过request能获得请求文本中的所有内容,请求头请求体请求行

2.相关方法

  • 请求头

  String getHeader(String name) //根据头名称得到头信息值
  long getDateHeader(java.lang.String name) //获得指定头内容Date
  int getIntHeader(java.lang.String name)  //获得指定头内容int
  Enumeration getHeaderNames() //得到所有头信息name
  Enumeration getHeaders(String name) //根据头名称得到相同名称头信息值
  • 请求体/请求正文
    表单获取相关

String getParameter(name)   //根据表单中name属性的名,获取value属性的值方法
String[] getParameterValues(String name)  //专为复选框取取提供的方法
getParameterNames()   //得到表单提交的所有name的方法
Map<String , String[]> getParameterMap()   //得到表单提交的所有值的方法 //做框架用,非常实用
getInputStream    //以字节流的方式得到所有表单数据

非表单数据相关

oid setAttribute(String name, Object value);
Object getAttribute(String name);
Void removeAttribute(String name);

请求转发相关

RequestDispatcher getRequestDispatcher(String path)//得到请求转发或请求包含的协助对象
forward(ServletRequest request, ServletResponse response) //转发的方法
include(ServletRequest request, ServletResponse response) //请求包含

编码相关

//解决post方式编码
request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式 
//解决get方式编码
String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);
  • 请求行

  getMethod();     //获得请求方式
  getRequestURL();    //返回客户端发出请求时的完整URL
  getRequestURI();    //返回请求行中的资源名部分。
  getContextPath();   // 当前应用的虚拟目录 
  getQueryString() ;    //返回请求行中的参数部分。
  getProtocol(); 
  getScheme();
  getServerName();
  getServerPort();
  getContextPath();
  getServletPath();
  getRemoteAddr(); 

3. 应用

  • 各种表单输入项数据的获取
  • request对象实现请求转发
    • 请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。
    • request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。
    • request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。

二、HttpServletResponse

1. 简介

代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

getOutputStream和getWriter方法

  • 用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象
  • getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。 会抛异常。
  • Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
  • Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。

应用

  • 向客户端输出中文数据
    • 用OutputStream(字节流)发送数据
    • 用PrintWriter(字符流)发送数据
  • 文件下载

//通过路径得到一个输入流
        String path = this.getServletContext().getRealPath("/WEB-INF/classes/美女.jpg");
        FileInputStream fis = new FileInputStream(path);
        //创建字节输出流
        ServletOutputStream sos = response.getOutputStream();
        
        //得到要下载的文件名
        String filename = path.substring(path.lastIndexOf("\\")+1);
        
        //设置文件名的编码, 如果文件名是中文,需要URLEncoder
        filename = URLEncoder.encode(filename, "UTF-8");//将不安全的文件名改为UTF-8格式
        
        //告知客户端要下载文件
        response.setHeader("content-disposition", "attachment;filename="+filename);
        response.setHeader("content-type", "image/jpeg");
        
        //执行输出操作
        int len = 1;
        byte[] b = new byte[1024];
        while((len=fis.read(b))!=-1){
            sos.write(b,0,len);
        }
        
        sos.close();
        fis.close();


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值