Request与Response
-
request和sresponse对象原来
request和sresponse对象时由服务器创建的。我们来使用他们 request都西昂时来获取请求消息,response对象是来设置响应消息的
-
request继承体系结构
ServletRequest --- 接口 | 继承 HTTPSservletRequest --- 接口 | 继承 org.apache.catalina.connector.RequestFacade类(tomcat中)
-
request功能
获取请求消息 获取请求行数据 获取请求方式:String getMethod() (*)获取虚拟目录:String getContextPath() 获取Servlet路径:String getServletPath() 获取get方式请求参数:String getQueryString() (*)获取请求URI: String getRequestURI() /demo1/demo StringBuffer getRequestURL() http://lcoalhost /demo1/demo URL:统一资源定位符 http://lcoalhost /demo1/demo URI:统一资源标识符 /demo1/demo 获取协议版本:String getProtocol() 获取客户机ip:String getRemoteAddr() 获取请求头数据 方法: (*)String getHeader(String name) 通过请求头获取请求头的值 Enumeration<String> getHeaderName(); 获取所有的请求头名称 获取请求体数据 请求体:只有post方式才会有请求体,在请求体中封装了post请求参数 步骤: 1.获取流对象 BufferedReader getReader() 获取字符输入流,只能操作字符数据 ServletInputStream getInputStream()获取字节输入流,可以操作所有类型数据 2.在从流对象中获取数据 其他功能 获取请求参数(通用方式) String getParameter(String name) 根据参数名获取参数值 String[] getParameters(String name) 根据参数名获取参数值的数组 Enumeration<String> getParameterNames() 获取请求的所有参数名称 Map<String,String[]> getParameterMap() 获取所有参数的map集合 中文乱码问题:tomcat8已将get方式乱码解决完成,post方式会乱码,解决方法是转换编码:request.setCharacterEncoding(“utf-8”) 请求转发:一种在服务器内部资源跳转的方式 步骤: 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path) 使用RequestDispatcher对象进行转发,forward(ServletRequest request,ServletResponse response) 特点 浏览器地址栏路径不发生变化 只能转发到当前服务器内部资源 转发是一次请求 共享数据 域对象:一个有作用范围的对象,可以在范围内共享数据 request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据 方法: void setAttribute(String name,Object obj)存储数据 Object getAttribute(String name) 通过键获取值 void removeAttribute(String name) 通过键移除键值对 获取 ServletContext ServletContext getServletContext ()
-
Response对象
功能:设置响应消息 设置响应行 格式: HTTP/1.1 200 ok 设置状态码:setStatus(int sc) 设置响应头:setHeader(String name,String value) 设置响应体 使用步骤 设置返回流编码respose.setCharacterEncoding(“utf-8”) 设置响应头,告诉浏览器使用的编码respose.setHeader(“content-type”,“text/html;charset=utf-8”),上一步可以不设置,只设置这一个编码,也可以也可以使用respose.setContentType(“text/html;charset=utf-8”); 获取输出流 字符输出流:PrintWriter getWriter()(不需要刷新) 字节输出流:ServletOutputStream getOutputStream() 使用输出流,将数据输出到客户端浏览器
-
重定向
response.setStatus(302);//设置状态码为302 response.setHeader(“location”,“/demo/test1”);//设置响应头location response.setRedirect(“location”,“/demo/test1”);//简单的重定向 重定向的特点: 地址栏发生变化 可以访问其他服务器资源 是两次请求,不可以使用request共享数据
-
路径写法:
路径分类: 相对路径:通过相对路径不可以确定唯一资源,不以/开头,以.开头,./当前目录,../ 后退一级目录 绝对路径:通过绝对路径可以确定唯一资源,以/开头,客户端使用加虚拟目录,服务器使用不加,如:转发 动态获取虚拟目录 String path = request.getContextPath();
-
ServletContext
概念:代表整个web应用,可以和程序的容器(服务器)进行通信 获取该对象 通过request获取 request.getServletContext() 通过httpServlet获取 this.getServletContext() 功能: 获取MIME类型:在物联网通信过程中定义的一种问价拿数据类型 格式: 大类型/小类型 text/html 方法: String getMimeType(String file) 域对象:共享数据,范围:所有用户的数据,使用要谨慎 方法: void setAttribute(String name,Object obj)存储数据 Object getAttribute(String name) 通过键获取值 void removeAttribute(String name) 通过键移除键值对 获取文件的真实路径(服务器路径) 获取文件的服务器路径 String path = context.getRealPath(“/a.txt”);//在web目录下 String path = context.getRealPath(“/WEB-INF/a.txt”);//在WEB-INF目录下 String path = context.getRealPath(“/WEB-INF/classes/a.txt”);//在src目录下