美文网首页
Servlet学习笔记4: Servlet中的request与r

Servlet学习笔记4: Servlet中的request与r

作者: 奔跑的程序媛A | 来源:发表于2021-02-23 14:25 被阅读0次

一、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();
  • 生成验证码:BufferedImage
  • 定时刷新页面
    • 利用Refresh刷新到其他组件
    • response.setHeader("Refresh", "3;URL=index.html");
  • 重定向跳转
    • 方式一:手动方案
      response.setStatus(302);  //状态码302就代表重定向
      response.setHeader("location","http://www.baidu.com");
    • 方式二:使用封装好的,通过response.sendRedirect("http://www.baidu.com");
      特点:服务器告诉浏览器要跳转的页面,是浏览器主动去跳转的页面,浏览器知道,也浏览器的地址栏中url会变,是浏览器重新发起一个请求到另外一个页面,所以request是重新发起的,跟请求转发不一样。

参考:https://www.cnblogs.com/zhangyinhua/p/7629221.html


Servlet知识点

相关文章

网友评论

      本文标题:Servlet学习笔记4: Servlet中的request与r

      本文链接:https://www.haomeiwen.com/subject/wqmrfltx.html