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);
//判断数组长度,长度小于等于1
if(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.Servlet2
request.getRequestDispatcher("/servlet2").include(request,response);
//输出123123123123123123
response.getWriter().write("123123123123123123!!!!!");
会先访问path页面执行里面的内容,结束后再执行本页面的东西。如果是使用OUT流输出内容,则流不能关闭,否则只输出到关流出的内容。