[关闭]
@duyao 2015-05-02T03:11:12.000000Z 字数 2594 阅读 1900

HttpServletRequest

servlet


HttpServletRequest

该对象表示浏览器的请求:当web服务器得到该请求后,会把浏览器请求的信息封装成HttpServletRequest对象中,开发人员通过HttpServletRequest的方法获取各种信息

常用函数

getRequestURL()和getRequestURI()

得到uri/myFirstWeb/Request和urlhttp://localhost:8080/myFirstWeb/Request
uri是web名+资源名
url

getQueryString()

获取请求部分的数据

getRemoteAddr()

获取对方ip

getRemoteHost()

获取对方的主机名,如果该机器没有在dns注册,则返回ip地址,注册后返回主机名

getRemotePort()和getLocalPort()

getRemotePort()得到服务器端口
getLoc·1alPort()得到客户端口

getHeaderNames()和getHeader(java.lang.String name)

getHeaderNames()是得到该报头的属性
getHeader()是得到该报头属性的值

  1. //得到请求报头
  2. Enumeration<String> name=request.getHeaderNames();
  3. while (name.hasMoreElements()) {
  4. String string = (String) name.nextElement();
  5. //得到该报头的内容
  6. String value=request.getHeader(string);
  7. System.out.println(string+":"+value);
  8. request.getParameter(name)
  9. request.getParameterValues(name)
  10. }

获得表单的输入数据的获取

getParameter(java.lang.String name)和getParameterValues(java.lang.String name)

得到请求的内容,比如form表单中的text,password,radio,checkbox,selection,textarea,hidden等内容
getParameter()返回值为String(一个),用于pwd,name等
getParameterValues()返回值为String[] (多个),用于复选框checkbox,如果一个也没选,为空,遍历时会出错,因此先加判空操作

实现请求转发

getRequestDispatcher(java.lang.String path).forward(ServletRequest request, ServletResponse response)

使用request实现reponce.getRequestDispatcher().forward()实现请求转发

setAttribute(java.lang.String name,java.lang.Object o)

通过setAttribute()可以把数据放到域对象request内,该request的attribute生命周期在一次请求内有效

注意

  1. 不能转发到web服务器以外的url
  2. 因为forward(request, response)是发生在同一个web服务器,所以2个servlet使用同一个request和responce,因此request.getRequestDispatcher(string)中的string是servlet 名,不需要加资源名,因为是同一服务器即同一包内
  3. 使用sendRediecrt()不能通过setAttribute(arg0, arg1)把属性产地给下一个servlet
  4. ** sendRediecrt()forward()有什么区别?**
    • 叫法不相同,sendRediecrt()叫请求重定向,forward()叫请求转发
    • 发生地点不同,前者发生在浏览器,后者发生在web服务器
    • 用法不同,前者request.sendRediecrt(/web应用/资源名) ,后者request.getRequestDispatcher(/资源名).forward(request, response)
    • 能够去的url范围不同,前者可以前往任何url,后者只能去当前web应用的某个资源
    • 最终的地址栏url不同,前者为第一个发起forward的servlet,而后者的地址栏是最终转向的url
    • 实现方法不同,前者通过通知服务器发送http报文来实现前往另一个url,而后者用过web服务器多次转向来前往另一个url,浏览器根本不知道web服务器发生转向,也没有发送http报文
    • request.setAttribute(String, Object)两者都可以获得,建议使用forward()
  5. 一次请求:只要没有停止,同时没有回到浏览器重定向,就算一次,可以forward很多servlet形成请求链,但是都在同一个web服务区内,因此仍为一次,但是转向多次地址栏始终停留在第一个发起forward的servlet的url
  6. 尽量使用请求转发forward,少使用重定向sendRediecrt()
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注