Servlet

 * 概念* 步骤* 执行原理* 生命周期* Servlet 3.0 注解配置* Servlet的体系结构Servlet -- 接口|GenericServlet--抽象类|HttpServlet--抽象类* GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象* 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可* HttpServlet:对http协议的一种封装,简化操作* 定义类继承HttpServlet* 复写doGet/doPost方法后期jar包(lib)要放在WEB-INF下面。该包内只放jar包和class字节码文件。* 注意:web项目要把jar包放在web文件夹下WEB-INF的lib目录下。* servlet相关配置1.urlpartten:Servlet访问路径* 一个Servlet可以定义多个访问路径:@WebServlet({"/d4","/dd4","/ddd4"})2.路径定义规则* WebServlet("/*")       (*号是一个通配符,什么都可以写,这里表示无论写什么都可以访问到资源路径)* WebServlet("/xx/xx")     (多级资源路径,访问的时候需要都输入)* WebServlet("*.do")        (不加斜杠 :扩展名匹配)

HTTP

* 概念:Hyper Text Transfer Protocol 超文本传输协议* 传输协议:定义了客户端和服务器端通信时发送数据的格式。* 客户端发送给服务器端-->请求      (携带着请求消息数据)* 服务器给客户端说话  -->响应        (响应消息)* 发送消息,接收消息,响应消息,解析消息,服务器端和客户端都需要一个规范的语法来解析消息,所以就有了HTTP协议。
* 特点:1.基于TCP/IP的高级协议2.默认端口号:80        (80端口的地址可以不用输入端口号。比如平时输入网址只是域名,没有输入端口号。)3.基于请求/响应模型的一次请求对应一次响应。4.无状态的:每次请求之间相互独立,不能交互数据。
* 历史版本:      -->所有的图片,css,都是单独的请求。* 1.0:每一次请求响应都会建立新的连接(这里的建立连接是建立TCP连接)* 1.1:复用连接(对缓存的支持也比较好,等等)区别:* TCP:经历三次握手,则可以直接传输数据* HTTP:经历三次握手,每次传输数据还需要请求和响应,那么传输的数据在这些请求和响应的内容中。
* 请求消息数据格式1.请求行* 格式: 请求方式 请求url 请求协议/版本* GET /login.html HTTP/1.1* 请求方式:* HTTP协议有7种请求方式,常用的有两种1. GET:* 请求方式在请求行中* 请求的url长度有限制的* 不太安全(指在请求行中容易被看到)2. POST:请求方式在请求体中* 请求参数在请求体中* 请求的url长度是没有限制的(一般下载文件都用POST)* 相对安全2.请求头* 一堆键值对:* 请求头名称:请求头值* 常见的请求头:(客户端浏览器告诉服务器一些信息)1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息* 可以在服务器端获取该头的信息,解决浏览器的兼容性问题。2.Accept:接收(表示浏览器接收哪些数据)3.Accept-Language:(接收的语言)4.Accept-Encoding:  (接收的严肃哦)4.Referer:告诉服务器,我从哪里来* 作用:1.放盗链2.统计工作5.Connection:keep-alive   -->表示连接一直活着6.Upgrade-Insecure-Requests:1:   表示升级信息3.请求空行:用于分隔POST请求的请求头和请求体的* 空行4.请求体(正文):封装POST请求消息的请求参数* GET方式是没有请求体的* POST有请求体,格式:* username=zhangsan
* 响应消息数据格式

Request

1.request对象和response对象的原理:(请求消息)1. tomcat服务器会根据请求url的资源路径,创建对应的ServletDemo1的对象2. tomcat服务器,会创建request和response对象,request对象中封装请求消息数据。3. tomcat将request和response两个对象传递给service方法,并且调用service方法。4. 程序员(我们),可以通过request对象获取请求消息数据,通过response对象设置响应消息数据。(响应消息)5. 服务器在给浏览器做出响应之前,会从response对象中拿程序员设置的响应消息数据。* 必须明白的是:* request和response对象是由服务器创建的。我们来使用它们* request对象是来获取请求消息,response对象是来响应消息。2.request的继承体系:ServletRequest   --接口  |HttpServletRequest --接口|RequestFacade -- 类* 只需要知道,RequestFacade类中的一些方法来源于上面两个接口中。
3.request功能:1.获取请求消息数据:* 获取请求行数据* GET /day14/demo?name=zhangsan HTTP/1.1* 方法:1.获取请求方式:GET* String getMethod()*   2.获取虚拟目录: /day14  * String getContextPath()3.获取Servlet路径: /demo1* String getServletPath()4.获取get方式请求参数:name=zhangsan      * String getQueryString()*  5.获取请求URI:/day14/demo1   * String getRequestURI(): /day14/demo1* StringBuffer getRequestURL(): http://localhost/day14/demo16.获取协议及版本:HTTP/1.1* String getProtocol()7.获取客户机的IP地址:* String getRemteAddr()* URL:统一资源定位符:http://localhost/day14/demo1* URI:统一资源标识符:/day14/demo1         * URL相当于中华人民共和国,只代表一个国家,URI相当于共和国,可能代表多个国家,所以URI>URL;* 注意:重点掌握打星号的,其中获取内容的是仅限于get请求的,所以后面学通用的获取方法。* 获取请求头数据* 获取请求体数据2.获取请求头数据:* 方法:(重点)  * String getHeader(String name):(这里参数不区分大小写)* request.getHeader("referer"):如果本地浏览器直接访问,则返回null。如果通过超链接等方式访问,则返回从什么地方过来的地址。可以由此进行防盗链或者统计数据操作。* request.getHeader("user-agent"):可以通过此方法获取浏览器的型号和版本,并由此可以做出不同的返回操作,可以解决浏览器的兼容问题。* Enumeration<String> getHeaderNames():获取所有的请求头名称3.获取请求体数据* 请求体: 只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数* 步骤:1.获取流对象:* BufferedReader getReader():获取字符输入流,只能操作输入数据* ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据* 第二个方法在文件上传后讲解。2.其他功能:(重点,常用的方法)1.获取请求参数通用方式:无论get还是post请求方式都可以使用下列方法来获得请求参数。* String getParameter(String name):根据参数名称获取参数值* String[] getParameterValues(String name):根据参数名称获取参数值的数组  hobby=xx&hobby=game* Enumeration<String> getParameterNames():获取所有请求参数的名称* Map<String ,String[]> getParameterMap():获取所有参数的map集合。* 中文乱码问题* get方式:tomcat8 已经将get方式乱码问题解决了* post方式:会乱码* 解决:在获取参数前,设置request的编码:request.setCharacterEncoding("utf-8");2.请求转发:一种在服务器内部的资源跳转方式1.步骤:1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request,ServletResponse response)2.特点:* 浏览器地址栏路径不发生变化* 只能转发到当前服务器内部资源中* 转发是一次请求(是服务器内部的请求,不是客户端多增加一次请求。)* 为什么需要转发?一次请求不能处理,需要用到转发进行协同处理。3.共享数据* 域对象:一个有作用范围的对象,可以在范围内共享数据* request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据* 方法:1.setAttribute(String name,Object ):2.Object getAttribute(String name):通过键获取值3.remove Attribute(String name)通过键移除值* request和response在两个Servlet中是同一个参数,因为请求和返回值只有一次。4.获取ServletContext:* servletCon* dao包就是进行数据库的增删改查的。* login.html中form表单的action路径的写法
* BeanUtils工具类,简化数据封装* 用于封装JavaBean的
1.JavaBean:标准的Java类1.能使用JavaBean必须满足(要求:):* 类必须被public修饰* 必须提供空参的构造器* 成员变量必须使用private修饰* 提供公共setter和getter方法* JavaBean对象就是描述生活中的事物,如人,手机,猫,草,太阳等。2.功能:封装数据
2.概念:成员变量:属性:setter和getter方法截取后的产物例如:getUsername()-->Username-->username
3.方法:1.setProperty(Object bean,String name,Object value):给JavaBean对象设置属性值2.getProperty(Object bean,String name):获取JavaBean对象中指定属性的值,返回指定的属性的值。3.populate(Object obj,Map map):使用该方法可以将获取所有元素的返回的map集合封装成指定的对象。(将map集合的键值对封装到map集合中);* map键是bean对象的属性名,map值是bean对象的属性值。* 使用JavaBean需要导入包。

BeanUtils的基本使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tun3hk7X-1622193124056)(https://i.imgur.com/04VGKtI.png)]

GET获取请求行中的数据的代码演示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zyqAqsI9-1622193124059)(https://i.imgur.com/gpwktpu.png)]

HTTP1.0与1.1的区别的图解演示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xhHmN5Vg-1622193124060)(https://i.imgur.com/SuEK28S.png)]

获取浏览器版本所匹配的返回值的代码演示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLRC2haA-1622193124061)(https://i.imgur.com/j0Pv2aX.png)]

获取请求头数据referer的代码演示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjW5JTPr-1622193124062)(https://i.imgur.com/06uBLZO.png)]

获取请求元素的通用方法的代码演示(重点)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r3iiS0Rq-1622193124062)(https://i.imgur.com/xHt3pTi.jpg)]

转发资源的代码演示

获取所有参数名称的代码演示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8DUUh3V-1622193124063)(https://i.imgur.com/YOb41Ht.png)]

给个关注吧!^^

**服务器的请求与转发_ServletHTTPRequest *相关推荐

  1. java 转发服务器_Java 请求的转发

    ## 请求的转发 ## 1.什么是请求的转发? > 请求转发是指:服务器收到请求,将请求从服务器中转发到另一个服务器 2.请求转发特点 > 服务器地址栏没有变化 > 一次请求 > ...

  2. (Springboot,SpringCloud )RestTemplate原封不动进行路由(ROUTE)支持所有请求方式转发

    代码 package com.phfund.dmsp.transfer.controller;import com.phfund.dmsp.common.util.IpUtils; import or ...

  3. 浏览器发起请求到服务器处理请求的过程

    前言问题:为什么很多站点第二次打开速度会很快? 前面我们已经说了tcp的一些流程,而http协议是建立在tcp协议基础之上的 http是一种无状态的丶允许浏览器向允许浏览器向服务器获取资源的协议,是W ...

  4. 【Netty】使用 Netty 开发 HTTP 服务器 ( HTTP 请求过滤 )

    文章目录 一. HTTP 服务器请求过滤功能 1 . HTTP 服务器资源请求过滤 2 . HTTP 请求过滤方法 二. HTTP 服务器 ( 资源过滤 ) 代码实现 1 . 服务器主程序 2 . 服 ...

  5. [转]android之Apache Http——向服务器发送请求的同时发送参数

    android之Apache Http--向服务器发送请求的同时发送参数 使用Get方法提交: 其他步骤与上一节的操作相符,只是在传送地址的时候发送参数的格式如下: //Sname和Sage是实际的数 ...

  6. 使用$.post和$.get向服务器发送请求

    使用.post和.post和.post和.get向服务器发送请求 HTML <!DOCTYPE html> <html> <head> <meta chars ...

  7. 使用$.ajax向服务器发送请求

    使用$.ajax向服务器发送请求 html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  8. android处理服务器的集合,android集合SSH搭建服务器客户端请求

    android集合SSH搭建服务器客户端请求 (2012-06-14 06:21:53) 标签: android 服务器 杂谈 android集合SSH搭建服务器客户端请求小弟以前是学的J2EE,由于 ...

  9. Ajax学习系列——向服务器发送请求

    1.如何发送请求? 如果需要向服务器发送请求,我们使用的是XMLHttpRequest对象中的open()和send()方法. var xhr = new XMLHttpRequest();//具体创 ...

最新文章

  1. 信息收集工具exiftool获取图片中的exif信息
  2. Android高版本开机广播,android3.1以上,假如程序没有启动过,怎么获取开机广播呢?...
  3. spring order_Spring @Order批注
  4. MATLAB学习笔记(十四)
  5. 蓝桥杯2016年第七届C/C++省赛A组第一题-网友年龄
  6. Python语言入门教程(一)
  7. TPC基准程序及tpmc值
  8. sem与seo的区别与联系
  9. Hexo博客使用 Next主题 后的一些相关配置 记录
  10. 是非人生 — 一个菜鸟程序员的5年职场路 第24节
  11. 还在烦恼ToF的误差问题?有人帮你找到解决方法了!
  12. e4a java_易安卓e4a编译生成R.java文件失败的解决办法
  13. 使用Fluxion搭建钓鱼热点破解WiFi密码
  14. GHM------Gradient Harmonized Single-stage Detector 从梯度的方向来解决样本不均衡的问题
  15. 虚拟机网络模式(NAT模式)
  16. MySQL连接工具(SQLyog、Navicat)下载安装
  17. AAPT: error: resource android:attr/lStar not found.
  18. Java并发编程实战--FutureTask
  19. 全球气候数据下载方式
  20. .Net程序员面试题分享(EF/Sql篇)

热门文章

  1. CAD字体显示问号的解决办法
  2. 仿写小米网站首页 顶部导航栏部分
  3. java计算星座_给定公历日期计算12星座(Java代码实现)
  4. 如何养号---微信权重篇
  5. 节目制作需要用到计算机软件,非线性编辑软件技术的电视节目制作运用论文
  6. Qt基于Qml图片翻转演示
  7. 多态(polymorphic)
  8. 荣耀pad支持html5吗,荣耀平板5
  9. jquery节点追加
  10. web前端,互联网大厂占比10%以上,这类人只会越来越值钱