今日内容
1. web相关概念回顾
2. web服务器软件:Tomcat
3. Serlet入门学习
一、web相关概念回复
1. 软件架构
1. C/S架构: 客户端/服务器端
2. B/S架构: 浏览器/服务器端
浏览器通过域名找到服务器:请求
资源返回给浏览器的过程: 响应
2. 资源分类
1. 静态资源:所有用户访问后,得到的效果都是一样的,称为静态资源。
* 如:html,css,javascript...
静态资源被请求后,可以直接返回给浏览器。
每个浏览器都内置的有静态资源的解析引擎。
2. 动态资源:每个用户访问相同资源后得到的结果可能不一样。
* 如: servlet,jsp,php,asp...
动态资源被请求后,先转成静态资源,在返回给客户端浏览器。
3. 网络通信三要素
浏览器要请求服务器首先要知道服务器的ip地址;
然后还有知道请求服务器上的哪一个软件:端口;
1. IP:电子(计算机)设备在网络中的唯一标识。通过ip地址找到网络中那台唯一的计算机。
2. 端口:应用程序在计算机中的唯一表示。0~65536。
3. 传输协议:规定了数据(传输)通信的规则。
1. 基础协议
1. tcp:安全协议,三次握手,速度慢。
2. udp:不安全协议,速度快。
二、web服务器软件
* 服务器:就是安装了服务器软件的计算机(一般是性能很高的计算机)。
* 服务器软件:接收用户的请求,处理请求,做出响应。
* web服务器软件:接收用户的请求,处理请求,做出响应。
* 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目。
* 也称为web容器:动态资源不能直接运行,依赖web服务器软件。即动态资源只能运行在服务
器软件中。
* 常见的java相关的web服务器软件:
1. webLogic: oracle公司,大型的javaEE服务器,支持所有的javaEE规范,收费的。
* javaEE:java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范。
2. webSphere:IBM公司,大型的javaEE服务器,支持所有的javaEE规范,收费的。
3. JBOSS:JBOSS公司的,大型的javaEE服务器,支持所有的javaEE规范,收费的。
4. Tomcat:Apache基金组织,中小型的javaEE服务器,仅仅支持少量的javaEE规范。
如:servlet/jsp,开源的免费的。
三、学习Tomcat:web服务器软件。
1.下载:https://tomcat.apache.org/download-80.cgi
2.安装:解压压缩包即可。
* 注意:安装目录不要有中文和空格。
* 目录结构:
3.删除解压后的文件。
4.启动
* bin目录下
* windows: startup.bat
* linux: startup.sh
* 访问:
* 自己访问自己tomcat这个web服务器软件上的web项目
1 http://127.0.0.1:8080/ :127.0.0.1代表本机,8080是tomcat的默认端口号
2 http://localhost:8080/ : localhost代替127.0.0.1
* 其他人访问我的tomcat这个web服务器软件上的web项目
1. 找到我的电脑的ip地址:cmd-->ipconfig-->ipv4:http://192.168.1.103/
2. http://192.168.1.103:8080/
* 可能遇到的问题:
1. 黑窗口一闪而过
* 原因:没有正确配置JAVA_HOME环境变量。
2. 启动报错:8080端口号被占用了。
1. 暴力:关闭占用端口号的进程。
先找到占用8080端口号的进程的PID(进程状态字)
在任务管理器中找到对应PID的进程,右键结束。
2. 温柔:修改自身的端口号。
修改conf文件夹目录下的server.xml文件。
注意:
一般会将Tomcat的默认端口号修改为80,80端口号是http协议的默认端口号。
好处:在访问时,就不用再输入端口号。http://localhost/
因为http协议默认的是80端口,不写端口默认的是80端口。而且市面上大部分
网站都是默认端口号80
5.关闭:
1. 正常关闭
* 双击bin目录下的shutdowm.bat批处理文件。
* 或者在窗口中:ctrl+c
2. 强制关闭
* 点击启动窗口的 x
6.配置
* 部署项目的方式:
1. 直接将项目放到webapps目录下即可
* http://localhost:8080/hello/hello.html
/hello:项目的访问路劲-->虚拟目录。
/hello.html:资源名称
* 简化部署:将项目打成一个war包,再将war包放置到webapps目录下。
war包会自动的解压缩。
* 缺点:虚拟路径和项目名称必须一致,而且必须在webapps目录下,不灵活。
2. 配置conf/server.xml文件
在<Host>标签体中配置这么一段内容。
<Host>
<Context docBase="D:\hello" path="/hehe123aaa" />
</Host>
* docBase:项目存放路劲
* path:虚拟目录。
* 此时在访问http://localhost:8080/hehe123aaa/hello.html
* 缺点:不安全。
因为server.xml是配置整个Tomcat web服务器软件的,所以如果为了某一个项目
而去专门配置该文件,会导致整个Tomcat的配置改变,进而影响后续的项目部署。
3. 在conf\Catalina\localhost创建一个任意名称的xml文件。在文件中编写:
<Context docBase="D:\hello" />
现在的虚拟目录就是:xml文件的名称。
这是最推荐的一种方式。
* 静态项目和动态项目
* 目录结构
* java动态项目的目录结构:
-- 项目的根目录
-- WEB-INF目录:
-- web.xml:web项目的核心配置文件
-- classes目录:防止字节码文件的目录
-- lib目录:放置原来的jar包
* 将tomcat集成到IDEA中,并且创建javaEE的项目,部署项目。
四、Servlet入门学习
* 概念:server + applet 运行在服务器端的小程序
* Servlet就是一个接口,定义了Java类能被浏览器访问到(tomcat识别)的规则。
* 将来我们自定义一个类,实现Servlet接口,复写其方法。
* 快速入门:
1. 创建javaEE项目
2. 定义一个类,实现Servlet接口。
public class ServletDemo1 implements Servlet
3. 实现接口中的抽象方法。
4. 配置Servlet
在web.xml文件中配置
```
<!--配置Servlet-->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>com.itcast.servlet.ServletDemo1</servlet-class>
</servlet>
<!--做映射-->
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
```
* 注:
http://localhost:8080/day0427_Tomcat/demo1
就可以通过上面的url将定义的类中的方法调用并将结果输出到控制台。
day0427_Tomcatploded2:是虚拟路径
demo1:是资源路劲
* Servlet的执行原理
1. 当服务器接收到客户端浏览器的请求后,会解析请求URL路劲,获取访问的Servlet的资源
路劲。
2. 通过url:http://localhost:8080/day0427_Tomcat/demo1将类中的方法调用并将结果输出
到控制台。
localhost:8080: 找到服务器和Tomcat
/day0427_Tomcat:通过虚拟路径找到了部署的项目
/demo1:找到资源名称
* 找web.xml,发现有一个<url-pattern>/demo1</url-pattern>发现资源路劲一致。
* 再找到<servlet-name>demo1</servlet-name>发现资源名称一致
* 最后通过<servlet-class>com.itcast.servlet.ServletDemo1</servlet-class>找到
全类名。
1. Tomcat将全类名对应的字节码文件加载进内存,创建它的对象。
Class.forName();
2. 创建对象
cls.newInstance();
3. 调用方法:因为实现Servlet接口,就一定有service方法。
service();
所以对象的创建和方法的调用都是由web服务器软件Tomcat执行的。即Servlet的运行要
依赖于外部的容器Tomcat,依靠其创建对象调用方法。
4.2 Servlet中的生命周期
1. 被创建:执行init方法,只执行一次
* Servlet什么时候被创建:两种情况
* 默认情况下,第一次被访问时,Servlet被创建
* 可以在web.xml中配置执行对应的类的Servlet的创建时机(改变默认情况:只有两种情况)
1.第一次被访问时创建
<load-on-startup></load-on-startup>的值为负数,默认值为-1
2.在服务器启动时创建:对其他Servlet有依赖时
<load-on-startup></load-on-startup>的值为正数或0
* Servlet的init方法只执行一次,说明Servlet在内存中只存在一个对象,Servlet是单例的。
* 多个用户同时访问时,可能存在线程安全问题。
* 解决:尽量不要在Servlet中定义成员变量。如果不得不定义成员变量,也不要对其修
改值。
2. 提供服务:执行service方法,执行多次
* 每次访问Servlet时,Service方法都会被调用一次。
3. 被销毁:执行destroy方法,只执行一次。
* Servlet被销毁时执行。服务器关闭时,Servlet被销毁。
* 只有服务器正常关闭时,才会执行destroy方法。
* destroy方法在Servlet被销毁之前执行,用于释放资源。
4.3 Servlet3.0
* 好处:
* 支持注解配置,可以不用web.xml了。
* 步骤:
1. 创建JAVAEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
2. 定义一个类,实现Servlet接口
3. 复写方法
4. 在类上使用@WebServlet注解,进行配置。
/*urlPatterns = "/demo" : 是资源路径
或者value = "/demo"
或者"/demo" : 默认value
*/
@WebServlet("/demo")
4.4 IDEA和tomcat的相关配置
1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
* 产看控制台的log:Using CATALINA_BASE: "C:\Users\13099\.IntelliJIdea2019.3\system
\tomcat\_day0419_XML"
这是当前项目对于tomcat的配置所在目录。
2. 工作空间项目 和 Tomcat部署的web项目
* Tomcat部署的web项目:docBase的值
<Context path="/day0427" docBase="E:\Idea_Project\day0419_XML\out\artifacts\
day0427_Tomcat_war_exploded2" />
* Tomcat真正访问的是“Tomcat部署的web项目”,Tomcat部署的web项目对应着“工作空间项目 ”
的web目录下的所有资源。
* src下的java文件,将来在被编译后,会放到:
E:\Idea_Project\day0419_XML\out\artifacts\day0427_Tomcat_war_exploded2\WEB-INF\
classes
* WEB-INF目录下的资源不能被浏览器直接访问。
不要讲web资源直接放到WEB-INF目录下。
3. 断点调试: 使用“小虫子”debug启动。