Request: 1.request和response对象的原理 A.request和response对象是由服务器创建的,我们来使用就行; B.request对象是来获取请求消息; C.response对象是来设置响应消息; 2.request对象继承体系结构: ServeletRequest(接口)------继承---->HttpServletRequest(接口)-----实现---->org.apache.catalina.connector.RequestFacade (类) RequestFacade (类)由tomcat提供 3.request功能: 3.1.获取请求消息数据(请求数据分为4中:请求行,请求头,请求体,请求空行): A.获取请求行数据: 请求行数据:GET/day74/demo1?name=zhangsan HTTP/1.1 方法: **1.(重点)**获取虚拟目录:/day14 * String getContextpath() **2.(重点)**获取请求URI:/day14/demo1 * String getRequestURI(): // /day14/demo1 * StringBuffer getRequestURL() // http:localhost/day14/demo1 3.获取请求方式:GET * String getMethod() 4.获取Servlet路径:/demo1 * String getServletpath() 5.获取get方法请求参数: name=zhangsan * String getQueryString() 6.获取版本及协议:HTTP/1.1 * String getProtocol() 7.获取客户机的IP地址 * String getRemoteAddr() B.获取请求头数据: 方法: * String getHeader(String name):通过请求头的名称来获取请求头的值 C.获取请求体数据: *请求体:只有post请求方式,才有请求体,在请求体中封装了post请求的请求参数 步骤: 1.获取流对象: A. BufferedReader getReader() :获取字符流输入流,只操作字符数据 B.ServletInputStream getInputStream() :获取字节输入流,可以操作 所有类型的数据 2.再从流对象中拿数据: 3.2.其他功能 1.获取请求参数通用方式(不论是get还是post): **A.**String getParmeter(String name ):根据参数名称获取参数 //例如name写username 那么获取到对应的名字 B.String[] getParmeterValues(String name):根据参数名称获取参数值的数组: 比如爱好可能由多个 C.Enumeration getParmeternames(): 获取所有请求的参数名称 **D.**Map<String,String[]> getParmeterMap(): 获取所有参数的map集合 注:中文乱码问题 解决方案:在获取参数前,设置request的编码:request.setCharacterEncoding(“字符集”); //字符集与html页面字符集一致,如utf-8 原因:tomcat8解决了get方式的中文乱码问题,但是post方式还存在,在post方式中加入即可,当然在获取参数之前就加上最好x 2.请求转发: A.步骤: a):通过request对象获取请求转发器对象:RequestDispatcher getRequesDispatcher(String path) b):使用RequesDipatcher对象来进行转发:forward(ServletRequest request,ServletResponse response) B.特点: a):浏览器地址栏路径不发生变化 b):只能转发当前服务器内部资源 c):转发是一次请求 3.3.共享数据: * 域对象:一个由作用范围的对象,可以在范围内共享数据 * request域:代表一次请求的范围 ,一般用于请求转发的多个资源中共享数据(有转发才能共享数据) * 方法: a): void setAttribute(String name,Object obj); 存储数据 //比如存储的数据键为"msg" 值为:name b):object getAttribute(String name): 通过键获取值 //通过msg 来获取name c):void removeSttribute(String name): 通过键移除键值对 //通过移除msg从而移除msg和name两个值 4.获取ServletContext: * servletContext getServletContext();