1.HttpServletRequest
我们在创建servlet时会覆盖service()方法,并且还会使用到doGet()和doPost()方法,在这些方法中都有一个代表请求的request和一个代表响应的response。
service中的response类型是ServletRequest,doGet/doPost中的类型是HttpServletRequest
HttpServletRequest是ServletRequest的子接口,功能和方法更加强大,我们学习的就是HttpServletRequest
request的运行流程
tomcat内核解析请求资源 >>> 将请求资源封装到request >>> 创建servlet对象,并将request传入
2.request的作用
获得请求行,获得请求头,获得请求体(post/get)
2.1)获得请求行
获得客户端的请求方式:String getMethod();
获得web应用名称:String getContextPath();(划重点)
2.2)获得请求头
String getHeader(String name);请求头中都是键值对形式存在,通过指定name(即key)即可获得指定值(value)
2.3)获得请求体
a.请求体中有两种提交方式get/post
get方式的数据格式:直接嵌套在http访问地址后面(http://localhost:8080/WEB15_request/head?username=admin)
post方式的数据格式:储存在请求体内部,以键值对形式(key:value)
b.获得数据的三种方式(划重点),三种方式都能获得get或post数据
String getParameter(String name);通过指定name(key)来获取指定单个表单值
String username = request.getParameter("username");
String[] getParameterValues(String name);获得多个表单值,例如获取爱好
String[] hobbys = request.getParameterValues("hobby");
for(String hobby:hobbys){
System.out.println(hobby);
Map<String , String[]> getParameterMap();获得所有参数,将参数封装到Map<String , String[]>(必须是String,String[])
Map<String, String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> entry : map.entrySet()) {
System.out.println(entry.getKey());
for (String str : entry.getValue()) {
System.out.println(str);
}
System.out.println("-------------------------");
}
得到数据乱码问题
post方式数据乱码:request.setCharacterEncoding("UTF-8");
get方式数据乱码:String username = new String(username.getBytes("iso8859-1"),"UTF-8");先转iso8859-1编码 在转utf-8解码
3.request内部转发和request(划重点)
request内部转发
直接从一个servlet转到另一个servlet,地址栏不变,还能携带request域数据(重定向不能)
request.getRequestDispatcher("/login.jsp").forward(request, response);
request域
request对象也是一个存储数据的区域对象,数据的生命存在周期为一次请求,三个域的通用方法
setAttribute(String name, Object o);存入数据
getAttribute(String name);取出数据
removeAttribute(String name);删除数据
总结
request获得行的内容
request.getMethod()
request.getRequestURI()
request.getRequestURL()
request.getContextPath()
request.getRemoteAddr()
request获得头的内容
request.getHeader(name)
request获得体(请求参数)
String request.getParameter(name)
Map<String,String[]> request.getParameterMap();
String[] request.getParameterValues(name);
注意:客户端发送的参数 到服务器端都是字符串
获得中文乱码的解决:
post:request.setCharacterEncoding(“UTF-8”);
get:parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);
request转发和域
request.getRequestDispatcher(转发的地址).forward(req,resp);
request.setAttribute(name,value)
request.getAttribute(name)