HttpServletRequest详解

       HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。

      通过Request对象进行的常用操作

    • 获取客户机信息

    • 获取请求头信息

    • 获取请求参数

    • 利用请求域传递对象

        一、request获取客户机信息

            getRequestURL方法返回客户端发出请求完整URL

            getRequestURI方法返回请求行中的资源名部分

            getQueryString 方法返回请求行中的参数部分

            getRemoteAddr方法返回发出请求的客户机的IP地址

            getMethod得到客户机请求方式

            getContextPath 获得当前web应用虚拟目录名称

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.获取客户端请求的完整URL
		String url = request.getRequestURL().toString();
		System.out.println(url);
		//2.获取客户端请求的资源部分的名称
		String uri = request.getRequestURI();
		System.out.println(uri);
		//3.获取请求行中参数部分
		String qStr = request.getQueryString();
		System.out.println(qStr);
		//4.获取请求客户端的ip地址
		String ip = request.getRemoteAddr();
		System.out.println(ip);
		//5.获取客户机的请求方式
		String method = request.getMethod();
		System.out.println(method);
		//6.获取当前web应用的名称
		String name = request.getContextPath();
		System.out.println(name);
		
		response.sendRedirect(request.getContextPath()+"/index.jsp");
	}

        二、request获取请求头信息 

        获得客户机请求头

    • getHeader(name)方法 --- String 

    • getHeaders(String name)方法 --- Enumeration<String>

    • getHeaderNames方法 --- Enumeration<String>

        获得具体类型客户机请求头

    • getIntHeader(name)方法  --- int

    • getDateHeader(name)方法 --- long(日期对应毫秒)

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String value = request.getHeader("Host");
		System.out.println(value);
		
		Enumeration<String> enumeration = request.getHeaderNames();
		while(enumeration.hasMoreElements()){
			String name = enumeration.nextElement();
			String value = request.getHeader(name);
			System.out.println(name+":"+value);
		}
		
	}

        三、request获取请求参数

        getParameter(name) --- String 通过name获得值

        getParameterValues  --- String[ ] 通过name获得多值 checkbox

        getParameterNames  --- Enumeration<String> 获得所有name

        getParameterMap  --- Map<String,String[ ]> key :name value: 多值

        处理中文乱码-->点击详细解释

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String value = (String) request.getAttribute("name");
	}

        四、request利用请求域传递对象

            request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理

    • setAttribute方法 

    • getAttribute方法  

    • removeAttribute方法

    •  getAttributeNames方法

            request作用域的作用范围

            在请求转发时传递数据

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setAttribute("name", "zqwang121");
		this.getServletContext().getRequestDispatcher("/servlet/Demo4").forward(request, response);
		
		String result = "zqwang121";
		request.setAttribute("result", result);
		request.getRequestDispatcher("/show.jsp").forward(request, response);
	
	}
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String value = (String) request.getAttribute("name");
		System.out.println(value);
	}

        四、request实现请求转发

    • request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发,从而共享请求中的数据

    • 如果在调用forward方法之前向servlet程序中写入的部分内容已经被真正的传送到了客户端,forward将不能进行,会抛出异常。

    • 如果在调用forward之前向response缓冲区中写入了内容,只要写入到其中的内容还没有真的被输出到客户端,forward方法就可以正常执行,但原来写入到缓冲区中的数据将被清空,注意只是实体内容被清空,之前写入的响应头信息仍然存在。

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.getRequestDispatcher("/servlet/Demo6").forward(request, response);	
	}


转载于:https://my.oschina.net/zqwang121/blog/651588

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值