| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> JavaWeb知识点总结 -> 正文阅读 |
|
[Java知识库]JavaWeb知识点总结 |
Web初步认识:软件架构:C/S:客户端/服务器端 B/S:浏览器/服务器端 资源分类:?静态资源:所有用户访问后,得到的展示结果都一样 ? ? ? ?静态资源可以直接被浏览器解析 ? ? ? ?如:html、css、JavaScript 动态资源:每个用户访问后,得到的结果可能不一样。 ? ? ? ?动态资源需要先转换为静态资源,再返回给浏览器 ? ? ? ? 如:Servlet/jsp,php,asp… 网络通信三要素:
? ? ?基础传输协议: ????????TCP:安全协议,三次握手。速度稍慢 ????????UDP:不安全协议,速度快 Web服务器软件:服务器:安装了服务器软件的计算机 服务器软件:接收用户的请求,处理请求,做出响应。 Web服务器软件: 主要功能是提供网上信息浏览服务 常见的JAVA相关的Web服务器软件: WebLogic: Oracle公司,大型JavaEE服务器,支持所有的JavaEE规范,收费的。 WebSphere: IBM公司,大型JavaEE服务器,支持所有的JavaEE规范,收费的。 JBOSS: JBOSS公司,大型JavaEE服务器,支持所有的JavaEE规范,收费的。 Tomcat: Apache基金组织,中小型JavaEE服务器,仅仅支持少量的JavaEE规范。开源、免费的。 Servlet:概念:server apple,运行在服务器端的小程序 Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则 将来我们自定义一个类,实现Servlet接口,复写方法。 基本快速使用:
web.xml中配置 Tomcat执行Servlet的原理:1.当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径 2.查找web.xml文件,是否有对应的<url-pattern>标签体内容 3.有则找到对应的<servlet-class>全类名 4.tomcat会将字节码文件加载进内存并创建其对象 5.调用其方法 Servlet中的生命周期:被创建:执行init方法,只执行一次(一般用于加载资源) ????????Servlet什么时候被创建?
????????在<servlet>标签下配置 ????????????????1.第一次被访问时,创建 ????????????????*<load-on-startup>的值为负数 ????????????????2.在服务器启动时,创建 ????????????????*<load-on-startup>的值为0或正数 ????????inint方法只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的 注意:多个用户同时访问时,可能存在线程安全问题。尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值 提供服务:执行service方法,执行多次 ????????每次访问Servlet时,Service方法都会被调用一次。 被销毁:执行destroy方法,只执行一次 Servlet被销毁时执行。服务器关闭时,Servlet被销毁 Servlet3.0注解配置:????????好处: ????????支持注解配置。可以不需要web.xml。 ????????在实现类上使用@WebServlet注解,进行配置 ????????@WebServlet("资源路径") Servlet体系结构:????????Servlet --- 接口 ????????|继承 ????????GenericServlet --- 抽象类 ????????|继承 ????????HttpServlet --- 抽象类 GenericServlet: 该类将Servlet接口中的方法做了默认空实现,只将service()方法作为抽象 将来定义Servlet类时,可以继承GenericServlet类,实现service方法即可。 HttpServlet: 该类对Http协议的封装,简化操作。 使用步骤:
Servlet相关配置: urlpartten:Servlet访问路径 一个Servlet可以定义多个访问路径@WebServlet({"url1","url2"}) 路径定义规则: ????????1./xxx:一般路径 ????????2./xxx/xxx:多层路径,目录结构 ????????3.*.do:*通配符? Http协议:概念: Hyper Text Transfer Protocol 超文本传输协议,规定了 浏览器和万维网之间互相通信的规则 传输协议:定义了客户端和服务器端通信时,发送数据的格式?? 特点:
历史版本: 1.0版本:每一次请求响应都会建立新的连接 1.1版本:会复用请求 请求消息:客户端发送给服务器端的数据 响应消息:服务器端发送给客户端的数据 请求消息数据格式:请求行: ? ? ? ? 格式:
????????请求方式: ????????HTTP协议有七种请求方式,常用的两种: ????????????????GET: ? ? ? ? ? ? ? ? ? ? ? ?1. 请求参数在请求行中 ? ? ? ? ? ? ? ? ? ? ? ?2. 请求的URL长度有限制 ? ? ? ? ? ? ? ? ? ? ? ?3. 不太安全 ????????????????POST: ? ? ? ? ? ? ? ? ? ? ? ?1. 请求参数在请求体中 ? ? ? ? ? ? ? ? ? ? ? ?2. 请求的URL长度无限制 ? ? ? ? ? ? ? ? ? ? ? ?3. 相对安全 请求头:客户端浏览器告诉服务器一些信息 ????????请求头名称:请求头值 ????????常见的请求头: ????????User-Agent:浏览器告诉服务器,访问服务器使用的浏览器版本信息 ????????????????可以在服务器端获取该头的信息,解决浏览器的兼容性问题 ????????Referer: 告诉服务器,当前请求从哪里来的。 ????????????????作用:防盗链、统计工作 请求空行: ????????空行,做分隔POST请求头和请求体的作用 请求体:(正文) ????????封装POST请求消息的请求参数的 响应消息数据格式:响应行: ????????格式:
????????响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态 ????????状态码均由3位数字组成 ????????状态码分类:
响应头: ????????请求头名称:请求头值 ????????常见的响应头: ????????Content-Type:服务器告诉客户端本次响应消息体的数据格式及编码格式 ????????Content-disposition:服务器告诉客户端以什么格式打开响应体数据 ? ? ? ? ? ? ? ? 常用的值: ????????????????in-line:默认值,在当前页面展示 ????????????????attachment;filename=XXX:以附件格式打开响应体。用于文件下载 响应空行:空格、分隔作用 响应体:传输的数据 Request对象:request对象继承体系结构 ????????servletRequest???? --接口 ????????|继承 ????????HttpServletRequest --接口 ????????|实现 ????????org.apache.catalina.connector.RequestFacade --类(Tomcat) request功能:获取请求消息数据: ????????获取请求行数据: ????????例:GET / serlvet/deom01?name=zhangsan HTTP/1.1 ????????常用方法: ????????获取虚拟目录:serlvet ????????????????getContextPath() ????????获取请求的URI/URL: ????????????????getRequestURI():serlvet/deom01 ????????????????getRequestURL():http://locahost/serlvet/deom01 ? ? ? ? ? ? ? ? ? ? ? URL:统一资源定位符 ??????????????????????URI:统一资源标识符 ????????获取请求头数据 ????????方法: ????????????????getHeader(String name):通过请求头名称获取请求头的值 ????????????????Enumeration<String> getHeaderNames():获取所有的请求头名称 ????????获取请求体数据 ????????请求体:只有PSOT请求方式,才有请求体,在请求体中封装了POST请求的请求参数 ????????步骤: ????????????????1.获取流对象 ????????????????????????BufferedReader getReader():获取字符输入流 ????????????????????????ServletInputStream getInputStream():获取字节输入流 ????????????????2.再从流对象中拿数据 获取请求参数通用方式:get/post通用(常用) String getParameter(String name):根据参数名称获取参数值 String[] getParameterValues(String name):根据参数名称获取参数值的数组 Enumeration<String> getParameterNames():获取所有请 求的参数名称 Map<String,String[]> getParameterMap():获取所有参数的Map集合 常见问题: ????????中文乱码问题: ????????get方式:Tomcat8 已经将get方式乱码问题解决了 ????????post方式:中文数据会乱码 ????????解决:获取参数前,设置request编码 ???????? 请求转发(forword):一种在服务器内部的资源跳转方式 步骤:
?????????RequestDispatcher getRequestDispatcher(String path)
????????forward(ServletRequest request Servletponse reponse) 特点:
共享数据: 域对象:一个有作用范围的对象,可以在范围内共享数据 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) ????????设置响应体: ????????????????使用步骤: ? ? ? ? ? ? ? ? ????????1.获取输出流 ????????????????????????????????字符输出流:PrintWriter getWriter() ????????????????????????????????默认编码:ISO-8859-1 ???????????????????????????????字节输出流:ServletOutputStream getOutputStream() ? ? ? ? ? ????????? ? ? 2.使用输出流,将数据输出到客户端浏览器 ????????????????????????乱码问题: ????????????????获取流之前设置流的编码以及告诉浏览器响应体使用的编码: ????????????????????????setContentType("text/html;charset=utf-8"); 重定向:redirect? (资源跳转的方式) ????????sendRedirect(String name); ????????重定向的特点:
ServletContext对象:是一个全局对象, 服务器会给每一个项目(工程)都创建一个ServletContext对象 获取ServletContext对象: 1.通过request对象:getServletContext() 2.通过HttpServlet获取:getServletContext() 功能: ????????获取MIME类型(文件下载): ????????????????MIME类型:在互联网通信过程中定义的一种文件数据类型 ????????格式:大类型/小类型????? 例:? text/html? image/jpeg ????????获取String getMimeType(String file): ????????通过file名获取对应的MIME类型。 域对象:共享数据 ????????ServletContext对象范围:共享所有用户所有请求的数据 ????????void setAttribute(String name,Object obj):存储数据 ????????Object getAttribute(String name):通过键获取值 ????????void removeAttribute(String name):通过键移除键值对 ????????getRealPath(String Path):获取文件真实(服务器)路径 会话技术:会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器发送请求,会话建立,直到一方断开为止。 功能:共享数据 方式: ????????客户端会话技术: Cookie ????????服务器端会话技术: Session Cookie:概念:客户端会话技术,将数据保存到客户端浏览器 基本使用步骤: ? ? ? ? 1.创建Cookie对象,绑定数据: ????????????????new Cookie(String name,String value) ? ? ? ? 2.发送Cookie对象: ????????????????response.addCookie(Cookie cookie) ? ? ? ? 3.获取Cookie,获取数据: ????????????????request.getCookies():返回Cookie数组 实现的原理:????????基于响应头set-cookie和请求头cookie传输实现 cookie的细节问题:一次可不可以发送多个cookie? ????????可以 ????????可以创建多个Cookie对象,使用response调用多次addCookie cookie在浏览器中保存多长时间?
????????????????setMaxAgr(int seconds): ????????????????????????正数:将Cookie数据写到硬盘,持久化存储。 ????????????????????????负数:默认值,跟随浏览器关闭而死亡 ????????????????????????0:删除Cookie信息 cookie能否存储中文?
????????需要将中文数据转码 ---> 一般采用URL编码
????????但是特殊符号数据还是需要采用URL编码 cookie共享问题?
????????如果要多个项目共享,则将path设置"/"即可
如果设置一级域名相同,那么多个服务器之间cookie可以共享 例: setDomain(".bai.com") 那么 tieba.baidu.com 和news.baidu.com中cookie可以共享 Cookie的特点和作用:特点:
作用:
Session:概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。 基本使用步骤:
????????????????request.getSession()
????????????????HttpSession对象: ????????????????Object getAttribute(String name):获取 ????????????????void setAttribute(String name,Object value):设置 ????????????????void removeAttribute(String name):删除 原理:Session的实现是依赖于Cookie的。 Cookie中会有一个 JSESSIONID = XXXXX; 细节上的问题:客户端关闭后,服务器不关闭,两次获取Session是否为同一个?
客户端不关闭,服务器关闭,两次获取Session是否为同一个? 不是同一个,但是要确保数据不丢失
在服务器正常关闭之前,将session对象序列化到硬盘上
在服务器启动后,将session文件反序列化到内存中的session对象即可。 注意:在Tomcat中钝化和活化均已实现,而在IDEA工具中只实现了钝化,在服务器重新开启时Work目录会被删除然后重新创建所以无法实现活化操作。 Session什么时候被销毁?
也可以通过tomcat中的web.xml配置文件中修改 Session的特点:
Session与Cookie的区别?
Filter:过滤器概念:当访问服务器的资源时,过滤器可以将其请求拦截下来,完成一些特殊的功能 作用:一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤… 基本快速使用步骤:
????????????????web.xml配置 ????????????????注解配置 过滤器执行流程:
过滤器声明周期方法:
过滤器配置详解: ????????拦截路径配置:
????????拦截方式配置:资源被访问的方式 ? ? ? ?1. .注解配置: ????????设置dispatcherTypes属性:
? ? ? ?2.?web.xml配置: ????????设置<dispatcher>标签即可 过滤器链(配置多个过滤器):拦截顺序: 如果有两个过滤器:过滤器1和过滤器2 1执行---> 2执行 ---> 资源执行? --->? 2执行 ---> 1执行 过滤器先后顺序:
????????????????按照类名的字符串比较规则比较,值小的先执行 ????????????????如 AFilter 和 Bfilter A先执行
????????????????谁定义在上面,谁先执行 Listener:监听器概念:web的三大组件之一 事件监听机制:
ServletContextListener:监听ServletContext对象的创建和销毁 方法:
步骤:
????????web.xml中: ????????<listener> ????????????????<listener-class>类参数</listener-class> ????????</listener> 指定初始化参数:<context-param> 注解: ????????@WebListener 即可 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 15:21:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |