java之Request
- 格式:pdf
- 大小:128.26 KB
- 文档页数:4
java之Request
0x01、Request
什么是request
在Servlet API中,定义了⼀个HttpServletRequest接⼝,它继承⾃ServletRequest接⼝,专门⽤来封装HTTP请求消息。由于HTTP请求消息分为请求⾏、请求头和请求体三部分,因
此,在HttpServletRequest接⼝中定义了获取请求⾏、请求头和请求消息体的相关⽅法.
Web服务器收到客户端的http请求,会针对每⼀次请求,分别创建⼀个⽤于代表请求的request对象、和代表响应的response对象。
1、操作请求⾏和请求头
操作请求⾏
getMethod();获取请求⽅式
getRemoteAddr() ;获取客户机的IP地址(知道是谁请求的)
getContextPath(); 获得当前应⽤⼯程名(部署的路径);
getRequestURI();获得请求地址,不带主机名
getRequestURL();获得请求地址,带主机名
getServerPort();获得服务端的端⼝
getQueryString();获的请求参数(get请求的,URL的?后⾯的. eg:username=zs&password=123456)
实例代码:
操作请求头
User-Agent: 浏览器信息
Referer:来⾃哪个⽹站(防盗链)
等等
2、操作请求参数
获得请求参数
请求参数乱码的处理使⽤BeanUtils封装请求参数到JavaBean@WebServlet("/demo01")
public class ServletDemo01 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使⽤request对象获取请求⾏的信息:
//1. 获取请求的⽅式(可能会⽤)
String method = request.getMethod();
//System.out.println("请求⽅式为:" + method);
//2. 获取客户端的ip地址
String remoteAddr = request.getRemoteAddr();
//System.out.println("客户端的ip地址是:" + remoteAddr);
//3. 获取项⽬部署的路径(以后可能⽤到)
String contextPath = request.getContextPath();
//System.out.println("项⽬部署路径是:" + contextPath);
//4. 获取请求的url: 统⼀资源定位符 http://localhost:8080/requestDemo/demo01
String url = request.getRequestURL().toString();
//System.out.println("此次请求的url是:" + url);
//5. 获取请求的uri: 统⼀资源标识符,在url的基础上省略了服务器路径"http://loaclhost:8080"
String uri = request.getRequestURI();
System.out.println(uri);
}
}
@WebServlet("/demo02")
public class ServletDemo02 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//根据请求头的name获取value
//⽬标:获取name为user-agent的请求头的信息
String header = request.getHeader("user-agent");
System.out.println("获取的请求头agent为:" + header);
}
}
法名描述
String getParameter(String name)获得指定参数名对应的值。如果没有则返回null,如果有多个获得第⼀个。 例如:username=jack
String[] getParameterValues(String
name)获得指定参数名对应的所有的值。此⽅法专业为复选框提供的。 例如:hobby=抽烟&hobby=喝酒
&hobby=敲代码乱码设置:
get⽅式, 我们现在使⽤的tomcat>=8.0了, 乱码tomcat已经处理好了
post⽅式, 就需要⾃⼰处理
代码实例:
使⽤BeanUtils封装
BeanUtils是Apache Commons组件的成员之⼀,主要⽤于 简化JavaBean封装数据 的操作。
使⽤步骤:
导⼊jar
使⽤BeanUtils.populate(user,map)
表单
User.java
需要有getter和setter,⽆参/有参⽅法、toString重写
Map
getParameterMap()获得所有的请求参数。key为参数名,value为key对应的所有的值。
void setCharacterEncoding(String env); //设置请求体的编码@WebServlet("/demo03")
public class ServletDemo03 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//1. 根据参数名,获取⼀个参数值
String username = request.getParameter("username");
//System.out.println("获取的请求参数username=" + username); //2. 根据参数名,获取多个参数值:⽐如说注册时候的兴趣爱好的复选框
String[] hobbies = request.getParameterValues("hobby");
/*for (String hobby : hobbies) {
System.out.println(hobby);
}*/ //3. 获取所有的请求参数
//getParameterMap()获取所有请求参数,请求参数的参数名就是map的key,请求参数的参数值就是map的value
Map parameterMap = request.getParameterMap();
//遍历出每⼀个请求参数
Set> entries = parameterMap.entrySet();
for (Map.Entry entry : entries) {
String parameterName = entry.getKey();
String[] values = entry.getValue();
for (String value : values) {
System.out.println("参数名:" + parameterName + ",参数值:" + value);
}
}
}
}
注册页⾯
⽤户名
密码
性别男
⼥
兴趣爱好
篮球
⾜球
乒乓球
⽻⽑球
public class User implements Serializable {
private String username;
private String password;
private String gender;
private String[] hobby;
public User() {
}