@duyao
2015-05-02T03:11:12.000000Z
字数 2594
阅读 1974
servlet
该对象表示浏览器的请求:当web服务器得到该请求后,会把浏览器请求的信息封装成HttpServletRequest对象中,开发人员通过HttpServletRequest的方法获取各种信息
得到uri/myFirstWeb/Request
和urlhttp://localhost:8080/myFirstWeb/Request
uri是web名+资源名
url
获取请求部分的数据
获取对方ip
获取对方的主机名,如果该机器没有在dns注册,则返回ip地址,注册后返回主机名
getRemotePort()得到服务器端口
getLoc·1alPort()得到客户端口
getHeaderNames()是得到该报头的属性
getHeader()是得到该报头属性的值
//得到请求报头
Enumeration<String> name=request.getHeaderNames();
while (name.hasMoreElements()) {
String string = (String) name.nextElement();
//得到该报头的内容
String value=request.getHeader(string);
System.out.println(string+":"+value);
request.getParameter(name)
request.getParameterValues(name)
}
得到请求的内容,比如form表单中的text
,password
,radio
,checkbox
,selection
,textarea
,hidden
等内容
getParameter()返回值为String(一个),用于pwd,name等
getParameterValues()返回值为String[] (多个),用于复选框checkbox,如果一个也没选,为空,遍历时会出错,因此先加判空操作
使用request实现reponce.getRequestDispatcher().forward()
实现请求转发
通过setAttribute()
可以把数据放到域对象request内,该request的attribute生命周期在一次请求内有效
forward(request, response)
是发生在同一个web服务器,所以2个servlet使用同一个request和responce,因此request.getRequestDispatcher(string)
中的string是servlet 名,不需要加资源名,因为是同一服务器即同一包内sendRediecrt()
不能通过setAttribute(arg0, arg1)
把属性产地给下一个servletsendRediecrt()
和forward()
有什么区别?** sendRediecrt()
叫请求重定向,forward()
叫请求转发request.sendRediecrt(/web应用/资源名)
,后者request.getRequestDispatcher(/资源名).forward(request, response)
request.setAttribute(String, Object)
两者都可以获得,建议使用forward()
forward
很多servlet形成请求链,但是都在同一个web服务区内,因此仍为一次,但是转向多次地址栏始终停留在第一个发起forward的servlet的urlforward
,少使用重定向sendRediecrt()