HttpServletRequest获取请求

public class DemoServlet01 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.获取HTTP请求消息中的请求方式
		System.out.println("请求方式:" + request.getMethod());
		//2.获取请求行中资源名称部分
		System.out.println("资源部分= url:" + request.getRequestURL());
		//3.获取请求行中的参数部分
		System.out.println("请求行中的参数:" + request.getQueryString());
		//4.获取请求行的协议和版本
		System.out.println("请求的协议个版本:"+request.getProtocol());
		//5.获取WEB应用程序的路径
		System.out.println("获取应用程序的路径:"+ request.getContextPath());	
		//6.获取Servlet的名称或Servlet所映射的路径 
		System.out.println("获取Servlet的名称:"+request.getServerName());
		System.out.println( "路径:" + request.getServletPath());
		//7.获取请求客户端的IP地址
		System.out.println("获取客户端的IP地址:" + request.getRemoteAddr());		
		//8.获取请求客户端的完整主机名
		System.out.println("获取请求客户端的完整主机名:" + request.getRemoteHost());		
		//9.获取请求客户端网络连接的端口号
		System.out.println("客户端网络连接的端口号:" + request.getRemotePort());		
		//10.获取Web服务器上接收当前请求网络连接的IP地址
		System.out.println("接收当前请求网络连接的IP地址:" + request.getLocalAddr());		
		//11.获取Web服务器上接收当前网络连接IP所对应的主机名
		System.out.println("接收当前网络连接IP所对应的主机名:"+request.getLocalName());		
		//12.获取Web服务器上接收当前网络连接的端口号		
		System.out.println("获取Web服务器上接收当前网络连接的端口号:" + request.getLocalPort());
		//13.获取当前请求所指向的主机名		
		System.out.println("获取当前请求所指向的主机名:" + request.getServerName());
		//14.获取当前请求所连接的服务器端口号
		System.out.println("获取当前请求所连接的服务器端口号:" + request.getServerPort());		
		//15.获取请求的协议名
		System.out.println("获取请求的协议名:" + request.getScheme());		
		//16.获取客户端发出请求时的完整URL
		System.out.println("获取客户端发出请求时的完整URL:" + request.getRequestURL());
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}
public class DemoServlet02 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("text/html;charset=utf-8");
		//1.获取一个指定头字段值
		System.out.println(request.getHeader("host"));
		//2.获取指定头字段的多个值
		Enumeration<String> names = request.getHeaderNames();
		while(names.hasMoreElements()){
			System.out.println(names.nextElement());
		}
		//3. 获取请求头中所有的请求头字段的名称
		Enumeration<String> list = request.getHeaderNames();//所有的键
		while(list.hasMoreElements()){
			String name = list.nextElement();
			String header = request.getHeader(name);
			response.getWriter().println(name + " === " + header + "<br/>");
		}
		//4.获取指定名称参数
		System.out.println("获取指定名称参数"+request.getParameter("username"));
		//5.获取所有参数名
		Enumeration<String> parameterNames = request.getParameterNames();
		//6.获取多个参数值
		System.out.println(Arrays.toString(request.getParameterValues("aihao")));
		//7.用于将请求消息中的所有参数名和值装入进一个Map对象中返回
		Map<String, String[]> map = request.getParameterMap();
		for (String key : map.keySet()) {
			System.out.println(key + "--" + map.get(key));
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}


<think>我们正在讨论如何使用HttpServletRequest获取请求接口的相关信息。根据引用[5],我们可以获取请求路径、参数、头信息等。具体方法如下: 1. **获取完整请求URL**:`request.getRequestURL().toString()` 返回完整URL(不包括查询参数),如:`http://192.168.1.6:8080/api/category/query` 2. **获取请求URI(不包含协议、域名和端口)**:`request.getRequestURI()` 如:`/api/category/query` 3. **获取上下文路径(应用名)**:`request.getContextPath()` 如:`/api` 4. **获取查询字符串(URL中?后的部分)**:`request.getQueryString()` 如:`pageSize=5&pageNum=1` 5. **获取Servlet路径(匹配的Servlet路径)**:`request.getServletPath()` 如:`/category/query` 6. **获取客户端IP地址**:`request.getRemoteAddr()` 如:`192.168.1.6` 7. **获取服务器端口**:`request.getServerPort()` 如:`8080` 8. **获取请求头**:`request.getHeader(String name)` 根据头名称获取值,例如:`request.getHeader("User-Agent")`返回浏览器信息 9. **获取请求参数**:`request.getParameter(String name)` 根据参数名获取值,例如:`request.getParameter("pageSize")`返回`5` 10. **获取HTTP请求方法**:`request.getMethod()` 返回`GET`、`POST`等 ### 示例代码 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) { // 获取请求URL StringBuffer url = request.getRequestURL(); System.out.println("URL: " + url.toString()); // 获取URI String uri = request.getRequestURI(); System.out.println("URI: " + uri); // 获取上下文路径 String contextPath = request.getContextPath(); System.out.println("Context Path: " + contextPath); // 获取查询字符串 String queryString = request.getQueryString(); System.out.println("Query String: " + queryString); // 获取Servlet路径 String servletPath = request.getServletPath(); System.out.println("Servlet Path: " + servletPath); // 获取客户端IP String ip = request.getRemoteAddr(); System.out.println("Client IP: " + ip); // 获取服务器端口 int port = request.getServerPort(); System.out.println("Server Port: " + port); // 获取User-Agent头 String userAgent = request.getHeader("User-Agent"); System.out.println("User Agent: " + userAgent); // 获取请求方法 String method = request.getMethod(); System.out.println("HTTP Method: " + method); // 获取特定参数 String pageSize = request.getParameter("pageSize"); System.out.println("pageSize: " + pageSize); } ``` ### 注意事项 - **URL与URI的区别**:URL是完整地址,URI是相对路径(从域名后开始)[^5] - **查询字符串解析**:`getQueryString()`返回原始字符串,而`getParameter()`会自动解析参数 - **多值参数处理**:使用`request.getParameterValues(String name)`获取数组(如复选框数据) ### 应用场景 这些方法常用于: 1. 日志记录(记录请求路径、参数等) 2. 权限验证(通过IP限制访问) 3. 参数校验(获取并检查参数合法性) §§相关问题§§ 1. 如何通过`HttpServletRequest`获取HTTP请求体(Body)中的数据? 2. 在多级代理环境下,如何准确获取客户端真实IP地址? 3. 如何通过`HttpServletRequest`实现文件上传功能? 4. 在Spring Boot中如何封装`HttpServletRequest`的常用操作? 5. `HttpServletRequest`对象的作用域和生命周期是怎样的? </think>### 如何使用 HttpServletRequest 获取请求接口信息 在 Java Web 开发中,可以通过 `HttpServletRequest` 对象获取完整的请求接口信息,以下是关键方法及其用途说明: #### 1. **获取完整请求路径** ```java // 返回完整路径(不含查询参数) String fullUrl = request.getRequestURL().toString(); // 示例输出:http://192.168.1.6:8080/api/category/query ``` #### 2. **分解请求路径** ```java // 获取URI(不含协议和域名) String uri = request.getRequestURI(); // → /api/category/query // 获取应用上下文路径 String contextPath = request.getContextPath(); // → /api // 获取Servlet路径 String servletPath = request.getServletPath(); // → /category/query ``` #### 3. **获取请求参数** ```java // 获取查询字符串(?后的部分) String queryString = request.getQueryString(); // → pageSize=5&pageNum=1 // 获取特定参数值 String pageSize = request.getParameter("pageSize"); // → "5" String pageNum = request.getParameter("pageNum"); // → "1" ``` #### 4. **获取网络信息** ```java // 客户端IP(需注意代理场景) String clientIP = request.getRemoteAddr(); // → 192.168.1.6 // 服务器端口 int port = request.getServerPort(); // → 8080 ``` #### 5. **获取HTTP元数据** ```java // HTTP方法(GET/POST等) String method = request.getMethod(); // → "GET" // 请求头信息 String userAgent = request.getHeader("User-Agent"); String contentType = request.getHeader("Content-Type"); ``` ### 完整使用示例 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) { System.out.println("完整URL: " + request.getRequestURL()); System.out.println("接口URI: " + request.getRequestURI()); System.out.println("查询参数: " + request.getQueryString()); System.out.println("HTTP方法: " + request.getMethod()); // 遍历所有请求头 Enumeration<String> headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String name = headerNames.nextElement(); System.out.println(name + ": " + request.getHeader(name)); } // 获取特定参数 String pageSize = request.getParameter("pageSize"); if(pageSize != null) { System.out.println("分页大小: " + pageSize); } } ``` ### 关键注意事项 1. **参数编码问题** 中文参数需显式设置编码: ```java request.setCharacterEncoding("UTF-8"); ``` 2. **多值参数处理** 使用 `getParameterValues()` 获取数组: ```java String[] interests = request.getParameterValues("interest"); ``` 3. **IP地址可靠性** 代理环境下需优先检查 `X-Forwarded-For` 等头信息(详见前文讨论)。 这些方法可以帮助开发者全面获取HTTP请求的接口信息,适用于日志记录、权限验证、参数处理等场景[^3][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值