Request对象是使用入门
一、什么是Request对象:代表http请求 内部封装客户端请求的一些信息
二、获取客户机信息
- uri:全球统一资源标识符 ../images/1.jpg /demo/servletdemo
- url:全球统一资源定位符 http://www.baidu.com http://localhost/android_web08/responseServlet9 c:\1.txt
注意:uri大于url,uri包含urlSystem.out.println("请求方式:"+request.getMethod());System.out.println("客户IP:"+request.getRemoteAddr());System.out.println("客户需要访问资源的URI:"+request.getRequestURI());System.out.println("客户需要访问资源的URL:"+request.getRequestURL());System.out.println("获得WEB应用的名称:"+request.getContextPath());//获得具体访问的资源System.out.println("获得具体访问的资源");System.out.println(request.getRequestURI().substring(request.getContextPath().length()));
三、获得头信息
案例:防盗链 referer : 代表是从哪个网站访问过来的
四、获取请求数据(存在请求体中的数据,POST提交方式)
//获得头信息,单个元素String hader=request.getHeader("host");//获得头信息,键重复元素Enumeration<String> headers = request.getHeaders("host");while(headers.hasMoreElements()){System.out.println(headers.nextElement());}//获得所有头信息Enumeration<String> names = request.getHeaderNames();while(names.hasMoreElements()){String name=names.nextElement();System.out.println(name+":"+request.getHeader(name));}
//通过请求信息里的referer参数获取来源页面路径String header=request.getHeader("referer");//设置响应体和浏览器解码方式response.setContentType("text/html; charset=UTF-8");//获得response字符输出流PrintWriter writer = response.getWriter();//判断请求来源页面是否满足要求if(header!=null&&header.startsWith("http://localhost")){//满足要求正常输出页面writer.println("我是新闻");}else{//没有通过中正常途径访问,设置重定向会主页response.setStatus(302);response.sendRedirect("/Demo6/1.html");}
方法:
request.getParameter(String name);request.getParameterValues(String name);request.getParameterNames();request.getParameterMap();
//通过键去查找值String username=request.getParameter("username");String password=request.getParameter("password");System.out.println(username);System.out.println(password);//通过键去查找值,这种情况主要针对的是复选框,多个表单name相同的时候String[] hobby = request.getParameterValues("hobby");System.out.println(Arrays.toString(hobby));//获取页面提交的所有值,返回成一个map集合Map<String,String[]> info = request.getParameterMap();//通过获取键的方式来遍历集合Set<String> keySet = info.keySet();Iterator<String> it=keySet.iterator();while(it.hasNext()){String s=it.next();String[] value=info.get(s);//判断数组长度,长度小于等于1if(value.length<=1){System.out.println("key:"+s+" "+"value:"+value[0]);}else{//遍历String数组取出其中的值for(int i=0;i<value.length;i++){System.out.println("key:"+s+" "+"value:"+value[i]);}}}
问题:页面提交的中文获取到之后乱码
原因:request默认的编码方式iso-8859-1
五、request可以获得请求转发器
- 转发
- 转发的特点:
(1) 客户端访问一次
(2) 地址栏的地址是不变的request.getRequestDispatcher(path).forward(request,response);
问题:转发和重定向的区别? - request域对象的概念(可以自己设置参数,转发的过程中携带参数)
request.setAttribute(String,Object);
request.getAttribute(String); - 请求包含
格式:request.getRequestDispatcher(path).inclue(request,response);//servlet2的输出内容为This is class com.heima.demo1.Servlet2request.getRequestDispatcher("/servlet2").include(request,response);//输出123123123123123123response.getWriter().write("123123123123123123!!!!!");
会先访问path页面执行里面的内容,结束后再执行本页面的东西。如果是使用OUT流输出内容,则流不能关闭,否则只输出到关流出的内容。


浙公网安备 33010602011771号