Request简介
HttpServletRequest对象代码客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象,可以获取客户这些的信息
reques对象里的方法
1.获取客户机信息
- getRequestURL():返回客户端发出请求完整URL 例:

getRequestURI():返回请求行中的资源名部分,在权限控制中常用 例:
- getMethod():获取请求的方式(get,post)
getQueryString():方法返回请求行中的参数部分
getRemoteAddr:方法返回发出请求的客户机ip地址
getRemoteHost():方法返回发出请求的客户机的完整主机名
getRemotePort():方法返回客户机所使用的网络端口号
getLocalAddr():方法返回WEB服务器的IP地址
getLocalName():方法返回WEB服务器的主机名
getScheme():获取协议(http)
getServerName():获取主机名
getServletPort():获取服务器的端口
getServletPath():获取路径 中 除上下文后的其他路径
getContextPath:获取上下文路径
2.获取头信息
- getHeader(String name):获取指定头的值
- getHeaderNames():获取指定所有头的名称
- getHeaders(String name):获取指定头的所有值
- getDateHeader(String name):获取日期型头的值
3.获取请求参数
- getParameter(String name):获取指定名称的值
- getParameterMap():获取所有的请求数据组成的Map集合
- getParameterValues(String name):获取同名name的一组参数值
- getParameterNames():获取所有请求数据的名称和值
4.文件上传
getInputStream():获取输入流 通过流去获取数据(文件上传)
获取请求参数时乱码问题
request.setCharacterEncoding("UTF-8");
此种方式只对Post方式提交有效。
对于Get方式提交的数据,就只能手动解决乱码:
- String newName = new String(name.getBytes("ISO8859-1"),"UTF-8");
对于乱码还可以在tomcat里面解决
-
找到tomcat里conf文件夹下的server.xml文件
配置连接器的URIEncoding可以指定服务器在获取请求参数时默认使用的编码,从而一劳永逸的决绝获取请求参数时的乱码问题。
第二种方式也可以(不推荐使用)
注意:但是这俩属性都不推荐使用,因为发布环境往往不允许修改此属性。
reqyest实现请求转发和mvc设计模式
request对象实现请求转发:
- 请求转发指一个WEB资源收到客户端请求后,通知服务器去调用另外一个WEB资源进行处理。
请求转发的应用场景:
- request对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个方法的forward方法可
以实现请求转发。
request对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其他WEB资源处理。
setAttribute方法
getAttribute方法
removeAttribute方法
getAttributeNames方法
请求转发的细节
forward方法用于将请求转发到RequestDispatcher对象封装的资源
如果在调用forward方法之前,在Servlet程序中写入的部分内容已经被真正地传送到了客户端,forward方法将抛出IllegalStateException异常
避免:在每次跳转之后 return 结束方法
如果在调用forward方法之前向Servlet引擎的缓冲区(response)中写入了内容,只要写入到缓冲区中的内容还没有被真正输出到客户端,forward方法就可以被正常执行,原来写入到输出缓冲区中的内容将被清空,但是,已经写入HttpServletResponse对象中的响应头字段信息保持有效
请求转发的特点
1.客户端只发一次请求,而服务器有多个资源调用
2.客户端浏览器地址栏没有变化
RequestDispatcher
include方法:
RequestDispatcher.include方法用于将RequestDispatcher对象封装的资源内容作为当前响应内容的一部分包含进来,从而实现可编程的服务器端包含功能。
被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略
通常在jsp里做包含