详解HttpServletRequest请求类型API
详解 HttpServletRequest 请求类型API
HttpServletRequest :是客户端浏览器发出的请求被封装的⼀个 HttpServletRequest 对象,该对象中包含了请求的地址、请求的参数、提交的数据以及上传的数据;
1. 获取请求信息的⽅法
获取⼀个请求中各⽅⾯信息的⽅法有:
⽅法描述信息
String getProtocol()返回请求协议的名称
String getMethod()返回请求的 HTTP ⽅法的名称:GET、POST…
String getContextPath()返回请求上下⽂的请求 URl 部分
String getQueryString()返回请求 URL 中的查询字符串
String getParameter(String name)以字符串形式返回请求参数的值,参数不存在返回 null
String getHeader(String name)以字符串形式返回指定的请求头的值
String getCharacterEncoding()返回请求主体中使⽤的字符编码名称
String getContentType()返回请求主体的 MIME 类型,不知道返回 null
int getContentLength()以字节为单位返回请求主体的长度,并提供输⼊流InputStream getInputStream()⽤于读取请求的 body 内容,返回⼀个 InputStream 对象
Enumeration getHeaderNames()返回⼀个枚举,包含在该请求中包含的所有的头名String[] getParameterValues(String name)返回⼀个字符串对象的数组
Enumeration getParameterNames()返回⼀个 String 对象的枚举,包含在该请求中包含的参数的名称
代码⽰例:
package;
import ServletException;
import ServletOutputStream;
import WebServlet;
import HttpServlet;
import HttpServletRequest;
import HttpServletResponse;
import IOException;
@WebServlet("/request")
public class requestStudyServlet extends HttpServlet {
//重写 doGet ⽅法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { //通过打印来学习获取请求的⽅法
System.out.println("请求协议名:"+Protocol());
System.out.println("请求⽅法名:"+Method());
System.out.println("请求上下⽂路径:"+ContextPath());
System.out.println("请求资源路径:"+ServletPath());
System.out.println("请求头中,键为Host的值:"+ Header("Host"));
}
}
启动服务器,运⾏结果:
2. 前端发送请求数据的格式
(1)请求数据为 queryString
前端代码使⽤链接标签并规定好访问路径:request?username=abc&password=123
后端通过 getParameter(String name) 函数 ,通过键来获取值;
前端 HTML 代码:
<meta http-equiv="X-UA-Compatible"content="IE=edge">
<meta name="viewport"content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h3>QueryString:/request</h3>
<!-- 当前页⾯访问的路径:/[contextPath应⽤上下⽂路径]/request.html,
需要跳转到/[contextPath]/request -->
<!-- 也可以直接在url输⼊链接跳转后相同的url绝对路径来访问 -->
<a href="request?username=abc&password=123">get</a>
</body>
</html>
后端代码:
package;
import ServletException;
import ServletOutputStream;
import WebServlet;
import HttpServlet;
import HttpServletRequest;
import HttpServletResponse;
import IOException;
@WebServlet("/request")
public class requestStudyServlet extends HttpServlet {
//重写 doGet ⽅法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { // 注意:http请求时,url会进⾏编码,获取queryString中的中⽂,空格,特殊字符,就需要解码
// 社区版中⽂正常显⽰,但我们写代码要注意可能有乱码的情况
// queryString 访问路径 request?username=abc&password=123
req.setCharacterEncoding("utf-8");//设置body解析的编码格式
System.out.println("username: "+ Parameter("username"));
System.out.println("password: "+ Parameter("password"));
input标签placeholder属性//响应给客户端的内容
}
}
访问路径:
点击 get 链接查看运⾏结果:
(2)请求数据为表单格式
与上⾯点击链接达到相同的效果,也可以通过表单来实现:
前端代码:
<meta http-equiv="X-UA-Compatible"content="IE=edge">
<meta name="viewport"content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h3>表单格式</h3>
<!-- 表单格式,没有设置请求⽅法默认为get⽅法,将form表单中的控件以name为键,选择输⼊的内容为值设置到querystring中-->
<form action="request">
<input type="text"name="username"placeholder="请输⼊⽤户名">
<br>
<input type="password"name="password"placeholder="请输⼊密码">
<br>
<input type="submit"value="提交">
</form>
</body>
</html>
后端代码与上⾯相同~
浏览器显⽰:
后端运⾏结果:
(3)请求数据为 form-data 格式
form-data 格式的简单类型时:getParameter()获取;
前端代码:
<body>
<h3>form-data格式</h3>
<form action="form-data-servlet"enctype="multipart/form-data"method="post">
<input type="text"name="username"placeholder="请输⼊⽤户名">
<br>
<input type="password"name="password"placeholder="请输⼊密码">
<br>
<input type="submit"value="提交">
</form>
</body>
由于请求⽅法为 post ⽅法,因此,后端需要重写 doPost ⽅法;
后端代码:
package;
import ServletException;
import MultipartConfig;
import WebServlet;
import HttpServlet;
import HttpServletRequest;
import HttpServletResponse;
import Part;
import IOException;
@WebServlet("/form-data-servlet")
//form-data格式,需要添加这个注解
@MultipartConfig
public class FormDataServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { //getParameter()也可以获取form-data中的简单类型数据
req.setCharacterEncoding("utf-8");//设置body解析的编码格式
System.out.println("username: "+ Parameter("username"));
System.out.println("password: "+ Parameter("password"));
}
}
form-data 复杂类型格式时:getPart() 获取;
复杂类型:如⽂件类型
前端代码:
<h3>form-data格式</h3>
<form action="form-data-servlet"enctype="multipart/form-data"method="post">
<input type="text"name="username"placeholder="请输⼊⽤户名">
<br>
<input type="password"name="password"placeholder="请输⼊密码">
<br>
<!-- 设置图⽚类型 accept="image/* -->
选择头像:<input type="file"name="head"accept="image/*">
<br>
<input type="submit"value="提交">
</form>
后端代码:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论