@duyao
2015-05-02T03:11:12.000000Z
字数 2594
阅读 2027
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()