request封装了客户端所有的请求数据
请求行
请求头
空行
请求体(GET没有)
request获取常用信息
获取客户端IP
getRemoteAddr():获取远程IP地址
请求方式
getMethod():返回的值可能是get也可能是post
request获取请求头
String getHeader(String name):适用于单值头
int getIntHeader(String name):适用于单值int类型请求头
long getDateHeader(String name):适用于单值毫秒类型的请求头
Enumeration<String> getHeaders(String name):适用于多值请求头
使用方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取客户端IP地址
String addr = request.getRemoteAddr();
System.out.println("IP"+addr);
//获取请求方式request.getMethod()
System.out.println("请求方式"+request.getMethod());
//获取User-Agent request.getHeader("User-Agent")
String userAgent = request.getHeader("User-Agent");
System.out.println(userAgent);
if(userAgent.toLowerCase().contains("chrome")){
System.out.println("你好:"+addr+"你用的是谷歌");
}
else if(userAgent.toLowerCase().contains("firefox")){
System.out.println("你好:"+addr+"你用的是火狐");
}
else if(userAgent.toLowerCase().contains("msie")){
System.out.println("你好:"+addr+"你用的是ie");
}
}
获取请求URL
Sting getScheme():获取协议
Stirng getServeName():获取服务器名
String getServePort():获取服务器端口
String getContextPath():获取项目名
String getServletPath():获取Servlet路径
String getQueryString():获取参数部分,即问号后面的部分
String getRequestURI():获取请求URI,等于项目名+Servlet路径
String getRequestURL():获取请求URL,等于不包含参数的整个请求路径
获取请求参数
请求参数由客户端发送给服务器
有可能是在请求体中(POST),也可能在URL之后(GET)
String getParameter(String name):获取指定名称的请求参数,适用于单值请求参数
Map<String,String[]> getParameterMap():获取所有请求参数,key为参数名称,value为参数值数组
String[] getParameterValues(String name):获取指定名称的请求参数值,适用于多值请求参数
Enumeration<String> getParameterNames():获取所有的请求参数名称
请求转发和请求包含
一个请求内执行多个Servlet
RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");(被转发的Servlet路径)
请求转发:rd.forward(request,response);
请求包含:rd.include(request,response);
一个请求跨多个Servlet,需要使用转发和包含
请求转发:由下一个Servlet完成响应体,当前Servlet可以设置响应头(留头不留体)
请求包含:由两个Servlet共同完成响应体(都留)
无论是请求转发还是请求包含,都在一个请求范围之内,使用同一个request和response
请求转发中第一个response体内容不能多于1K*24+1
request域
Servlet中三大域对象:request、session、application,都有如下三个方法
转发或包含时用来传递值
void setAttribute(String name,Object value)
Object getAttribute(String name)
void removeSttribute(String name)
同一请求范围内使用request.setAttribute()、request.getAttribute()来传值。前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值
请求转发是服务端行为,只需要给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名