Request对象是使用入门

一、什么是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流输出内容,则流不能关闭,否则只输出到关流出的内容。




posted @ 2016-01-01 18:58  蓝蝶岳  阅读(284)  评论(0编辑  收藏  举报