一,原理html
二,request对象的继承体系结构web
三,request功能:面试
1,获取请求行数据
GET /test/ldemo1?name=zhangsan HTTP/1.1
方法:
1,获取请求方式:GET
string getmethod()
2,获取虚拟目录:/test (重要,之后常常用到)
string getcontextpath()
3,获取servlet资源路径
string getservletpath()
4,获取get方式请求的参数:name=zhangsan
string getQeurystring()
5,获取URI:/test/demo1 (重要,经常使用)
string getrequestERI(): /test/demo
URI:统一资源标识符
stringbuffer getrequestURL():http://localhost/test/demo1
URL:统一资源定位符
6,获取协议及版本信息
string getprotocol()
7,获取客户机的IP地址
string getremoteaddr()apache
2,获取请求头数据
方法:
1,string getheader(string name):经过请求头的名称来获取请求头的值
2,getheadernames()获取全部的请求头名称数组
3,获取请求体数据
1,请求体:只有post请求方式,才有请求体,在请求体种封装了post请求的请求参数。
步骤:
1,获取流对象
bufferedreader getreader():获取字符输入流,只有操做字符数据
servletinputstream getinputstream():获取字节流,能够操做全部数据类型数据
2,再从流对象中获取数据浏览器
4,其余功能
1,获取请求参数的通用方法:不管是get仍是post
(1),string getparameter(string name):根据参数名获取值
(2),string[] getparametervalues(string name):根据参数名称获取参数值的数组
(3),Enumeration getparameternames():获取全部的请求的参数名称
(4),Map<string string []> getparameterMap():获取全部参数的map集合
中文乱码问题:
get方式:tomcat8已经解决了
post方式:会乱码;
解决方式:设置request的编码;request.setcharacterencoding(“utf-8”)tomcat
2,请求转发:一种在服务器内部的资源跳转方式bash
(1),步骤:
1,经过request对象获取请求转发的对象:requestdispatcher getrequestdispatcher(string path)
2,使用requestdispatcher对象进行转发:forward(servletrequest res,servletresponse resp)服务器
(2),特色:
1,浏览器地址栏不发生改变
2,只能转发当前的服务器内部资源
3,转发是一次请求cookie
3,数据共享
域对象:一个有做用范围的对象,能够在范围内共享资源数据
request域:表明一次请求的范围,通常用于请求转发的多个资源中共享数据
方法:
1,void setattribute(string name,object obj):存储数据
2,object getattibute(string name):经过键获取值
3,void removeattribute(string name):经过键移出键值对
4,获取servletcontext
(1),表明整个web应用,能够和程序的容器(服务器)来通讯
servletcontext getservletcontext()
获取方式:request.getservletcontext();
(2),功能:
获取MIME类型: string getmimetype(string file)
域对象:共享数据 ;
获取文件真实(服务器)路径:string getrealpath(string path)
比较重要的测试代码:
1,getheadernames()获取全部的请求头名称
Enumeration<String> headers = req.getHeaderNames(); while (headers.hasMoreElements()) { String string = headers.nextElement(); String value = req.getHeader(string); System.out.println(string+": "+value); }
打印结果:
host: localhost:8080 connection: keep-alive upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9,en;q=0.8 cookie: JSESSIONID=6E7FC596F895D533CB872A38F2E173AA; Hm_lvt_f1ca44b62370e4b7dc11d5937e51c2d6=1582686890
2,Map<string string []> getparameterMap():获取全部参数的map集合
//获取参数 的map集合 req.setCharacterEncoding("utf-8"); Map<String, String[]> map = req.getParameterMap(); //遍历 Set<String> keySet = map.keySet(); for (String keyname : keySet) { //获取键获取值 String[] key = map.get(keyname); System.out.println(keyname); for (String values : key) { System.out.println(values); } System.out.println("----------------"); }
打印结果
username wangwu ---------------- password 1234 ---------------- hobby game study ----------------
3,Enumeration getparameternames():获取全部的请求的参数名称
Enumeration<String> parameterNames = req.getParameterNames(); while (parameterNames.hasMoreElements()) { String name = parameterNames.nextElement(); String[] parameterValues2 = req.getParameterValues(name); for (String string : parameterValues2) { System.out.println(string); } }
打印结果同上
4,数据共享,使用requestdispatcher对象进行转发:forward(servletrequest res,servletresponse resp)
登录的案例
User login = userDao.login(loginUser); if (login!=null) { req.setAttribute("login", login); RequestDispatcher requestDispatcher = req.getRequestDispatcher("/successservlet"); requestDispatcher.forward(req, resp); } else { req.getRequestDispatcher("/failservlet").forward(req, resp); }
四,response对象
补充说明:
重定向与转发的区别(我面试的经历):
重定向:redirect
1,地址栏发生变化
2,能够访问其余站点的资源
3,重定向是两次请求
转发:forward
1,地址栏不发生变化
2,抓发只能访问当前服务器内部的资源
3,转发是一次请求
先整理到这吧。。。。。。