Request请求的应用
Request请求的应用
1.通过request获得请求行
获得客户端的请求方式:String
getMethod()
获得请求的资源:
String
getRequestURI()
StringBuffer
getRequestURL()
String
getContextPath()
---web
应用的名称
String
getQueryString()
---- get
提交
url
地址后的参数字符串
注意:request获得客户机(客户端)的一些信息
request.getRemoteAddr() — 获得访问的客户端IP地址
1 //获得请求方式 2 String Method=request.getMethod(); 3 System.out.println("方式"+Method); 4 //获得请求资源相关内容 5 String requestURI=request.getRequestURI(); 6 System.out.println("uri:"+requestURI); 7 StringBuffer requestURL =request.getRequestURL(); 8 System.out.println("url:"+requestURL); 9 //获得WEB应用名称 10 String contextPath=request.getContextPath(); 11 System.out.println("WEB应用名称"+contextPath); 12 //地址后的参数字符串 13 String queryString=request.getQueryString(); 14 System.out.println(queryString); 15 //获得访问者的IP地址 16 String remoteAddr=request.getRemoteAddr(); 17 System.out.println("ip:"+remoteAddr);
2.通过request获得请求头
1)long
getDateHeader(
String name)
2)String
getHeader(
String name)
3)Enumeration
getHeaderNames()
4)Enumeration
getHeaders(
String name)
5)int
getIntHeader(
String name)
1 //获得指定的头 2 String header=request.getHeader("User-Agent"); 3 System.out.println(header); 4 //2.获得所有头的信息 5 Enumeration<String> headerNames=request.getHeaderNames(); 6 while(headerNames.hasMoreElements()) { //判断是否还有更多 7 String headerName=headerNames.nextElement(); 8 String headerValue=request.getHeader(headerName);//通过名获取值 9 System.out.println(headerName+" "+headerValue);
注意:referer头的作用:执行此次访问的来源做防盗链
防止其他网站盗用自家网站信息
//简单的一个获取referer头的网页
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 </head> 7 <body> 8 <a href="/WEB4/referer">访问HeaderServlet资源</a> 14 </body> 15 </html>
String header =request.getHeader("referer");
//判断访问的地址是否为该地址 if(header!=null && header.startsWith("http://localhost")) { response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("啦啦啦啦啦啦啦啦"); }else { System.out.println("fsf"); }
3.通过request获得请求体
1)String
getParameter(
String name);
2)String[]
getParameterValues(
String name);
3)Enumeration
getParameterNames();
4)Map<String,String[]>
getParameterMap();
注意:get请求方式的请求参数 上述的方法一样可以获得;
解决post提交方式的乱码:request.setCharacterEncoding(“UTF-8”);
解决get提交的方式的乱码:parameter = new String(parameter.getbytes(“iso8859-1″),”utf-8”);
<form action="/WEB4/content" method="post"> <input type="text" name="username"><br> <input type="password" name="passworld"><br> <input type="checkbox" name="hobby" value="zq">足球 <input type="checkbox" name="hobby" value="lq">篮球 <input type="checkbox" name="hobby" value="pq">乒乓球<br> <input type="submit" value="提交"> </form>
1 //获得单个表单值 2 String username=request.getParameter("username"); 3 System.out.println(username); 4 String password =request.getParameter("passworld"); 5 System.out.println(password); 6 System.out.println("-------------------"); 7 //2.获得多个表单的值 8 String[] hobbys = request.getParameterValues("hobby"); 9 for(String hobby:hobbys) { 10 System.out.println(hobby); 11 } 12 System.out.println("-------------------"); 13 //3.获得所有请求参数名称 14 Enumeration<String> parameterNames = request.getParameterNames(); 15 while(parameterNames.hasMoreElements()) { 16 System.out.println(parameterNames.nextElement()); 17 } 18 System.out.println("-------------------"); 19 //4.获得所有的参数,参数封装到Map<String,String[]> 20 Map<String, String[]> parameterMap = request.getParameterMap(); 21 for(Map.Entry<String, String[]> entry:parameterMap.entrySet()) { 22 System.out.println(entry.getKey()); 23 for(String str:entry.getValue()) { 24 System.out.println(str); 25 } 26 System.out.println("---------------"); 27 }
4.request的域对象和请求转发
(1)request是一个域对象
request对象也是一个存储数据的区域对象,所以也具有如下方法:
1)setAttribute(
String name,
Object o)
2)getAttribute(
String name)
3)removeAttribute(
String name)
注意:request域的作用范围:一次请求中
(2)request完成请求转发
获得请求转发器—-path
是转发的地址
RequestDispatcher
getRequestDispatcher(
String path)
通过转发器对象转发
requestDispathcer.forward(
ServletRequest request,
ServletResponse response)
客户端请求forwar1,forward1又发送请求到forward2;
//向request域当中存取数据 request.setAttribute("name", "tom"); //forward1将请求转发给forward2(获得转发器) RequestDispatcher dispatcher = request.getRequestDispatcher("/forward2");//服务器端地址 //执行转发方法 dispatcher.forward(request, response);
//从request域中取数据 Object attribute = request.getAttribute("name"); response.getWriter().write("hello haohao..."+attribute);
注意:转发与重定向的区别?
1
)重定向两次请求,转发一次请求
2
)重定向地址栏的地址变化,转发地址不变
3
)重新定向可以访问外部网站
转发只能访问内部资源
4
)转发的性能要优于重定向