最后更新日期2020-05-10
今日学习内容
- mysql事务存在的问题(脏读,不可重复读,幻读)
- mysql的隔离级别
- DCL语句(添加用户、删除用户、更改用户密码、管理用户权限)
- web的相关概念(软件架构、资源分类、网络通讯三要素)
- web服务器软件Tomcat
web相关概念
软件架构
- C/S:客户端/服务器端
- B/S:浏览器/服务器端
资源分类
- 静态资源:所有用户访问后,所得到的结果都是一样的,称之为静态资源。静态资源可以直接被浏览器所解析(浏览器内置静态资源引擎可以直接解析静态自愿然后将其展示到页面上。eg:HTML CSS javascript等)
- 动态资源:每个用户访问相同资源后,得到的结果可以是不一样的,称之为动态资源。
- 动态资源展示在浏览器页面的过程
- 服务器中访问动态资源—>将动态资源转换为静态资源。
- 将转换后的静态资源返回到浏览器。
- 浏览器解析静态资源,展示到页面上。
- 如:servlet/jsp/php/asp…
- 动态资源展示在浏览器页面的过程
网络通讯三要素
- IP:电子设备在网络中的唯一标识。
- 端口:应用程序在计算机中的唯一标识。0~65536
- 传输协议:规定了数据传输的规则
- 传输协议:
- TCP:安全协议,三次握手,速度比较慢。
- UDP:不安全协议,速度比较快。
- 传输协议:
web服务器软件:Tomcat
-
web服务器软件:可以接受用户的请求,处理,做出响应的web容器
- web服务器软件中,可以部署web项目,让用户可以通过浏览器来访问这些项目。
-
常见的java相关的web服务器软件:
- weblogin:orcale公司开发的大型javaEE服务器,支持所以后的javaEE规范。
- webSphere:IBM公司
- JBOSS:JBOSS公司
- Tomcat:Apache基金组织中小型javaEE服务器,仅支持少量的javaEE规范(servlet/jsp)。
-
JavaEE规范:Java语言在企业级开发中使用的技术规范综合,一共规定了13项大的规范。
Tomcat:web服务器软件
-
端口号被占用的解决办法
-
关闭占用的端口号服务
-
修改自身的端口号
conf/server.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" /> * 一般会将tomcat的默认端口号修改成80端口. 80端口是http协议默认的端口号 * 好处:在访问时,可以不用输入端口号 默认就是http对应的80端口号
-
-
关闭
ctrl+c即可关闭Tomcat服务
-
部署项目
- 直接将项目放入到webapps目录即可 http://localhost:8080/hello/hello.html
- 简化部署:将项目打包成war包繁花如webapps中访问时会自动将war包解压
-
配置相关配置文件 配置文件目录conf/server.xml
在<Host>标签体中配置 <Context docBase="D:\hello" path="hh" /> docBase:项目存放的目录 path:虚拟目录
-
在\cof\Catalinna\localhost 中创建任意名称的xml文件 在文件中编写
<Context docBase="D:\hello"/> 虚拟目录:xml文件的名称
-
为什么我们启动tomcat还需要配置JAVA_HOME环境变量
Tomcat在执行java代码时需要编译才能运行,但java的编译需要jdk的支持,在window中编译java的命令例如javac,javadoc等都存放在jdk的bin目录中,但Tomcat在安装时不能直接从系统注册表中读取jdk的目录信息,需要手动配置环境变量以确保在使用Tomcat时能找到了jdk的路径,才能对servlet/jsp进行编译成.class文件。
-
Servlet
-
概念: server applet 运行在服务器端的小程序
- Servlet本质上是一个接口,定义了Java类被浏览器访问到(tomcat所识别)的规则
- 将来我们想要自定义一个类被tomcat所识别,这个类必须要实现Servlet接口 重写其中的抽象方法.
-
Servlet快速入门
-
创建一个JavaEE项目
-
定义一个类,实现Servlet接口
-
实现Servlet接口中的抽象方法
-
配置Servlet
- web.xml 中配置Servlet
<servlet> <servlet-name>demo1</servlet-name> <servlet-class>com.huike.web.servlet.ServletDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping>
-
-
执行原理
- 当服务器接收到客户端浏览器的请求后,会解析请求url路径,获取访问的Servlet的资源路径(/demo1)
- 查找web.xml文件 看文件中是否有对应的标签体的内容
- 如果有,则再找到所对应的的全限定类名
- tomcat会将该类的字节码文件加载至内存中,并创建对象
- 通过反射 revoke()方法去调用其 service方法 执行该方法
-
Servlet中的生命周期方法:
- 被创建:执行init方法 只执行一次
-
Q:Servlet什么时候会被创建?
- 默认情况下,第一次被访问时,Servlet会被创建
- 可以配置执行Servlet的创建时机
-
Servlet的init方法,只执行一次 说明了一个Servlet类在内存中只存在一个对象 --> Servlet是单例的
- 多个用户同时访问同一个Servlet 会同时调用其中的方法 service 会存在线程安全的问题
- 解决:尽量不要在Servlet中定义成员变量 即使定义了成员变量 也不要对其修改值
-
- 提供服务:执行service方法 执行多次
- 每次访问Servlet时,都会被调用一次
- 指定Servlet的创建时机 在web.xml中的标签中创建标签
1.第一次访问时创建 默认值
的值设置成负数
2.在服务器启动时就创建
的值设置成0或正整数
- 被销毁:执行destory方法 只执行一次
- Servlet被销毁时执行该方法 服务器关闭时,Servlet会被销毁
- 只有服务器正常关闭时,才会执行destory方法
- destory方法在Servlet被销毁前执行 一般用于进行资源的释放
- 被创建:执行init方法 只执行一次
-
Servlet3.0和3.0以下版本的区别
- Servlet3.0以下版本: 必须要配置web.xml文件 需要将Servlet对应的类配置到web.xml中
- Servlet3.0及以上版本:
-
好处:支持注解配置 可以不需要web.xml文件了
-
创建Servlet3.0及其以上版本项目的步骤 —>重点掌握
-
创建一个JavaEE项目 选择Servlet3.0版本以上的项目,可以不创建web.xml
-
定义一个类,实现Servlet接口
-
实现Servlet接口中的抽象方法
-
在类上使用注解进行配置–>在类前面使用@WebServlet(“资源路径”)
public @interface WebServlet {
String name() default “”; //相当于String[] value() default {};//代表urlPatterns() 注解类中有一个属性比较特殊 是value 如果注解中只定义这一个属性,这个属性名可以省略 String[] urlPatterns() default {}; //代表<url-pattern> int loadOnStartup() default -1; //相当于<load-on-startup> WebInitParam[] initParams() default {}; boolean asyncSupported() default false; String smallIcon() default ""; String largeIcon() default ""; String description() default ""; String displayName() default "";
}
-
-
IDEA与tomcat相关的配置
- Q:我们通过IDEA将项目部署到了tomcat中,那么我们的项目到底是以哪种形式部署到了tomcat中呢?
- 查看控制台的log日志发现这么一行: Using CATALINA_BASE: “C:\Users\MrDong\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Tomcat_8_5_31_java_124_2”
- 说明了IDEA是采用我们部署web项目的第三种形式 在conf\Catalina\localhost\目录下新建一个xxx.xml文件 xxx为虚拟目录
其中docBase所指向的就是真正部署到tomcat的项目
- IDEA的工作空间项目 和 tomcat部署的web项目的 区别
- tomcat真正访问的是"tomcat部署的web项目", “tomcat部署的web项目"对应着"IDEA的工作空间项目” 的 web目录下的所有资源
- WEB-INF目录下的资源是不能被浏览器所访问的 <-- 切记
- tomcat如何进行debug调试?
- 只需要使用debug tomcat启动即可进入断点(运行按钮旁边的小虫子按钮)
- Q:我们通过IDEA将项目部署到了tomcat中,那么我们的项目到底是以哪种形式部署到了tomcat中呢?
-
-
Servlet的体系结构
-
分析前面的Servlet代码 存在一些问题:
- 每次在创建Servlet类的时候必须实现Servlet接口,必须强制要求我重新其中所有的方法(5个),但我们通常只需要用到其中的service方法.
- 解决方案: 新建一个抽象基类A 让其实现Servlet接口 重写其中用不到的方法(空方法体实现) 再定义ServletDemo类去继承抽象基类A即可.
- 每次在创建Servlet类的时候必须实现Servlet接口,必须强制要求我重新其中所有的方法(5个),但我们通常只需要用到其中的service方法.
-
体系结构
– Servlet接口–爷爷
– GenericServlet(实现Servlet接口的抽象类) <–就相当于我们定义的抽象基类A – 爸爸
– HttpServlet(继承了GenericServlet的抽象类) – 儿子(最常用的)- HttpServlet:对http协议的一种封装,简化操作
- 定义类继承HttpServlet
- 重写其doGet/doPost方法
- HttpServlet:对http协议的一种封装,简化操作
-
-
Servlet的相关配置
- urlPattern:值为Servlet的访问路径 本质上是一个String[]数组
- 一个Servlet可以定义多个访问路径 @WebServlet({"/h01","/h02","/h03","/http01"})
- 路径定义规则:
- /xxx:路径匹配
- /xxx/xxx:多层路径匹配 @WebServlet("/user/demo01") @WebServlet("/user/") @WebServlet("/")
- *.do:扩展名匹配 .action .xxx
- urlPattern:值为Servlet的访问路径 本质上是一个String[]数组
http协议
- 概念: Hyper Text Transfer Protocol:超文本传输协议
- 传输协议:定义了 客户端浏览器和服务器端通信时 发送数据的格式
- 特点:
- 基于TCP/IP的一种高级协议
- 默认端口号 80
- 基于请求/响应模型 一次请求对应一次响应 一对一的
- 无状态的: 每次请求和响应之间都是互相独立的 互不影响 不能进行数据的交互
- 历史版本
- 1.0:每一次请求都会建立一个新的连接–> 导致资源浪费
- 1.1:连接的复用
- 请求消息数据格式 request
- 响应消息数据格式 response