ToB企服应用市场:ToB评测及商务社交产业平台

标题: JavaWeb基础专项复习5——哀求对象和相应对象request and response [打印本页]

作者: 何小豆儿在此    时间: 前天 15:55
标题: JavaWeb基础专项复习5——哀求对象和相应对象request and response
系列文章目录


1、JavaWeb基础专项复习1——XML文件-CSDN博客
2、JavaWeb基础专项复习2——JSP文件-CSDN博客
3、JavaWeb基础专项复习2——Servlet相干知识-CSDN博客
4、JavaWeb基础专项复习4——会话对象Session and Cookie-CSDN博客

文章目录



1、Tomcat 哀求相应机制

Web 服务器接收到客户端的 HTTP 哀求后,会为每次哀求创建request和response对象,分别用于获取客户端数据和向客户端输出数据。
2、HttpServletRequest 功能

HttpServletRequest在JavaWeb中非常紧张的一个类。它是Servlet的service()方法的参数之一。所以必须要掌握它
request的功能可以分为以下几种:

2.1 获取哀求头数据

通过request.getHeader("哀求头名称")获取指定哀求头数据
request.getHeaderNames()可获取所有哀求头名称。
  1. response.setContentType("text/html;charset=utf-8");
  2. Enumeration names = request.getHeaderNames();
  3. while(names.hasMoreElements()) {
  4.     String name = (String)names.nextElement();
  5.     String value = request.getHeader(name);
  6.     System.out.println(name + ": " + value);
  7.     response.getWriter().println(name + ": " + value + "<br/>");
  8. }
复制代码
2.2 获取哀求相干其他方法

涵盖获取哀求正笔墨节数、哀求范例、哀求方法、客户端 IP 地址等众多方法,还能操纵哀求 URL 各部门信息。

   
  
  3、HttpServletRequest获取参数

3.1 通报参数方式

GET 和 POST,GET 可在地址栏、超链接、表单中通报参数;POST 主要在表单中通报。
GET:

<a href=” http://localhost/param/ParamServlet?p1=v1&p2=v2”>点一下</a>

POST:

3.2 获取参数方法


单值参数接收示例
前台接收
  1. <form action="ParamServlet" method="post">
  2.     <input type="text" name="p1"/><br/>
  3.     <input type="text" name="p2"/><br/>
  4.     <input type="submit" value="提交"/><br/>
  5. </form>
  6. <a href="ParamServlet?p1=v1&p2=v2">Param</a>
复制代码
后台接收
  1. String s1 = request.getParameter("p1");
  2. String s2 = request.getParameter("p2");
  3. response.getWriter().print("p1 = " + s1 + "<br/>");
  4. response.getWriter().print("p2 = " + s2 + "<br/>");
  5. Enumeration names = request.getParameterNames();
  6. while(names.hasMoreElements()) {
  7.     String name = (String)names.nextElement();
  8.     String value = request.getParameter(name);
  9.     System.out.println(name + " = " + value);
  10. }
  11. Map<String, String[]> map = request.getParameterMap();
  12. Set<String> keySet = map.keySet();
  13. for(String key : keySet){
  14.     String[] vals = map.get(key);
  15.     System.out.print(key+" :");
  16.     System.out.println(key+" :" + Arrays.toString(vals));
  17.     System.out.println();
  18. }
复制代码
多值参数接收
多值参数主要就是多选checkbox
例如在注册表单中,如果让用户填写爱好,那么爱好大概就是多个。那么hobby参数就会对应多个值:
前台接收
  1. <form action="ParamServlet" method="post">
  2.     上网:<input type="checkbox" name="hobby" value="netplay" /><br/>
  3.     踢球:<input type="checkbox" name="hobby" value="football" /><br/>
  4.     看书:<input type="checkbox" name="hobby" value="read" /><br/>
  5.     编程:<input type="checkbox" name="hobby" value="programme" /><br/>
  6.     <input type="submit" value="提交"/><br/>
  7. </form>
复制代码
后台接收
  1. String[] hobbies = request.getParameterValues("hobby");
  2. System.out.println(Arrays.toString(hobbies));
  3. Map<String, String[]> map = request.getParameterMap();
  4. Set<String> keySet = map.keySet();
  5. for(String key : keySet){
  6.     String[] vals = map.get(key);
  7.     System.out.println(key+" :" + Arrays.toString(vals));
  8. }
复制代码
3.3 中文乱码处置惩罚

3.3.1 POST 哀求

   我们知道,哀求信息中,只有POST存在正文,所谓POST参数编码就是就是哀求正文的编码。默认情况下,利用getParameter()获取POST哀求参数时,利用的是ISO-8859-1编码。
  方法一,针对字符串本身举行手动转码
  1. String name = request.getParameter("name");
  2. name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
  3. System.out.println("name:"+name);
复制代码
方法二,在获取参数前利用request.setCharacterEncoding("UTF-8")设置编码。
  1. request.setCharacterEncoding("UTF-8");
  2. String name = request.getParameter("name");
  3. System.out.println("name:"+name);
复制代码
对于每个哀求,只需要调用request的setCharacterEncodng()一次,然后所有getParameter()都会利用这个编码来解读参数。但要留意,只对哀求正文有效,即POST参数。
该方法 必须放在获取参数值之前
3.3.2 GET 哀求

方法一,对字符串单独解码
  1. String name = request.getParameter("name");
  2. name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
  3. System.out.println("name:"+name);
复制代码
方法二,在 Tomcat 的server.xml中配置URIEncoding="UTF-8",但 Tomcat8.5 及以上版本无需设置即可支持 URL 通报中文。(不建议利用get哀求通报中文参数
  1. <Connector port="8080" protocol="HTTP/1.1"
  2.                connectionTimeout="20000"
  3.                redirectPort="8443" URIEncoding="UTF-8"/>
复制代码
3.6 HttpServletRequest哀求转发

用于在 Servlet 中实行后台业务逻辑后跳转页面,地址栏不变,可跳转到静态页面或 Servlet,还能在哀求域内设置和获取属性值。
  1. request.getRequestDispatcher("/success.html").forward(request, response);
复制代码
此时我们可以给request来设置当前域中的属性值,在该域之内(当前哀求完成之前)都能获得到该属性值。
  1. request.setAttribute("name", "txjava");
  2. request.getAttribute("name");
复制代码
3.7 request 作用域

范围是一次哀求相应内,每个线程哀求会新生成HttpServletRequest和HttpServletResponse对象。
   ServletContext
ServletContext 代表整个 Web 应用步调的上下文,在服务器启动时为每个 Web 应用创建一个 ServletContext 对象,所有 Servlet 共享这个对象。它主要用于在整个 Web 应用的差别部门之间共享数据、获取 Web 应用的全局信息等。
  HttpSession
HttpSession 用于在服务器端跟踪客户端的会话状态。每个客户端访问服务器时,服务器会为其创建一个唯一的 HttpSession 对象,通过会话 ID 来识别差别的客户端。它可以在用户的多次哀求之间保持数据,适用于存储用户的登录信息、购物车内容等。
  HttpServletRequest
HttpServletRequest 代表客户端的哀求,当客户端向服务器发送哀求时,服务器会创建一个 HttpServletRequest 对象,该对象封装了客户端哀求的所有信息,如哀求头、哀求参数、哀求方法等.
  4、HttpServletResponse 功能


request是哀求对象,而response是相应对象。
response对象用于相应client哀求,向客户输出信息。
他封装了JSP产生的相应,并发送到client以相应client哀求。
4.1 功能介绍

用于相应客户端哀求,包罗设置相应头信息、发送状态码、设置相应正文、重定向等功能。

4.2 设置状态码和其他方法

4.3 设置相应头信息


4.4 中文乱码题目

通过setContentType("text/html;charset=utf-8")和setCharacterEncoding("UTF-8")解决。
  1. response.setContentType("text/html;charset=utf-8");
  2. response.setCharacterEncoding("UTF-8");
  3. response.getWriter().write("张三");
复制代码
4.5 重定向

利用sendRedirect方法,可重定向到差别主机,会使request中的属性失效并开启新的request对象。
   这一点与转发差别。在client浏览器上将会得到跳转后的地址,并又一次发送哀求链接;用户可以大概从浏览器的地址栏中看到跳转后的地址
  1. response.sendRedirect("/param_demo/success.html");
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4