JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践

HarmonyOS学习 2021-11-25 19:09:26
java 面试 编程语言 后端开发


request和response对象是由服务器创建的,request对象封装了客户端的请求信息,包括HTTP头信息、系统信息、请求方式和请求参数等。通过调用相关方法可以获取封装信息。当客户端向Web服务器发送请求后,服务器会接收请求,并作出响应响应。response 代表的就是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。

Servlet接口:

当我们创建一个继承HttpServlet抽象类的Servlet类时,会实现doGet与doPost方法,在这两个方法的参数列表中,我们会看到两个类型为HttpServletRequest 与HttpServletResponse 的参数,它们分别对应的时request方法和response方法。

HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。Servlet方法中的请求与响应的类型是ServletRequest,ServletResponse,而doGet/doPost方法的请求与响应的类型是HttpServletRequest,HttpServletResponse,它们分别继承于ServletRequest,ServletResponse两个接口。HttpServlet实现了service方法将两个对象进行了强转。

 Request


Request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据

获取请求数据:

1. 获取请求行数据

  • 方法:

1. 获取请求方式 :String getMethod();

2. 获取虚拟目录:String getContextPath();

3. 获取Servlet路径:String getServletPath();

4. 获取get方式请求参数:String getQueryString();

5. 获取请求URI:String getRequestURI();StringBuffer getRequestURL();

6. 获取协议及版本:String getProtocol();

7. 获取客户机的IP地址:String getRemoteAddr();

URL:统一资源定位符、URI:统一资源标识符

2. 获取请求头数据

  • 方法:

1.通过请求头的名称获取请求头的值:String getHeader(String name);

2.获取所有的请求头名称:Enumeration<String> getHeaderNames();

3. 获取请求体数据:

  • 获取流对象

获取字符输入流,只能操作字符数据:BufferedReader getReader();

获取字节输入流,可以操作所有类型数据:ServletInputStream getInputStream();

  • 从流对象中拿数据

BufferedReader br = request.getReader();

ServletInputStream si= request.getInputStream();

4. 其他功能:

获取请求参数通用方式:

  • 1.根据参数名称获取参数值:String getParameter(String name);

  • 2.根据参数名称获取参数值的数组: String[] getParameterValues(String name);

  • 3.获取所有请求的参数名称: Enumeration<String> getParameterNames();

  • 4.获取所有参数的map集合: Map<String,String[]> getParameterMap();

中文乱码问题:在获取参数前,设置request的编码:request.setCharacterEncoding("utf-8");

请求转发:一种在服务器内部的资源跳转方式

  • 1. 通过request对象获取请求转发器对象: RequestDispatcher getRequestDispatcher(String path)

  • 2. 使用RequestDispatcher对象来进行转发: forward(ServletRequest request, ServletResponse response)

在进行请求转发时,浏览器地址栏路径是不会发生变化,且只能转发到当前服务器内部资源中。转发的请求次数是一次。例:

  • request.getRequestDispatcher("/demo").forward(request,response);

共享数据:

  • 1. 存储数据 void setAttribute(String name,Object obj)

  • 2. 通过键获取值: Object getAttitude(String name)

  • 3. 通过键移除键值对: void removeAttribute(String name)

获取ServletContext: ServletContext getServletContext()

 Response对象


Response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作

response对象的功能:

设置响应头消息:response.setHeader("content-type", "text/html;charset=utf-8")

  • 设置content-type响应头,该头的作用是告诉浏览器响应内容为html类型,编码为utf-8。例:5秒后自动跳转到百度页面:response.setHeader("Refresh","5; URL=http://www.baidu.com")

设置响应体:

  • 1. 获取输出流: 字符输出流:PrintWriter getWriter()、字节输出流:ServletOutputStream getOutputStream()

  • 2. 使用输出流: 将数据输出到客户端浏览器

设置响应状态码及其他方法:

  • 1.设置响应内容为html类型,编码为utf-8: response.setContentType("text/html;charset=utf-8")

  • 2.设置字符响应流的字符编码为utf-8: response.setCharacterEncoding("utf-8")

  • 3.设置状态码: response.setStatus(200)

  • 4.当发送错误状态码时,跳转到固定的错误页面去,并显示错误信息:response.sendError(404, "您要查找的资源不存在")

重定向:在进行重定向时,浏览器的地址栏会发生改变,可以访问其它服务器的资源,同时它的请求次数是两次,重定向的响应头为302,并且必须要有Location响应头来表示第二个请求的URL,我们不能忘记设置。

 //1.设置状态码为302

response.setStatus(302);

 //2.设置响应头location

response.setHeader(“location”,“/demo/response”);

 //3.实现重定向方法

response.sendRedirect(“/demo/response”);

路径的书写方法:

  1. 相对路径:通过相对路径不可以确定唯一资源,如:./index.html,这种路径的书写方式,我们要根据当前资源和目标资源之间的相对位置关系进行书写./表示当前目录,../表示后退一级目录,以此类推。我们一般使用虚拟目录动态获取:request.getContextPath()

  2. 绝对路径:通过绝对路径可以确定唯一资源,如: http://localhost/webproject/demo1,表示我们要找的资源就在路径对应的文件夹下面。

 ServletContext对象


最后

针对以上面试题,小编已经把面试题+答案整理好了

JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践_面试

JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践_Java_02

JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践_后端开发_03

面试专题

JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践_后端开发_04

除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习

JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践_面试_05

JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践_后端开发_06

?JavaWeb快速入门--Servlet(2),java程序设计精编教程第三版上机实践_后端开发_07

本文已被 CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

版权声明
本文为[HarmonyOS学习]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15438507/4690517

  1. jQuery-实例方法
  2. jQuery-dom和jQuery,入口函数(基本知识)
  3. JavaScript-this指向问题
  4. JavaScript-封装与继承(两种)
  5. JavaScript-包装类型
  6. JavaScript-传值(引用类型,基本类型)
  7. JavaScript-面向对象(构造函数,实例成员,静态成员)
  8. JavaScript-解构赋值
  9. JavaScript-箭头函数
  10. JavaScript-参数
  11. JavaScript-预解析(变量提升)
  12. JavaScript-闭包closure
  13. JavaScript-声明变量的关键字
  14. JavaScript - mot - clé pour déclarer une variable
  15. Fermeture de fermeture JavaScript
  16. JavaScript Pre - parse (promotion des variables)
  17. Paramètres JavaScript
  18. Fonction de flèche JavaScript
  19. JavaScript - déconstruction assignations
  20. Common annotations in springboot
  21. Building CentOS 7.6 with Linux
  22. JavaScript - orienté objet (constructeur, membre d'instance, membre statique)
  23. JavaScript value Transfer (reference type, Basic type)
  24. JavaScript - type d'emballage
  25. linux deepin/ubuntu安装flameshot火焰截图
  26. JavaScript - encapsulation et héritage (deux)
  27. JavaScript JS method for writing 99 multiplication table
  28. 從零開始學java - 第二十五天
  29. Apprendre Java à partir de zéro - jour 25
  30. Les voitures d'hiver, les voitures électriques et les voitures à essence ne sont pas les mêmes?
  31. JavaScript - ceci pointe vers le problème
  32. Copie JavaScript
  33. Spring boot quickly integrates swagger
  34. linux deepin/ubuntu安裝flameshot火焰截圖
  35. Capture d'écran de flamme de l'installateur de flamme Linux deepin / Ubuntu
  36. Jquery DOM et jquery, fonctions d'entrée (bases)
  37. Méthode d'instance jquery
  38. Méthode et démonstration de code dans l'interface de liste en Java
  39. 【错误记录】Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )
  40. Démarrage du Zookeeper
  41. Java oom Cognition
  42. Java 开发者最困惑的四件事,值得一看!,BAT面试文档
  43. Java 将两个对象list里面的 某个字段值抽取到一个list里,java选择排序原理
  44. Java 多线程 —— 生产者消费者问题,从基础到深入案例
  45. Java 中设计模式 之 工厂模式,java反射机制的底层原理
  46. 【錯誤記錄】Java 中 ArrayList 排序 ( 使用 Comparator 接口時注意 compare 返回值是 -1 和 +1 )
  47. 【 enregistrement des erreurs 】 tri ArrayList en Java (Notez que les valeurs de retour de comparaison sont - 1 et + 1 lors de l'utilisation de l'interface de comparaison)
  48. Pourquoi Xiaopeng P5 est - il devenu un grand succès dans le cercle? Le Salon de l'automobile de Guangzhou montre encore des compétences polyvalentes
  49. Java 開發者最困惑的四件事,值得一看!,BAT面試文檔
  50. Les quatre choses les plus déroutantes pour les développeurs Java valent la peine d'être regardées! Document d'entrevue sur les MTD
  51. k8s-Pod污点与容忍
  52. k8s-Pod污点与容忍
  53. K8s POD Contamination and Tolerance
  54. K8s POD Contamination and Tolerance
  55. mysql常用语句——GROUP BY和HAVING
  56. Spring boot quickly integrates swagger
  57. mysql常用語句——GROUP BY和HAVING
  58. MySQL Common statements - group by and having
  59. Le défi du pinceau leetcode - Javascript: 110. Arbre binaire équilibré
  60. [notes d'apprentissage de première ligne] day44: XMLHttpRequest