当前位置 : 主页 > 编程语言 > java >

4 HttpServletRequest

来源:互联网 收集:自由互联 发布时间:2023-03-22
HttpServletRequest HttpServletRequest对象代表客户端浏览器的请求,当客户端浏览器通过HTTP协议访问服务器时,HTTP请求中的所有信息都会被Tomcat所解析并封装在这个对象中,通过这个对象提供

 HttpServletRequest

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

1.获取请求行信息

req.getRequestURL()://返回客户端浏览器发出请求时的完整URL。 req.getRequestURI()://返回请求行中指定资源部分。 req.getRemoteAddr()://返回发出请求的客户机的IP地址。 req.getLocalAddr()://返回WEB服务器的IP地址。 req.getLocalPort()://返回WEB服务器处理Http协议的连接器所监听的端口。

 

2.获取请求头信息

req.getHeader("headerKey")://根据请求头中的key获取对应的value。

String headerValue = req.getHeader("headerKey");

req.getHeaderNames()://获取请求头中所有的key,该方法返回枚举类型。

Enumeration<String> headerNames = req.getHeaderNames();

 

测试代码

public class Servlet3 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(req.getRequestURL());//返回客户端浏览器发出请求时的完整URL。 System.out.println(req.getRequestURI());//返回请求行中指定资源部分。 System.out.println(req.getRemoteAddr());//返回发出请求的客户机的IP地址。 System.out.println(req.getLocalAddr());//返回WEB服务器的IP地址。 System.out.println(req.getLocalPort());//返回WEB服务器处理Http协议的连接器所监听的端口。 System.out.println("主机名: " + req.getLocalName()); System.out.println("客户端PORT: " + req.getRemotePort()); System.out.println("当前项目部署名: " + req.getContextPath()); System.out.println("协议名:"+req.getScheme()); System.out.println("请求方式:"+req.getMethod()); // 根据请求头名或者请求头对应的值 System.out.println(req.getHeader("Accept")); // 获得全部的请求头名 Enumeration<String> headerNames = req.getHeaderNames(); while (headerNames.hasMoreElements()){ String headername = headerNames.nextElement(); System.out.println(headername+":"+req.getHeader(headername)); } }}

 

3.获取请求数据

在Servlet获取请求数据的方式

req.getParameter("key")://根据key获取指定value。

String str = req.getParameter("key");

获取复选框(checkbox组件)中的值

eq.getParameterValues("checkboxkey")://获取复选框(checkbox组件)中的值,返回一个String[]。

String[] userlikes = req.getParameterValues("checkboxkey");

获取所有提交数据的key

req.getParameterNames()://获取请求中所有数据的key,该方法返回一个枚举类型。

Enumeration<String> parameterNames = req.getParameterNames()

使用Map结构获取提交数据

req.getParameterMap()://获取请求中所有的数据并存放到一个Map结构中,该方法返回一个Map,其中key为String类型value为String[]类型。

Map<String, String[]> parameterMap = req.getParameterMap();

设置请求编码

req.setCharacterEncoding("utf-8")

请求的数据包基于字节在网络上传输,Tomcat接收到请求的数据包后会将数据包中的字节转换为字符。在Tomcat中使用的是ISO-8859-1的单字节编码完成字节与字符的转换,所以数据中含有中文就会出现乱码,可以通过req.setCharacterEncoding("utf-8")方法来对提交的数据根据指定的编码方式重新做编码处理。

测试代码:

前端:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><!--开发form表单注意事项1form 不是from2form表单内部不是所有的标签信息都会提交 一些输入信息 input select textarea ... ...3要提交的标签必须具备name属性 name属性的作用是让后台区分数据 id便于在前端区分数据4要提交的标签一般都要具备value属性 value属性确定我们要提交的具体的数据5 get post get方式数据是通过URL携带 提交的数据只能是文本 提交的数据量不大 get方式提交的数据相对不安全 post 将数据单独打包放到请求体中 提交的数据可以是文本可以是各种文件 提交的数据量理论上没有上限 post方式提交数据相对安全 当一个表单标签 readonly只读 也是会提交数据的 hidden 隐藏 也是会提交数据 disabled 不可用 显示但是不提交--><form method="get" action="myServlet"> <table style="margin: 0px auto" width="300px" cellpadding="0px" cellspacing="0px" border="1px"> <tr> <td>用户名</td> <td> <input type="text" name="username" id="in1" value="12345" disabled > </td> </tr> <tr> <td>密码</td> <td> <input type="password" name="pwd"> </td> </tr> <tr> <td>性别</td> <td> <input type="radio" name="gender" value="1" checked>男 <input type="radio" name="gender" value="0">女 </td> </tr> <tr> <td>爱好</td> <td> <input type="checkbox" name="hobby" value="1">蓝球 <input type="checkbox" name="hobby" value="2">足球 <input type="checkbox" name="hobby" value="3">羽毛球 <input type="checkbox" name="hobby" value="4">乒乓球 </td> </tr> <tr> <td>个人简介</td> <td> <!--文本域 双标签 页面上显示的文字是双标签中的文本 不是value属性 文本域提交的数据不是value属性值,是双标签中的文本 --> <textarea name="introduce" >b</textarea> </td> </tr> <tr> <td>籍贯</td> <td> <!-- select option没有定义value属性 那么就提交option中间的文字(不推荐) --> <select name="provience"> <option value="1">a京</option> <option value="2">b津</option> <option value="3">c冀</option> </select> </td> </tr> <tr align="center"> <td colspan="2"> <input type="submit" value="提交数据"> </td> </tr> </table></form></body></html>

 

Servlet:

package com.mashibing.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;import java.util.Enumeration;import java.util.Map;import java.util.Set;/** * @Author: Ma HaiYang * @Description: MircoMessage:Mark_7001 */public class MyServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // req获取参数 // 如果 前端发过来的数据由数据名但是没有值, getParameter返回的是一个空字符串 "" // 获取的参数在提交的数据中名都没有,getParameter返回的是null String username = req.getParameter("username"); System.out.println("username:"+username); System.out.println("password:"+req.getParameter("pwd")); System.out.println("gender:"+req.getParameter("gender")); // hobby=1&hobby=2&hobby=3 想要获得多个同名的参数 getParameterValues 返回的是一个Sting数组 String[] hobbies = req.getParameterValues("hobby"); System.out.println("hobbies:"+ Arrays.toString(hobbies)); // textarea System.out.println("introduce:"+req.getParameter("introduce")); // select System.out.println("provience:"+req.getParameter("provience")); System.out.println("___________________________"); // 如果不知道参数的名字? // 获取所有的参数名 Enumeration<String> pNames = req.getParameterNames(); while(pNames.hasMoreElements()){ String pname = pNames.nextElement(); String[] pValues = req.getParameterValues(pname); System.out.println(pname+":"+Arrays.toString(pValues)); } System.out.println("________________________________"); Map<String, String[]> pmap = req.getParameterMap(); Set<Map.Entry<String, String[]>> entries = pmap.entrySet(); for (Map.Entry<String, String[]> entry : entries) { System.out.println(entry.getKey()+":"+Arrays.toString(entry.getValue())); } }}

网友评论