💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
# 请求行 ## 重要方法 * String getMethod():获取请求的方式. * String getContextPath():获取项目动态路径. * String getRemoteAddr():获取请求者的IP. ## 了解的方法 * String getRequestURI():获取的是请求的资源(不带get请求的参数). * Sting getQueryString() :获取get请求的参数. * String getProtocol():获取协议和版本. ## 实例 ~~~ System.out.println(request.getMethod().equals("GET")); System.out.println(request.getContextPath()); System.out.println(request.getRemoteAddr()); System.out.println(request.getRequestURI()); System.out.println(request.getQueryString()); System.out.println(request.getProtocol()); ~~~ 结果 ``` true /dome 127.0.0.1 /dome/show name=jack HTTP/1.1 ``` # 请求头 ## 重要方法 * String getHeader(String name) :获取 一个请求头. ~~~ System.out.println(request.getHeader("accept")); ~~~ ## 了解方法 * int getIntHeader(String name) * long getDateHeader(String name) * Enumeration getHeaders(String name) # 请求体 请求体就是请求的实体参数.key&value形式. ## 获取请求体的数据(适用get和post) http://127.0.0.1:8080/dome/show?name=jack&hobby=1&hobby=2 ~~~~~~ //获取单值 String name = request.getParameter("name"); System.out.println(name); //获取多值 String[] hobbies = request.getParameterValues("hobby"); System.out.println(Arrays.toString(hobbies)); //获取所有参数 Map<String, String[]> parameterMap = request.getParameterMap(); for (String key : parameterMap.keySet()) { System.out.println(Arrays.toString(parameterMap.get(key))); } ~~~~~~ # 乱码产生原因 服务器和浏览器编码 /解码不一致造成的. * 响应的乱码:服务器用iso-8859-1方式编码 ,浏览器用UTF-8方式解码. 解决方式 : response.setContentType("text/html;charset=utf-8"); * 请求的乱码: 浏览器用utf-8编码,服务器是用iso-8859-1解码 . * 针对于下载功能,文件名也会产生乱码,不同浏览器对下载文件的中文名的编码格式不一致. 解决方式:ie和chrome : URIEncoder.encode("中文名","编码方式"). # 注意 tomcat8 虽说是用UTF-8编码,但是只是针对GET请求,POST请求还是ISO-8859-1的编码.在server.xml设置的字符集也是只能设置GET的编码方式无法改变POST的. 有个TOMCAT缓冲区的概念,使用request.setCharacterEncoding("utf-8") 就是设置缓冲区的字符集. # 请求的乱码解决方式 第一种方式 ~~~ tomcat8之前默认的编码方式都是"iso-8859-1",8和8之后都是utf-8. //模拟浏览器 String name = "杰克"; System.out.println(name); //编码 String encode = URLEncoder.encode(name, "utf-8"); System.out.println(encode); //模拟服务器,解码 String decode = URLDecoder.decode(encode, "iso-8859-1"); System.out.println(decode); ~~~ 第二种方式 ~~~ String str = "中国"; byte[] bytes = str.getBytes("iso-8859-1"); //编码方式 System.out.println(new String(bytes, "utf-8")); //解码方式 ~~~ ## 针对post请求 ~~~ request.setCharacterEncoding("utf-8"); ~~~ # 请求转发 ~~~ request.getRequestDispatcher("/内部路径(不带conext的路径)").forward(request, response); ~~~ ## 重定向和请求转发区别 1. 重定向发送两次请求,请求转发发送一次请求. 2. 重定向地址栏变化请求转发地址栏不变. 3. 重定向是响应发起的,请求转发是请求发起. 4. 重定向路径不带协议和主机的绝对路径,请求抓发是内部路径. 5. 重定向不能使用request的属性操作,请求转发可以使用request属性操作. # request域对象 request域只能在一个访问内有效.重定向不能使用request域,请求转发可以. 创建:请求的时候. 销毁:生成响应的时候. ## 方法 * request.setAttribute(name,value). * request.getAttribute(name). * request.removeAttribute(name).