• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    JSP 中request与response的用法详解
    POST TIME:2021-10-18 07:28

    JSP 中request与response的用法详解

    概要:

    在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍。因为其实request和response的使用大部分都是对http协议的操作。

    request对象的介绍

    我们先从request对象进行介绍:

    我们知道http协议定义了请求服务器的格式:

    请求行
    请求头
    空格
    请求体(get请求没有请求体)

    好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度:

    应用1 获取请求头

    /** 
     * 获取HTTP请求头 
     *   String getHeader(String name),适用于单值头 
     *   int getIntHeader(String name),适用于单值int类型的请求头 
     *   long getDateHeader(String name),适用于单值毫秒类型的请求头 
     *    EnumerationString> getHeaders(String name),适用于多值请求头 
     * 
     * 
     */ 
    public class CServlet extends HttpServlet { 
     
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
     
        String ip = request.getRemoteAddr();//获取IP地址 
        String method = request.getMethod();//获取请求方式 
        System.out.println(ip); 
        System.out.println(method); 
        getLiuLanQi(request); 
        protectMethod(request, response); 
      } 
    //防盗链 
      public void protectMethod(HttpServletRequest request, 
          HttpServletResponse response) { 
        String url = request.getHeader("referer"); 
        System.out.println(url); 
        if(url != null  url.equalsIgnoreCase("http://localhost:8080/day10/MyHtml.html") ) { 
          System.out.println("hi"); 
        } 
        else { 
          response.setStatus(302); 
          response.setHeader("Location","/day10/MyHtml.html"); 
          System.out.println("重定向"); 
        } 
      } 
    //判断浏览器的类型 
      public void getLiuLanQi(HttpServletRequest request) { 
        String user = request.getHeader("User-Agent"); 
        if(user != null) { 
          String userNoC = user.toLowerCase(); 
          if(userNoC.contains("chrome")) { 
            System.out.println("浏览器类型:谷歌" ); 
          } 
          else if(userNoC.contains("firefox/")) { 
            System.out.println("浏览器类型:火狐"); 
          } 
          else { 
            System.out.println("浏览器类型:IE"); 
          } 
        } 
        else { 
          System.out.println("null"); 
        } 
      } 
    } 
    

    应用2获取URL路径

    /** 
     * 获取请求URL 
      http://localhost:8080/day10_2/AServlet?username=xxxpassword=yyy 
        > String getScheme():获取协议,http 
        > String getServerName():获取服务器名,localhost 
        > String getServerPort():获取服务器端口,8080 
        > *****String getContextPath():获取项目名,/day10_2 
        > String getServletPath():获取Servlet路径,/AServlet 
        > String getQueryString():获取参数部分,即问号后面的部分。username=xxxpassword=yyy 
        > String getRequestURI():获取请求URI,等于项目名+Servlet路径。/day10_2/AServlet 
        > String getRequestURL():获取请求URL,等于不包含参数的整个请求路径。http://localhost:8080/day10_2/AServlet 
     * 
     * 
     */ 
    public class DServlet extends HttpServlet { 
     
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        System.out.println(request.getScheme()); 
        System.out.println(request.getServerName()); 
        System.out.println(request.getServerPort()); 
        System.out.println(request.getContextPath()); 
        System.out.println(request.getServletPath()); 
        System.out.println(request.getQueryString()); 
        System.out.println(request.getRequestURI()); 
        System.out.println(request.getRequestURL()); 
      } 
     
    } 
    

    应用3获取请求参数

    /** 
     * 
     * 请求参数:有一个参数一个值的,还有一个参数多个值! 
        > *****String getParameter(String name):获取指定名称的请求参数值,适用于单值请求参数 
        > String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数 
        > EnumerationString> getParameterNames():获取所有请求参数名称 
        > *****MapString,String[]> getParameterMap():获取所有请求参数,其中key为参数名,value为参数值。 
     * 
     */ 
    public class EServlet extends HttpServlet { 
     
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        doPost(request,response); 
      } 
     
      public void doPost(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        request.setCharacterEncoding("utf-8");//调用他来解决乱码问题的,不会的可以看我写的解决乱码的那一篇 
        String name = request.getParameter("name"); 
        String password = request.getParameter("password"); 
        String[] aihao = request.getParameterValues("aihao"); 
        response.setHeader("content-type", "text/html;charset=utf-8"); 
        PrintWriter pw = response.getWriter(); 
        pw.println("name:" + name + "br/>"); 
        pw.println("password:" + password + "br/>"); 
        pw.print("aihao"); 
        for (int i = 0; i  aihao.length; i++) { 
          switch (i) { 
          case 1: 
            pw.print("吃饭"); 
            break; 
          case 2: 
            pw.print("睡觉"); 
            break; 
          case 3: 
            pw.print("打豆豆"); 
            break; 
     
          default: 
             
            break; 
          } 
        } 
        pw.close(); 
      } 
     
    } 
    
    !-- 用于发送请求的html --> 
    html> 
     head> 
      title>denglu.html/title> 
      meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
     /head> 
      
     body> 
      form action="/day10/EServlet" method="post">!-- 通过post方法提交 --> 
        姓名:input type="text" name="name"/>br/> 
        密码:input type="password" name="password">br/> 
        爱好:input type="checkbox" name="aihao" value="1"/>吃饭 
        input type="checkbox" name="aihao" value="2"/>睡觉 
        input type="checkbox" name="aihao" value="3"/>打豆豆 
        input type="submit" value="提交"> 
      /form> 
     /body> 
    /html> 
    
    

    应用4设置request对象属性

    用来实现同一个应用程序servlet之间值得传递,我们还用到了转发

    /** 
     * 
     ** request域 
        Servlet中三大域对象:request、session、application,都有如下三个方法: 
        > void setAttribute(String name, Object value) 
        > Object getAttribute(String name) 
       > void removeAttribute(String name); 
        > 同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。 
     
     * 
     */ 
    public class FServlet extends HttpServlet { 
     
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        request.setAttribute("name","weijinhao"); 
        request.setAttribute("password", "123"); 
        RequestDispatcher rd = request.getRequestDispatcher("/GServlet"); 
        rd.forward(request, response); 
      } 
     
    } 
    
    
    public class GServlet extends HttpServlet { 
     
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        String name = (String)request.getAttribute("name"); 
        String password = (String)request.getAttribute("password"); 
        response.setHeader("content-type", "text/html;charset=utf-8"); 
        PrintWriter pw = response.getWriter(); 
        pw.println("name:" + name + "br/>"); 
        pw.println("password:" + password + "br/>"); 
        pw.close(); 
      } 
     
    } 
    

    好了,request的用法大致就是这摸多了。

    让我们来看看response对象吧。

    response对象的使用

    http协议定义了响应浏览器的格式

    响应行
    响应头
    空格
    响应体

    response对象的大致应用是用在设置响应码,设置响应头,及设置响应正文。

    应用1设置响应正文

    /** 
       * response的正文 
       * 1,字符流 
       * 2,字节流 
       */ 
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        //String n = "hello javaweb"; 
        //byte[] b = n.getBytes(); 
        //字节流的使用 
        /*ServletOutputStream outputStream = response.getOutputStream(); 
        outputStream.write(b); 
        outputStream.close();*/ 
         
         
        //字符流的使用 
        /*PrintWriter p = response.getWriter(); 
        p.write(n); 
        p.close();*/ 
         
        //commoms工具包的使用 
        FileInputStream fileInputStream = new FileInputStream("C:/Users/74087/Desktop/6226354_994604.jpg"); 
        byte[] b = IOUtils.toByteArray(fileInputStream); 
        ServletOutputStream outputStream = response.getOutputStream(); 
        outputStream.write(b); 
        outputStream.close(); 
      } 
     
    } 
    

    应用2 设置响应码和响应头

    /** 
       *response 的响应码 
       *1, sendError(int sc)//发送错误代码 
       *2, sendError(int sc, java.lang.String msg) //发送错误代码及描述 
       *3, setStatus(int sc) //发送成功响应代码 
       *response 的响应头 
       *1, setDateHeader(java.lang.String name, long date) 
       *2, setHeader(java.lang.String name, java.lang.String value) 
       *3, setIntHeader(java.lang.String name, int value) 
       *  下面的和上面的作用一样但是是为了进行多值的添加 
       *  addDateHeader(java.lang.String name, long date) 
       *  addHeader(java.lang.String name, java.lang.String value) 
       *  addIntHeader(java.lang.String name, int value) 
       */ 
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        //sendNum(response); 
        //sendRe(response); 
        //refresh(response); 
        //noCache(response); 
      } 
      //禁用浏览器缓存 
      public void noCache(HttpServletResponse response) { 
        response.setHeader("Cache-Control","no-cache"); 
        response.setHeader("pragma","0"); 
        response.setHeader("expires","no-cache"); 
      } 
      //自动跳转 
      public void refresh(HttpServletResponse response) { 
        response.setHeader("refresh", "5;url=http://www.baidu.com"); 
      } 
      //重定向的使用 
      public void sendRe(HttpServletResponse response) { 
        response.setStatus(302); 
        response.setHeader("Location", "http://www.baidu.com"); 
      } 
     
      public void sendNum(HttpServletResponse response) throws IOException { 
        response.setStatus(200); 
        response.sendError(404); 
        response.sendError( 404, "ser accept your request but i don't want to you see my web page"); 
      } 
     
    } 
    

    如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • jsp 使用request为页面添加静态数据的实例
    • JSP中Servlet的Request与Response的用法与区别
    • JSP的request对象实例详解
    • JSP request.setAttribute()详解及实例
    • jsp Request获取url信息的各种方法对比
    • JSP利用过滤器解决request中文乱码问题
    • JSP用过滤器解决request getParameter中文乱码问题
    • Jsp中request的3个基础实践
    上一篇:Struts2获取参数的三种方法总结
    下一篇:JSP中Servlet的Request与Response的用法与区别
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信