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)转发的性能要优于重定向

posted @ 2019-09-09 19:51  撑起一片阳光  阅读(391)  评论(0编辑  收藏  举报