1、HttpServletRequest介绍web
HttpServletRequest对象表明客户端的请求,当客户端经过HTTP协议访问服务器时,HTTP请求头中的全部信息都封装在这个对象中,经过这个对象提供的方法,能够得到客户端请求的全部信息。设计模式
2、Request经常使用方法数组
2.一、得到客户机信息浏览器
getRequestURL方法返回客户端发出请求时的完整URL。
getRequestURI方法返回请求行中的资源名部分。
getQueryString 方法返回请求行中的参数部分。
getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径以后和查询参数以前的内容,它以“/”开头。
getRemoteAddr方法返回发出请求的客户机的IP地址。
getRemoteHost方法返回发出请求的客户机的完整主机名。
getRemotePort方法返回客户机所使用的网络端口号。
getLocalAddr方法返回WEB服务器的IP地址。
getLocalName方法返回WEB服务器的主机名。服务器
2.二、得到客户机请求头网络
getHeader(string name)方法:String
getHeaders(String name)方法:Enumeration
getHeaderNames()方法框架
2.三、得到客户机请求参数(客户端提交的数据)jsp
getParameter(String)方法(经常使用)
getParameterValues(String name)方法(经常使用)
getParameterNames()方法(不经常使用)
getParameterMap()方法(编写框架时经常使用)post
3.六、提交中文数据乱码问题总结this
一、若是提交方式为post,想不乱码,只须要在服务器端设置request对象的编码便可,客户端以哪一种编码提交的,服务器端的request对象就以对应的编码接收,好比客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接收(request.setCharacterEncoding(“UTF-8”))
二、若是提交方式为get,设置request对象的编码是无效的,request对象仍是以默认的ISO8859-1编码接收数据,所以要想不乱码,只能在接收到数据后再手工转换,步骤以下:
1).获取获取客户端提交上来的数据,获得的是乱码字符串,data=”???è?????”
String data = request.getParameter(“paramName”);
2).查找ISO8859-1码表,获得客户机提交的原始数据的字节数组
byte[] source = data.getBytes(“ISO8859-1”);
3).经过字节数组以指定的编码构建字符串,解决乱码
data = new String(source, “UTF-8”);
经过字节数组以指定的编码构建字符串,这里指定的编码是根据客户端那边提交数据时使用的字符编码来定的,若是是GB2312,那么就设置成data = new String(source, “GB2312”),若是是UTF-8,那么就设置成data = new String(source, “UTF-8”)
4、Request对象实现请求转发
4.一、请求转发的基本概念
请求转发:指一个web资源收到客户端请求后,通知服务器去调用另一个web资源进行处理。
请求转发的应用场景:MVC设计模式
在Servlet中实现请求转发的两种方式:
一、经过ServletContext的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法能够实现请求转发。
例如:将请求转发的test.jsp页面
1 RequestDispatcher reqDispatcher =this.getServletContext().getRequestDispatcher(“/test.jsp”);
2 reqDispatcher.forward(request, response);
二、经过request对象提供的getRequestDispatche(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法能够实现请求转发。
例如:将请求转发的test.jsp页面
1 request.getRequestDispatcher(“/test.jsp”).forward(request, response);
request对象同时也是一个域对象(Map容器),开发人员经过request对象在实现转发时,把数据经过request对象带给其它web资源处理。
request对象做为一个域对象(Map容器)使用时,主要是经过如下的四个方法来操做
setAttribute(String name,Object o)方法,将数据做为request对象的一个属性存放到request对象中,例如:request.setAttribute(“data”, data);
getAttribute(String name)方法,获取request对象的name属性的属性值,例如:request.getAttribute(“data”)
removeAttribute(String name)方法,移除request对象的name属性,例如:request.removeAttribute(“data”)
getAttributeNames方法,获取request对象的全部属性名,返回的是一个,例如:Enumeration attrNames = request.getAttributeNames();
4.二、请求重定向和请求转发的区别
一个web资源收到客户端请求后,通知服务器去调用另一个web资源进行处理,称之为请求转发/307。 一个web资源收到客户端请求后,通知浏览器去访问另一个web资源进行处理,称之为请求重定向/302。