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() {

}