web相关概念
-
软件架构
- CS,客户端/服务器
- BS,浏览器/服务器
-
资源分类
-
静态资源,所有用户访问后得到的结果一样,称为静态资源,静态资源能被浏览器解析。
如,html、css、javascript
-
动态资源,用户访问后得到的结果可能不一样,称为动态资源,动态资源被访问后,需要转换为静态资源,再给浏览器
如,servlet/jsp、php、asp
-
-
网络通信三要素
- IP,电子设备在网络中的唯一标示
- 端口,应用程序在计算机的唯一标示,0-65536
- 传输协议,规定了数据传输的规则
web服务器软件
- 服务器,安装了服务器软件的计算机
- 服务器软件,接受用户请求,处理请求,作出响应
- web服务器人间,接受用户请求,处理请求,作出响应
- 在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
- web容器
- 常见的java相关web服务器软件
- webLogic,oracle公司,大型javaEE服务器,支持所有javaEE规范,收费
- websphere,IBM公司,大型javaEE服务器,支持所有javaEE规范,收费
- JBoss,JBoss公司,大型javaEE服务器,支持所有javaEE规范,收费
- Tomcat,Tomcat基金会,中小型javaEE服务器,支持部分规范servlet/jsp,开源、免费
Tomcat常见问题
-
黑窗口一闪而过
- 原因,没有正确配置JAVA_HOME环境变量
-
启动报错
-
原因,8080端口被占用
-
解决
-
关闭使用8080端口的软件
netstart -ano 查询所有端口的使用情况,关注8080端口的PID
任务管理器——查看——选择列——PID
结束相应PID进程
-
修改自己的端口
Tomcat目录——conf——server.xml
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
一般会将Tomcat的端口号改为80,因为http协议的端口号为80。在访问时不用输入端口号。
-
-
-
关闭
-
正常关闭
shutdown.bat
启动窗,Ctrl+c
-
强制关闭
关闭启动窗
-
-
配置
部署项目方式
-
直接将项目放在webapps目录下
http://localhost/hello/hello.html
/hello,项目的访问路径——虚拟目录
-
简单部署
-
将项目打成一个war包,放在webapps文件夹下,会自动解包,当删除war包是相应的解压包也会被删除
-
在server.xml中Host标签体中添加
docBose,路径
path,虚拟目录
<!--部署项目--> <Context docBose="F:\makedown\hello" path="/asd" />
-
在conf\Catalina\localhost,创建任意xml文件,编写
<Context docBose="F:\makedown\hello"/>
文件名就是虚拟目录
-
静态项目与动态项目
- 目录结构
- java动态项目,目录结构
- 项目根目录
- WEB-INF目录
- web.xml,web项目的核心配置文件
- classes目录,放置字节码文件的目录
- lib目录,放置依赖jar包的目录
- WEB-INF目录
- 项目根目录
- java动态项目,目录结构
将Tomcat集成到IDEA中,并创建JavaEE项目,部署项目
-
Servlet
-
概念,(server applet),运行在服务器端的小程序
- Servlet就是一个接口,定义了java类被浏览器访问(Tomcat识别)的规则
- 将来我们自定义一个类,实现Servlet接口,复写方法
-
快速入门
-
创建javaEE项目
-
定义类,实现Servlet接口
public class ServletDemo01 implements Servlet
-
实现接口中的方法
-
配置Servlet,在web.xml中配置
<!--配置Servlet--> <servlet> <servlet-name>demo001</servlet-name> <servlet-class>com.aaa.web.servlet.ServletDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo001</servlet-name> <url-pattern>demo001</url-pattern> </servlet-mapping>
-
-
执行原理
- 当服务器接收客户端浏览器的请求的时候,会解析请求url路径,获取访问的Servlet资源路径
- 查找web.xml文件,是否对应标签体内容
- 如果有则找到对应的全类名
- Tomcat会将字节码文件加载进内存,并创建其对象
- 调用其方法
-
Servlet的生命周期
-
被创建,执行init方法,只执行一次
-
Servlet什么时候被创建
<!-- 指定Servlet创建时机 在servlet标签下配置 1.默认第一次访问时创建 <load-on-startup>的值为负数 2.在服务器创建时访问 load-on-startup>的值为0或正整数 --> <load-on-startup>5</load-on-startup>
-
Servlet的init方法只执行一次,说明Servlet在内存中只存在一个对象,Servlet是单例
- 多个用户访问时,可能存在线程安全问题
- 解决,尽量不要在Servlet中定义成员变量,即使定义了成员变量也不要修改值
-
-
提供服务,执行service方法,访问一次就执行一次
- 每次访问Servlet时,service方法就会被调用一次
-
被销毁,执行destroy方法,只执行一次
- Servlet被销毁时执行,服务器被关闭时,Servlet被销毁
- 服务器正常关闭时,才会执行destroy方法
-
-
Servlet3.0
-
好处,支持注解配置,可以不需要web.xml
-
步骤
-
创建一个javaEE项目,选择Servlet版本3.0以上,可以不用创建web.xml
-
定义一个类,实现Servlet接口
-
复写方法
-
在类上使用@WebServlet注解,进行配置
@WebServlet("资源路径(记得加/)")
-
-
IDEA与Tomcat的相关配置
-
IDEA会为每一个,会为每一个Tomcat部署的项目,单独配置一份文件
-
查看控制台log,
Using CATALINA_BASE: “C:\Users\SW.IntelliJIdea2018.3\system\tomcat\Tomcat_9_0_31_servl”
-
-
工作空间项目和Tomcat部署的项目
- Tomcat真正访问的是“Tomcat部署的项目”,“Tomcat部署的项目”对应着“工作空间项目”的web目录下的所有资源
- WEB-INF下的资源不能被浏览器直接访问
Servlet的体系结构
- Servlet——接口
- GenericServlet——抽象类
- HttpServlet——抽象类
- GenericServlet——抽象类
-
GenericServlet
- 将Servlet接口中的其他方法做了默认空实现,只将service方法做了抽象
- 将来定义Servlet类时,可以继承GenericServlet,实现service方法即可
-
HttpServlet
- 对http协议的一种封装,简化操作
- 定义类,继承HttpServlet方法
- 复写,doGet/doPost方法
Servlet的相关配置
- urlPatterns(),Servlet访问路径
- 一个Servlet可以有多个访问路径,@WebServlet({"/demo06","/d6","/dd6","/ddd6"})
- 路径的dingyiguize
- /XXX
- /xxx/xxx,多层路径,目录结构
- *.xxx