web相关概念
软件架构都分为哪两种?有什么区别?
- B/S(Brower/Server) 浏览器 <-> 服务器模式
- 例如京东/淘宝/天猫 -> 每次访问要进行资源请求,本次没有备份.
C/S(Client/Server) 客户端 <-> 服务器模式 - 例如QQ/YY/穿越火线/英雄联盟
- 好处:资源在本地有缓存 每次请求无需加载 页面交互比较丰富 安全性能比B/S高.
资源分类都分为哪几种?有什么区别?
静态资源 - 使用静态网页技术发布的资源 -> 特点:每个人访问的静态资源都是一样的.
- 文本/音频/视频/图片/Html/Css/JavaScript
动态资源 - 使用动态网页技术发布的资源 -> 特点:每个人访问的动态资源可能不相同.
- JSP/Servlet
网络通信的三要素是什么? - IP:设备在网络中的唯一标识.
- 端口:应用程序在设备中的唯一标识.
- 协议:数据交互需要遵守的规范.
web服务器软件_概述
什么是服务器? - 安装了服务器软件的计算机 -> 服务器.
什么是服务器软件? - 接收用户的请求,处理请求,做出响应.
什么是Web服务器软件? - Web服务器软件可以部署Web项目,可以让用户通过计算机的浏览器来访问到这些项目. Web容器
什么是JavaEE? - Java企业级规范,13项大的规范.
常见的Web服务器软件有哪些?
WebLogic - ORACLE出的 大型的JavaEE服务器软件 支持所有的JavaEE规范. 收费的.
WebSphere - IBM公司出的 大型的JavaEE服务器软件 支持所有的JavaEE规范. 收费的.
JBoss - JBoss公司出的 大型的JavaEE服务器软件 支持所有的JavaEE规范 收费的.
Tomcat - Apache基金会组织(非盈利的 org) 中小型JavaEE服务器 仅仅支持少量的JavaEE规范 免费的.
tomcat_安装&卸载&启动
如何下载Tomcat?
- https://tomcat.apache.org/download-80.cgi
如何安装Tomcat? - 下载的是压缩包,直接解压就可以使用
- tomcat的解压路径不要有中文/JAVA_HOME配置好/Address is already in use(端口冲突)
如何卸载Tomcat? - 删除掉Tomcat的解压目录就是卸载了Tomcat.
如何启动Tomcat? - 进入到bin目录 双击startup.bat文件 出现DOS命令窗口 -> Server startup in 1171 ms.
Tomcat的目录结构是怎么样的? - bin:放了脚本 -> 启动.关闭,各种bat文件
- conf:放了一些tomcat相关的配置文件.
- lib:放了一些tomcat依赖的文件.
- logs:存放了tomcat的日志文件
- temp:存放了一些临时文件
- webapps:存放的web项目(之后会学习)
- work:工作空间
tomcat_启动问题分析
Tomcat启动时可能产生什么问题?如何解决? - 一闪而过 -> 当你没有在环境变量中配置JAVA_HOME的时候启动TOMCAT就会出现这个问题.
- 启动到一半报错 -> 端口冲突的问题.
Tomcat如何关闭? - 可以右上角也可以通过bin目录的shutdown.bat批处理文件进行管理.
检查是否安装成功 - 开启自己的Tomcat并且通过浏览器查看localhost:8080(端口号)是否可以显示Tomcat的主页.
tomcat_部署项目的方式
Tomcat部署项目的方式有哪些?(项目中不会用这种方式去部署(docker)) - 直接将项目放到tomcat的webapps文件夹下即可.
- 文件夹的名称:虚拟目录/虚拟路径.
- 简化方式 -> 就是将需要部署的文件打成压缩包(war zip包修改名称war)直接放到webapps目录下即可,Tomcat会自动解压缩war包.
tomcat_动态java项目的目录结构
Java动态项目的目录结构是什么?
项目的根路径- WEB-INF(用户通过浏览器是没有办法直接访问WEB-INF中的资源)
- web.xml(Web项目整体核心配置文件)
- classes(我们自己编写的代码编译之后的字节码文件)
- lib(依赖的第三方文件jar包)
- 静态资源
Servlet概述
什么是Servlet?
- WEB-INF(用户通过浏览器是没有办法直接访问WEB-INF中的资源)
- 运行在服务器端的小程序 -> 本质上就是一个(规则)接口,当你自己的类实现了该接口的时候,也就符合了类被Tomcat管理/使用的条件.
Serlvet的配置过程是什么? - 要有一个Java动态项目.
- 创建一个类 -> 实现Servlet接口(刚开始学习实现Service方法即可)
- 在Web.xml中配置Servlet的访问路径.
Servlet的执行原理是什么? - Tomcat接收到请求 -> 拆解路径(localhost:8080/Ab_Tomcat/hello) -> 拆解出hello(请求资源)
- Tomcat会去web.xml中找有没有对应的,如果没有对应的,则直接404.
- 如果有对应的 -> 则找到的对应的代表了一个Servlet资源,也就代表着获取到了Serlvet的全限定类名.
- 通过Class.forName(全限定类名) 进行反射创建对象 -> 通过对象来调用方法(service)
- 因为如果实现了Servlet接口 -> 那么必须要实现接口中的service方法的.
Servlet的生命周期是什么?
init() - 初始化方法,当Servlet第一次被访问的时候执行init()方法,只执行1次.
service() - 提供服务的方法,每当Servlet被访问了,那么service()就会开始执行,会执行多次.
destory() - 当Tomcat服务器正常关闭的时候,会执行destory(),只执行1次.
如何修改Servlet创建的时期? - 如果不做修改的话,默认Servlet会在第一次被访问的时候进行创建.
- 可以通过修改配置文件的方式来修改时Serlvet的创建时期.
- 中的值是数字.正数:(0-10) -> 表示在Tomcat启动的时候就执行Servlet的创建.负数:默认情况,第一次访问Servlet的时候进行创建.
Serlvet是单例的还是多例的? - 单例/多例 (在内存中只有单独的一个对象 称为单例)
- Servlet是单例的.
如何解决Servlet的线程安全问题? - Serlvet对于之后的框架来说,属于展示层MVC(Controller)
- 在Servlet中不要去定义成员变量,如果说需要在Servlet中定义成员变量,那么Servlet中的逻辑(只读不写)
Servlet_3.0注解配置
如何使用注解配置Serlvet? - 如果要使用注解配置Servlet,那么就不需要web.xml.
- @WebServlet(value = “/hello”,loadOnStartup = 5) 只有value一个属性时间,value可以省略。 @WebServlet( “/hello”)
Servlet体系结构
Servlet的体系结构是什么?
顶级接口 -> Servlet
- 实现类(子类) -> GenericServlet(对于一些init(),destory()做了空处理,只需要子类实现service()方法即可.
- 实现类(孙子类) -> HttpServlet(针对于Http协议的一个封装)
- 如果说继承了HttpSerlvet -> 不需要重写service方法,推荐重写doGet和doPost方法.
GenericServlet和HttpServlet有什么区别? - GenericServlet(对于一些init(),destory()做了空处理,只需要子类实现service()方法即可.
- 实现类(孙子类) -> HttpServlet(针对于Http协议的一个封装)
继承HttpServlet的好处是什么? - HttpServlet是针对于Http协议的一个封装,对于不同的请求/提交方式可以提供对应的方法来进行执行.
- 所有的自定义Servlet不需要实现Servlet接口,只需要继承HttpServlet并且重写doGet/doPost方法即可.
Servlet的Urlpartten配置 - 一个Serlvet如何配置多个访问路径?
- @WebServlet(urlPatterns = {"/url","/u","/r","/lru"}) 正常情况下基本上只会配置1个.
Serlvet的UrlPattern的路径规则如何定义? - 最常用的/xxx -> 通过/xxx可以直接访问到资源.
- /xxx/xxx 通过层级关系来访问资源.
- /* 输入任意字符即可访问资源
- *.do 自定义拓展名 ( * . *)
- UrlPattern配置通配符匹配时候需要注意什么问题? *.do 不加/
HTTP概述
Http是什么协议? - 超文本传输协议
什么是传输协议? - 规定客户端和服务器端之间交互数据的格式.
Http协议的特点是什么? - 基于TCP/IP协议的.
Http的默认端口号是多少? - 80
Http的模型是什么? - HTTP 请求-响应模型 一次请求对应着一次响应.
Http是有状态的还是无状态的? - 无状态 -> 各个请求相互独立.
Http1.0和Http1.1有什么区别? - 1.0的请求 -> 创建连接 -> 进行交互 -> 断开连接.
- 1.1的请求 -> 创建连接 -> 进行交互 -> (进入到等待状态[等待还没有有其他的请求要使用连接的]) 如果没有的话才断开.
HTTP请求消息的请求行
Http的请求信息包含哪四部分? - 请求行/请求头/请求空行/(请求体)
请求行的格式是什么样的? - 提交方式 提交地址 协议/版本
- GET /test HTTP/1.1
GET/POST提交的区别? - GET提交,参数都封装到请求行中(在地址栏中) POST提交,参数都封装到了请求体中. -> GET提交没有请求体,POST提交有请求体.
- GET提交的数据长度有限,POST提交数据长度没有限制.
- GET提交相对POST提交来说不安全.
HTTP请求消息的请求头&请求体
请求头的格式是什么样的? - 键值对 -> 请求头名称:请求头值
User-Agent请求头表示什么?有什么作用? - 表示当前浏览器的一些信息(版本)
- 可以让服务器端根据不同的浏览器产生不同的样式(有一些CSS样式谷歌浏览器支持,火狐不支持.)
Referer请求头表示什么?有什么作用? - 表示当前访问路径 -> 现在我所在的网页是www.baidu.com -> 贴吧 www.baidu.com/tieba
- 防盗链/统计
请求体的内容是什么? - GET请求没有请求体,POST请求请求体中封装是提交的参数.