全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JSP 中request与response的用法详解

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),适用于单值毫秒类型的请求头 
 *    Enumeration<String> 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=xxx&password=yyy 
    > String getScheme():获取协议,http 
    > String getServerName():获取服务器名,localhost 
    > String getServerPort():获取服务器端口,8080 
    > *****String getContextPath():获取项目名,/day10_2 
    > String getServletPath():获取Servlet路径,/AServlet 
    > String getQueryString():获取参数部分,即问号后面的部分。username=xxx&password=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):获取指定名称的请求参数值,适用于多值请求参数 
    > Enumeration<String> getParameterNames():获取所有请求参数名称 
    > *****Map<String,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与response  # 中request与response使用方法详解  # jsp 使用request为页面添加静态数据的实例  # JSP中Servlet的Request与Response的用法与区别  # JSP的request对象实例详解  # JSP request.setAttribute()详解及实例  # jsp Request获取url信息的各种方法对比  # JSP利用过滤器解决request中文乱码问题  # JSP用过滤器解决request getParameter中文乱码问题  # Jsp中request的3个基础实践  # 适用于  # 好了  # 看我  # 都是  # 重定向  # 错误代码  # 几个  # 都有  # 让我们  # 多个  # 就不  # 如有  # 三大  # 不清楚  # 这两个  # 工具包  # 希望能  # 还有一个  # 来看看  # 火狐 


相关文章: 音响网站制作视频教程,隆霸音响官方网站?  建站之星下载版如何获取与安装?  制作营销网站公司,淘特是干什么用的?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  公司网站设计制作厂家,怎么创建自己的一个网站?  h5在线制作网站电脑版下载,h5网页制作软件?  如何通过虚拟主机空间快速建站?  如何有效防御Web建站篡改攻击?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  深圳网站制作培训,深圳哪些招聘网站比较好?  制作网站的公司有哪些,做一个公司网站要多少钱?  建站之星如何保障用户数据免受黑客入侵?  电商平台网站制作流程,电商网站如何制作?  测试制作网站有哪些,测试性取向的权威测试或者网站?  制作网站的软件免费下载,免费制作app哪个平台好?  PHP 500报错的快速解决方法  如何用好域名打造高点击率的自主建站?  宿州网站制作公司兴策,安徽省低保查询网站?  建站主机选择指南:服务器配置与SEO优化实战技巧  建站之星后台管理系统如何操作?  Python如何创建带属性的XML节点  如何配置支付宝与微信支付功能?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  如何在阿里云购买域名并搭建网站?  如何确保西部建站助手FTP传输的安全性?  临沂网站制作公司有哪些,临沂第四中学官网?  招贴海报怎么做,什么是海报招贴?  宝塔建站无法访问?如何排查配置与端口问题?  建站ABC备案流程中有哪些关键注意事项?  网站制作价目表怎么做,珍爱网婚介费用多少?  建站主机选虚拟主机还是云服务器更好?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  如何选择高效响应式自助建站源码系统?  制作证书网站有哪些,全国城建培训中心证书查询官网?  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何用西部建站助手快速创建专业网站?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何通过.red域名打造高辨识度品牌网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  建站之星代理如何获取技术支持?  如何在阿里云虚拟服务器快速搭建网站?  如何快速选择适合个人网站的云服务器配置?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  智能起名网站制作软件有哪些,制作logo的软件?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何选择适合PHP云建站的开源框架?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。