javaweb——HttpServletRequest对象学习

本文深入探讨了HttpServletRequest对象的功能,包括客户端请求的获取、参数处理、头信息读取及如何用作域对象进行数据转发。通过示例代码,展示了如何利用request对象处理GET和POST请求,以及如何获取和设置属性。
一、HttpServletRequest介绍

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

二、request的常见方法

request.getRequestURL(): 浏览器发出请求时的完整URL
request.getRequestURI(): 浏览器发出请求的资源名部分
request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
request.getRemoteHost(): 浏览器所处于的客户机的主机名
request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
request.getLocalAddr(): 服务器的IP地址
request.getLocalName(): 服务器的主机名
request.getMethod(): 得到客户机请求方式一般是GET或者POST

当客户端通过Http协议访问服务器时,即访问HelloServlet类映射的地址/hello时会发送请求,通过以下方式将所获信息打印到tomcat中。

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
	
	public void init(ServletConfig config) {
		System.out.println("init of Hello Servlet");
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
		
		System.out.println("浏览器发出请求时的完整URL:"+request.getRequestURI());
		System.out.println("浏览器发出请求时的资源名部分:"+request.getRequestURI());
		System.out.println("请求行中的部分参数:"+request.getQueryString());
		System.out.println("浏览器所处的客户机的IP地址:"+request.getRemoteAddr());
		System.out.println("浏览器所处的客户机的主机名:"+request.getRemoteHost());
		System.out.println("浏览器所处的客户机使用的网络端口:" + request.getRemotePort());
		System.out.println("服务器的IP地址:"+request.getLocalAddr());
		System.out.println("服务器的主机名:"+request.getLocalName());
		System.out.println("得到客户机请求方式:"+request.getMethod());
		
	}
}

在这里插入图片描述

三、获得客户机请求参数(客户端提交的数据)

request.getParameter(): 是常见的方法,用于获取单值的参数
request.getParameterValues(): 用于获取具有多值的参数
request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。

<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
	<form action="register" method="get">
		账号:<input type="text" name="name"> <br>
		密码:<input type="password" name="password"> <br>
		爱好:dog<input type="checkbox" name="hobits" value="dog"> <br>
			cat<input type="checkbox" name="hobits" value="cat"> <br>
			<input type="submit" value="注册">
	</form>
import java.util.Arrays;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterServlet extends HttpServlet{
	
	protected void service(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("获取用户提交的参数");
		System.out.println("获取用户输入账号name:" + request.getParameter("name"));
		System.out.println("获取用户输入密码password:" + request.getParameter("password"));
		
		String[] hobits = request.getParameterValues("hobits");
		//Arrays.asList  将数组转化为list
		System.out.println("获取具有多值的参数hobits:"+ Arrays.asList(hobits));
		System.out.println("通过getParameterMap遍历所有的参数:");
		Map<String,String[]> parameters = request.getParameterMap();
		Set<String>paramNames = parameters.keySet();
		for(String param : paramNames) {
			String[] value = parameters.get(param);
			System.out.println(param + ":" + Arrays.asList(value));
		}
		
	}
}

在这里插入图片描述

四、获取头信息(能判断是什么浏览器)

request.getHeader() 获取浏览器传递过来的头信息。
request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息

五、request

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

request对象作为一个域对象(Map容器)使用时,主要是通过以下的四个方法来操作
*
1、setAttribute(String name,Object o)方法,将数据作为request对象的一个属性存放到request对象中,例如:request.setAttribute(“data”, data);
*
2、getAttribute(String name)方法,获取request对象的name属性的属性值,例如:request.getAttribute(“data”)
*
3、removeAttribute(String name)方法,移除request对象的name属性,例如:request.removeAttribute(“data”)
*
4、getAttributeNames方法,获取request对象的所有属性名,返回的是一个,例如:Enumeration
attrNames = request.getAttributeNames();

### Java Web 中 `HttpServletRequest` 的使用方法 在Java Web开发中,`HttpServletRequest` 接口扮演着至关重要的角色。它属于Servlet API的一部分,主要用于封装来自客户端的HTTP请求信息[^1]。 #### 获取请求参数 为了获取客户端提交的数据,可以通过如下方式读取表单字段或其他类型的输入: ```java String username = request.getParameter("username"); ``` 此代码片段展示了如何从名为`username`的HTML表单项中提取用户的输入值[^4]。 #### 请求转发与重定向 当需要将控制权传递给另一个资源时,有两种主要的方法来实现这一目标——请求转发和重定向。对于请求转发而言,存在两种不同的途径: - **通过ServletContext** ```java RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/targetPage.jsp"); dispatcher.forward(request, response); ``` - **直接利用request对象** ```java request.getRequestDispatcher("/targetPage.jsp").forward(request, response); ``` 上述两段代码均实现了相同的功能:把当前请求转交给指定的目标页面处理。 而关于重定向,则涉及改变浏览器地址栏中的URL并加载新的网页内容。这通常发生在登录成功后跳转至首页等情况之下: ```java response.sendRedirect("http://example.com/newpage"); ``` 这种方法会告知客户端发起一个新的GET请求指向所提供的链接位置。 #### 处理POST请求 针对特定类型的HTTP方法如POST,可以在对应的doPost()函数内编写逻辑以响应此类操作: ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) { // POST 方法的具体业务逻辑... } ``` 这段声明定义了一个专门用来接收POST请求的服务端点[^2]。 #### 解决Tomcat配置相关问题 有时开发者可能会遇到由于缺少适当设置而导致的应用无法正常运行的情况。例如,在Eclipse环境中部署Web应用程序之前,应当确认IDE已正确关联了所需的Tomcat服务器环境。具体步骤包括但不限于检查项目的构建路径以及确保选择了合适的Server Runtime库版本[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值