一、request对象继承体系结构
二、request对象的功能
1、获取请求消息数据
1.1、获取请求行数据
//1、获取请求方式:String getMethod()
String method = request.getMethod();
System.out.println(method);//GET
//2、获取虚拟目录:String getContextPath()
String contextPath = request.getContextPath();
System.out.println(contextPath);// /javaweb
//3、获取servlet路径:String getServletPath()
String servletPath = request.getServletPath();
System.out.println(servletPath);// /requestDemo
//4、获取get方式请求参数:String getQueryString()
String queryString = request.getQueryString();
System.out.println(queryString); // username=zhangsan
//5、获取请求URI:String getRequestURI()
String requestURI = request.getRequestURI();
System.out.println(requestURI); // /requestDemo
//6、获取请求URL:StringBuffer getRequestURL()
StringBuffer requestURL = request.getRequestURL();
System.out.println(requestURL); //http://localhost:8080/requestDemo
//7、获取协议及版本:String getProtocol()
String protocol = request.getProtocol();
System.out.println(protocol);// HTTP/1.1
//8、获取客户机的IP地址:String getRemoteAddr()
String remoteAddr = request.getRemoteAddr();
System.out.println(remoteAddr);// 0:0:0:0:0:0:0:1
1.2、获取请求头数据
//1、获取所有请求头名称:Enumeration<String> getHeaderNames()
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
//2、根据名称获取请求头的值:String getHeader(String name)
String value = request.getHeader(name);
System.out.println(name + " : " + value);
}
//3、获取浏览器版本信息
String agent = request.getHeader("user-agent");
if(agent.contains("Chrome")) {
System.out.println("客户端使用的是谷歌浏览器……");
}else if (agent.contains("Firefox")) {
System.out.println("客户端使用的是火狐浏览器……");
}else {//IE:User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
System.out.println("客户端使用的是IE浏览器……");
}
1.3、获取请求体数据
//1.获取字符流
BufferedReader br = request.getReader();
//2.读取数据
String line = null;
while((line = br.readLine()) != null){
System.out.println(line);
}
2、其他功能
2.1、获取请求参数通用方式
注册页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/requestDemo" method="post">
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="password"><br>
<input type="checkbox" name="hobby" value="game">游戏
<input type="checkbox" name="hobby" value="study">学习<br>
<input type="submit" value="提交">
</form>
</body>
</html>
获取请求数据:
package com.wedu.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
/**
* 获取请求参数通用方式
*/
@WebServlet("/requestDemo")
public class RequestDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置获取请求数据的编码格式
request.setCharacterEncoding("UTF-8");
//1、String getParameter(String name):根据参数名称获取参数值
String username = request.getParameter("username");
System.out.println("username:" + username);
//2、String[] getParameterValues(String name):根据参数名称获取参数值的数组
String[] hobbies = request.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println("hobby:" + hobby);
}
//3、Enumeration<String> getParameterNames():获取所有请求的参数名称
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String name = parameterNames.nextElement();
String value = request.getParameter(name);
System.out.println(name + ":" + value);
}
//4、Map<String,String[]> getParameterMap():获取所有参数的map集合
Map<String, String[]> parameterMap = request.getParameterMap();
Set<String> keySet = parameterMap.keySet();
for (String key:keySet) {
String[] values = parameterMap.get(key);
for (String value : values) {
System.out.println(key + ":" + value);
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
2.2、获取共享数据
package com.wedu.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* request共享数据
*/
@WebServlet("/requestDemo")
public class RequestDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//void setAttribute(String name,Object object):存储数据
request.setAttribute("msg","hello");
//Object getAttribute(String name):通过键获取值
String msg = (String)request.getAttribute("msg");
System.out.println(msg);
//void removeAttribute(String name):通过键移除键值对
request.removeAttribute("msg");
msg = (String)request.getAttribute("msg");
System.out.println(msg);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
2.3、请求转发
package com.wedu.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 请求转发
*/
@WebServlet("/requestDemo")
public class RequestDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
request.setAttribute("msg","hello");
//设置转发路径
request.getRequestDispatcher("/requestDemo1").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
package com.wedu.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 请求转发
*/
@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String msg = (String)request.getAttribute("msg");
System.out.println(msg);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
2.4、获取ServletContext
package com.wedu.demo.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 获取和操作ServletContext
*/
@WebServlet("/requestDemo")
public class RequestDemo extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//ServletContext getServletContext():获取ServletContext对象
ServletContext context = request.getServletContext();
String filename = "a.txt";
//String getMimeType(String file):获取MIME类型
String mimeType = context.getMimeType(filename);
System.out.println(mimeType);
//void setAttribute(String name,Object object):存储数据
context.setAttribute("msg","hello");
//Object getAttribute(String name):通过键获取值
String msg = (String)context.getAttribute("msg");
System.out.println(msg);
//void removeAttribute(String name):通过键移除键值对
context.removeAttribute("msg");
msg = (String)context.getAttribute("msg");
System.out.println(msg);
//String getRealPath(String path):获取文件的真实(服务器)路径
String realPath = context.getRealPath("/b.txt");
System.out.println(realPath);//web目录下资源访问
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
三、应用实例
登陆案例