Request对象是使用入门

本文详细介绍了HTTP请求中的Request对象,包括其基本概念、如何获取客户机信息、如何处理头信息及请求数据等,并探讨了请求转发与重定向的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是Request对象:代表http请求 内部封装客户端请求的一些信息
 
二、获取客户机信息
  1. uri:全球统一资源标识符  ../images/1.jpg     /demo/servletdemo
  2. url:全球统一资源定位符  http://www.baidu.com   http://localhost/android_web08/responseServlet9    c:\1.txt
    注意:uri大于url,uri包含url
    
         
    1. System.out.println("请求方式:"+request.getMethod());
    2. System.out.println("客户IP:"+request.getRemoteAddr());
    3. System.out.println("客户需要访问资源的URI:"+request.getRequestURI());
    4. System.out.println("客户需要访问资源的URL:"+request.getRequestURL());
    5. System.out.println("获得WEB应用的名称:"+request.getContextPath());
    6. //获得具体访问的资源
    7. System.out.println("获得具体访问的资源");
    8. System.out.println(request.getRequestURI().substring(request.getContextPath().length()));

三、获得头信息

    
  1. //获得头信息,单个元素
  2. String hader=request.getHeader("host");
  3. //获得头信息,键重复元素
  4. Enumeration<String> headers = request.getHeaders("host");
  5. while(headers.hasMoreElements())
  6. {
  7. System.out.println(headers.nextElement());
  8. }
  9. //获得所有头信息
  10. Enumeration<String> names = request.getHeaderNames();
  11. while(names.hasMoreElements())
  12. {
  13. String name=names.nextElement();
  14. System.out.println(name+":"+request.getHeader(name));
  15. }

案例:防盗链  referer : 代表是从哪个网站访问过来的

    
  1. //通过请求信息里的referer参数获取来源页面路径
  2. String header=request.getHeader("referer");
  3. //设置响应体和浏览器解码方式
  4. response.setContentType("text/html; charset=UTF-8");
  5. //获得response字符输出流
  6. PrintWriter writer = response.getWriter();
  7. //判断请求来源页面是否满足要求
  8. if(header!=null&&header.startsWith("http://localhost"))
  9. {
  10. //满足要求正常输出页面
  11. writer.println("我是新闻");
  12. }
  13. else
  14. {
  15. //没有通过中正常途径访问,设置重定向会主页
  16. response.setStatus(302);
  17. response.sendRedirect("/Demo6/1.html");
  18. }

四、 获取请求数据(存在请求体中的数据,POST提交方式)
方法:

    
  1. request.getParameter(String name);
  2. request.getParameterValues(String name);
  3. request.getParameterNames();
  4. request.getParameterMap();

     
  1. //通过键去查找值
  2. String username=request.getParameter("username");
  3. String password=request.getParameter("password");
  4. System.out.println(username);
  5. System.out.println(password);
  6. //通过键去查找值,这种情况主要针对的是复选框,多个表单name相同的时候
  7. String[] hobby = request.getParameterValues("hobby");
  8. System.out.println(Arrays.toString(hobby));
  9. //获取页面提交的所有值,返回成一个map集合
  10. Map<String,String[]> info = request.getParameterMap();
  11. //通过获取键的方式来遍历集合
  12. Set<String> keySet = info.keySet();
  13. Iterator<String> it=keySet.iterator();
  14. while(it.hasNext())
  15. {
  16. String s=it.next();
  17. String[] value=info.get(s);
  18. //判断数组长度,长度小于等于1
  19. if(value.length<=1)
  20. {
  21. System.out.println("key:"+s+" "+"value:"+value[0]);
  22. }
  23. else
  24. {
  25. //遍历String数组取出其中的值
  26. for(int i=0;i<value.length;i++)
  27. {
  28. System.out.println("key:"+s+" "+"value:"+value[i]);
  29. }
  30. }
  31. }

问题:页面提交的中文获取到之后乱码
原因:request默认的编码方式iso-8859-1
五、request可以获得请求转发器
  1. 转发
    1. 转发的特点:
      (1) 客户端访问一次
      (2) 地址栏的地址是不变的
      
             
      1. request.getRequestDispatcher(path).forward(request,response);
      问题:转发和重定向的区别?
  2. request域对象的概念(可以自己设置参数,转发的过程中携带参数)
    request.setAttribute(String,Object);
    request.getAttribute(String);
  3. 请求包含
    格式:request.getRequestDispatcher(path).inclue(request,response);
    
         
    1. //servlet2的输出内容为This is class com.heima.demo1.Servlet2
    2. request.getRequestDispatcher("/servlet2").include(request,response);
    3. //输出123123123123123123
    4. response.getWriter().write("123123123123123123!!!!!");
    会先访问path页面执行里面的内容,结束后再执行本页面的东西。如果是使用OUT流输出内容,则流不能关闭,否则只输出到关流出的内容。




转载于:https://www.cnblogs.com/didixyy/p/8ced5a3cd0ac7e27cb9b66b67b93988f.html

内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格和根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量和指针中的应用规则,解释了不同类型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这类数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序和清理。 阅读建议:由于本资源涉及较多底层概念和技术细节,建议读者先复习C语言基础知识,特别是指针和内存管理部分。在学习过程中,可以尝试动手编写类似的代码片段,以便更好地理解和掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值