zoukankan      html  css  js  c++  java
  • HttpServletRequest请求

    自我理解:

      HttpServletRequest请求是获取请求行、请求头和请求体;可以通过这个方法设置防盗链,获取地址。牢记解决乱码的方式。

      怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。详见https://www.cnblogs.com/wenanbang/p/4142415.html

    其实也可以单纯的认为是若是带数据的话就请求转发了,若改地址的话就重定向了。

    一、获取请求行:

    1、获得客户端的请求方式:

    getMethod()     获得String类型;

    2、获得请求的资源:

    getContextPath() 获得String类型的 web应用的名称(项目名)

    getQueryString() 获得 get提交url 地址后的参数字符串;

     getRequestURI() 获取URI地址String类型

     getRequestURL() 获取URL地址StringBuffer类型

    request.getRemoteAddr() 获得访问的客户端IP地址

    package com.oracle.demo01;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LineServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//获取请求方式
    		String method=request.getMethod();
    		System.out.println("请求方式"+method);
    		//获取请求地址
    		StringBuffer url=request.getRequestURL();
    		System.out.println("url"+url);
    		String uri=request.getRequestURI();
    		System.out.println("uri"+uri);
    		//请求web应用(项目)名称
    		String name=request.getContextPath();
    		System.out.println("项目名"+name);
    		//获取get请求参数字符串
    		String query=request.getQueryString();
    		System.out.println("get请求参数"+query);
    		//获取客户端IP地址
    		String ip=request.getLocalAddr();
    		System.out.println("IP"+ip);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    

      

    二、获取请求头:

     getHeader(String name) 

    referer 头的作用:获取该访问的来源,做防盗链

    package com.oracle.demo01;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HeaderServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//获取User-Agent
    		String agent=request.getHeader("User-Agent");
    		System.out.println(agent);
    		//获取referer头
    		String ref=request.getHeader("Referer");
    		System.out.println(ref);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    //防盗链
    package com.oracle.demo01;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class RefererServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//获取referer头
    		String referer=request.getHeader("Referer");
    		System.out.println(referer);
    		//解决响应乱码问题
    		response.setContentType("text/html;charset=utf-8");
    		if (referer!=null&&referer.startsWith("http://localhost")) {
    			response.getWriter().write("34555");
    		}else {
    			response.getWriter().write("4444");
    		}
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    

      

    三、获得请求体:

    1、解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

    2、解决get提交的方式的乱码:

                parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

     

    package com.oracle.demo01;
    
    import java.io.IOException;
    import java.util.Map;
    import java.util.Set;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class RegisterServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//解决post请求乱码问题
    		//request.setCharacterEncoding("utf-8");
    		
    		
    		//获取请求体的内容
    		//根据一个key 获取一个值
    		String username=request.getParameter("username");
    		//解决get请求乱码问题
    		username=new String(username.getBytes("ISO8859-1"),"UTF-8");
    		System.out.println("用户名:"+username);
    		//根据一个key 获取一个数组
    		String hobbys[]=request.getParameterValues("hobby");
    		for (String hobby : hobbys) {
    			System.out.print("爱好:"+hobby+"  ");
    		}
    		System.out.println();
    		//获取请求参数的map集合
    		Map<String, String[]> map= request.getParameterMap();
    		Set<String> set=map.keySet();
    		for (String s : set) {
    			String values[]=map.get(s);
    			System.out.print(s+":");
    			for (String v: values) {
    				System.out.print(v+" ");
    			}
    			System.out.println();
    		}
    		
    		
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
     <form action="/WEB05/RegisterServlet" method="get">
      用户名:<input type="text" name="username"><br>
      密码:<input type="password" name="pwd"><br>
      性别:男<input type="radio" name="sex" value="man">
      女<input type="radio" name="sex" value="woman"><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>
    </body>
    </html>

     

     

     

    四、request的其他功能:

    1、request 也是个域对象,也是具有以下功能:

      setAttribute(String name, Object o)

      getAttribute(String name)

      removeAttribute(String name)

    2、request完成请求转发:

      获得请求转发器----path是转发的地址

    RequestDispatcher getRequestDispatcher(String path)

      通过转发器对象转发

    requestDispathcher.forward(ServletRequest request, ServletResponse response)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="/WEB05/RegisterServlet" method="get">
    		用户名:<input type="text" name="username"><br>
    		密码:<input type="password" name="pwd"><br>
    		性别:男<input type="radio" name="sex" value="man">
    		女<input type="radio" name="sex" value="woman"><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>
    </body>
    </html>
    package com.oracle.demo01;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Servlet02 extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//从request雨中取值
    		String name=(String) request.getAttribute("name");
    		//解决响应乱码
    		response.setContentType("text/html;charset=utf-8");
    		response.getWriter().write("hello"+name);
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doGet(request, response);
    	}
    }
    

      

    五、ServletContext域与Request域的生命周期比较

    1、ServletContext

           创建:服务器启动

           销毁:服务器关闭

           域的作用范围:整个web应用

    2、request

          创建:访问时创建request

          销毁:响应结束request销毁

          域的作用范围:一次请求中

    八、转发和重定向的区别:

    1、重定向两次请求,转发一次请求

    2、重定向地址栏的地址变化,转发地址不变

    3、重新定向可以访问外部网站 转发只能访问内部资源

    4、转发的性能要优于重定向

    需要带数据的时候用请求转发,由第一个Servlet01带数据到Servlet02需要地址转变的用重定向)

     

     

     

     

     

     

  • 相关阅读:
    Monkeyrunner环境搭建
    学习Monkeyrunner过程
    uiautomatorviewer使用报错
    安装JMeter
    如何测试网页的访问速度
    安装Android studio
    软件测试工程师具备技能
    WinRAR去除广告弹框(精华在末尾)
    android studio adb连接不上手机
    DOM的理解
  • 原文地址:https://www.cnblogs.com/zqy6666/p/12365408.html
Copyright © 2011-2022 走看看