Request对象简介
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
Request常用获取客户机信息方法
getRequestURL//返回客户端发出请求时的完整URL
getRequestURI//返回请求行中的资源名部分
getQueryString//返回请求行中的参数部分
getLocalAddr//返回web服务器的IP地址
getLocalName//返回web服务器的主机名
getRemoteAddr//返回发出请求的客户机的IP地址
getRemoteHost//返回发出请求的客户机的完整主机名
获取客户机请求参数(客户端提交的数据)
getParameter(String)//常用
getParameterValues(String name)//常用
getParameterNames//不常用
getParameterMap//编写框架时常用
request接受表单提交中文参数乱码问题
一,如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端是以哪种编码提交的,服务器端的request对象就以对应的编码接受,比如客户端是以UTF-8编码提交的,那么服务器端request对象就以UTF-8编码接受(request.setCharacterEncoding("UTF-8"))
二,如果提交方式为get,设置request对象的编码是无效的,request对象还是以默认的ISO8859-1编码接送数据,因此要想不乱码,只能在接受到数据后再手工转换,步骤如下:
1)获取客户端提交上来的数据,得到的是乱码字符串data=“????????"
2)查找IS08859-1码表,得到客户机提交的原始数据的字节数组
byte source = data.getBytes("ISO8859-1");
3)通过字节数组以指定的编码构建字符串,解决乱码
data = new String(source,"UTF-8);
总结:通过字节数组以指定的编码构建字符串,这里指定的编码是根据客户端那边提交的数据时使用的字符编码来定的,如果是GB2312,那么就设置成data = new String(source,"GB2312")
Request对象实现请求转发
请求转发的基本概念:指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。
请求转发的应用场景:MVC设计模式
通过request对象提供的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。
request.getRequestDispatcher("/test.jsp").forward(request,response)
RequestDispatcher接口
RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个被其他资源调用的资源(例如servlet,html文件,JSP文件等),并可以通过其中的方法来将客户端的请求转发给所包装的资源。
RequestDispatcher接口中定义了两个方法:forward方法和include方法,他们分别用于将请求转发到RequestDispatcher对象封装的资源和将RequestDispatcher对象封装的资源作为当前相应内容的一部分包含进来。
forward和include方法接受的两个参数必须是传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象,或者是对它们进行了包装的ServletRequestWrapper或ServletResponseWrapper对象,以便调用和被调用的两个资源共享相同的ServletRequest和ServletResponse
ServletRequest.getRequestDispatcher()方法
ServletRequest.getRequestDispatcher()方法的参数除了可以采用以"/"开头的路径字符串,还可以采用非"/"开头的相对路径
特别说明
RequestDispatcher对象只能包装当前web应用程序中的资源,所以,forward方法和include方法只能在同一个web应用程序内的资源之间请求转发和实现资源包含