HttpServletRequest详解

阵营风云

HttpServletRequest 详解

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。

获得客户机信息:

getRequestURL()返回客户端发出请求时的完整URL。getRequestURI()返回请求行中的参数部分。getQueryString ()方法返回请求行中的参数部分(参数名+值)getRemoteHost()返回发出请求的客户机的完整主机名。getRemoteAddr()返回发出请求的客户机的IP地址。getPathInfo()返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以"/"开头。getRemotePort()返回客户机所使用的网络端口号。getLocalAddr()返回WEB服务器的IP地址。getLocalName()返回WEB服务器的主机名。举例:返回客户端发出请求时的完整URL

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class Servlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse resp)

throws ServletException, IOException {

// TODO Auto-generated method stub

doPost(request, resp);

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse resp)

throws ServletException, IOException {

String requestUrl = request.getRequestURL().toString();// 得到请求的URL地址

resp.setCharacterEncoding("UTF-8");// 设置将字符以"UTF-8"编码输出到客户端浏览器

// 通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码

resp.setHeader("content-type", "text/html;charset=UTF-8");

PrintWriter out = resp.getWriter();

out.write("请求的URL地址:" + requestUrl);

}

}

获得客户机请求头

方法getHeader(string name)以 String 的形式返回指定请求头的值。如果该请求不包含指定名称的头,则此方法返回 null。如果有多个具有相同名称的头,则此方法返回请求中的第一个头。头名称是不区分大小写的。可以将此方法与任何请求头一起使用getHeaders(String name)以 String 对象的 Enumeration 的形式返回指定请求头的所有值getHeaderNames()返回此请求包含的所有头名称的枚举。如果该请求没有头,则此方法返回一个空枚举获得客户机请求参数

getParameter(String name)根据name获取请求参数(常用)getParameterValues(String name)根据name获取请求参数列表(常用)getParameterMap()返回的是一个Map类型的值,该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。(编写框架时常用)请求转发:

指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。

1.通过ServletContext的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。

例如:将请求转发的test.jsp页面

RequestDispatcher reqDispatcher =this.getServletContext().getRequestDispatcher("/test.jsp");

reqDispatcher.forward(request, response);

2.通过request对象提供的getRequestDispatche(String path)方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。**

例如:将请求转发的test.jsp页面

request.getRequestDispatcher("/test.jsp").forward(request, response);

request对象同时也是一个域对象(Map容器),开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。

String data="心若静,风奈何";

* 将数据存放到request对象中,此时把request对象当作一个Map容器来使用

*/

request.setAttribute("data", data);

//客户端访问RequestDemo06这个Servlet后,RequestDemo06通知服务器将请求转发(forward)到test.jsp页面进行处理

request.getRequestDispatcher("/test.jsp").forward(request, response);

request对象作为一个域对象(Map容器)使用时,主要是通过以下的四个方法来操作

*

setAttribute(String name,Object o)方法,将数据作为request对象的一个属性存放到request对象中,例如:request.setAttribute(“data”, data);

*

getAttribute(String name)方法,获取request对象的name属性的属性值,例如:request.getAttribute(“data”)

*

removeAttribute(String name)方法,移除request对象的name属性,例如:request.removeAttribute(“data”)

*

getAttributeNames方法,获取request对象的所有属性名,返回的是一个,例如:Enumeration

attrNames = request.getAttributeNames();

流量使用情况怎么查 – 流量用了多少不会查?手把手教你三大运营商隐藏入口
专访女足名宿孙雯:世界杯无弱旅,海外踢球助王霜成长