🚌 Web服务器

Web服务器就是我们平时所说的服务器,其实是指安装了服务器软件的计算机

服务器软件

就是一款软件,可以下载,可以安装,也可以卸载

服务器软件有什么作用

  • 它可以接受用户发过来的请求,服务器软件接受到了请求可以进行处理,处理完之后可以给用户响应回去
  • 它可以部署web项目,我们需要通过浏览器访问的方式,去访问一个web项目中资源

常见的web服务器软件

  1. WebLogic:是Oracle公司的,大型服务器,收费的,JavaEE服务器,支持所有的JavaEE技术(共13种),JavaEE容器
  2. Websphere:是IBM公司的,大型服务器,收费的,JavaEE服务器,支持13种JavaEE技术,JavaEE容器
  3. JBOSS:JBoss公司的,大型服务器,免费的,JBoss核心服务不包括支持servlet/JSP的WEB容器,最最原始服务器,一般使用它,要和其他的服务器服务器绑定使用
  4. Apache:Apache软件基金会的一个款非常的棒的web服务器,免费的,想要使用它,依然要绑定其他服务器一起使用
  5. tomcat:Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta ,项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。tomcat支持JavaEE技术中的servlet和jsp技术,servlet和jsp容器。

🚲 Tomcat服务器软件的使用

  1. 下载:

  2. 安装:解压缩即可

    1. 注意安装目录不要有中文
  3. 卸载:删除文件夹
  4. 开启:在bin目录中,找到startup.bat的应用程序,双击即可
    1. 浏览器访问http://127.0.0.1:8080/
    2. 浏览器访问映射http://localhost:8088/
  5. 关闭
    1. 正常关闭:shutdown.bat
    2. 不正常关闭 直接点右上角X

注意:如果双击startup.bat的时候,可能会出现闪退现象,出现一闪而过的原因:

  1. jdk是按照第一种方式配置的01-环境配置,该方式没有配置Java_Home
  2. 端口被占用的
    1. 方法一:换端口,改文件server.xml, Server port=”8005”
      1. 一般会将tomcat的默认端口号修改为80。80端口号是http协议的默认端口号,改完后浏览器不用输入端口号
    2. 方法二:使用命令netstat -ano找到占用端口的软件,把它强制停止

Tomcat文件目录

  1. bin:用于存放Tomact的可执行文件和脚本文件,如Tomact7.exe、startup.bet
  2. conf:用于存放Tomact的各种配置文件,如web.xml、server.xml
  3. lib:用于存放Tomact服务器和所有web应用程序需要访问的JAR文件
  4. logs:用于存放Tomact的日志文件
  5. temp:用于存放Tomact运行时产生的临时文件
  6. webapps:Web应用程序的主要发布目录,通常将要发布的应用程序放在这个目录下
  7. work:Tomcat的工作目录,存放JSP编译生成的Servlet源文件和字节码文件

🚂 Web项目的部署

部署就是将web项目交给tomcat服务器来进行管理

方式一

  1. 将web项目放入到tomcat服务器中的webapps文件夹中
  2. 然后开启tomcat服务器,
  3. 然后打开浏览器,在地址栏输入:localhost:8080/项目名字/资源文件的名字

简化部署:将web项目打包成war包,放入到tomca七中的webapps中,然后开启tomcat服务器,打开浏览器,输入:localhost:8080/xml文件名/资源文件的名字

如果端口号改成了80,那访问资源的时候,就不需要写端口号,因为http协议默认端口号就是80。
如果主页名改为index.html,那就不需要写主页名字了

怎么打war包,压缩成zip,改后缀

方式二

  1. 将web项目配置到tomcat服务器中的核心配置文件中server.xml,在host标签中添加:
    1. <Context docBase="C:\Users\apple\Desktop\app" path="/aaa"/>
  • docBase属性:web项目真实存放的路径
  • path属性:项目的虚拟路径
  1. 然后打开浏览器,在地址栏输入:localhost:8080/path属性值/资源文件的名字

相较于第一种方式更为灵活,但改了配置文件,不安全,少用

方式三(推荐)

  1. 将web项目配置到tomcat服务器中的conf中的catalina中的localhost中,创建一个任意命名的xml文件,在文件中写:

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <Context docBase="C:\Users\apple\Desktop\app"/>
  2. 然后打开浏览器,在地址栏输入:localhost:8080/xml文件名/资源文件的名字

注意:当配置文件的名字为ROOT.xml的时候,那我们在访问的时候,是不用写项目的虚拟路径的

🚍 Web项目的分类

静态的web项目

静态web项目是指项目中的资源都是静态的

项目目录结构
app

  • html
    • demo01.html
    • demo02.html
    • … …
  • css
    • style1.css
    • style2.css
  • js
    • aaa.js
    • bbb.js

动态的web项目

动态的web项目是指项目中的资源可静可动

项目目录结构
app

  • html
    • demo01.html
    • demo02.html
    • … …
  • css
    • style1.css
    • style2.css
  • js
    • aaa.js
    • bbb.js
  • WEB-INF
    • web.xml 是web项目的核心配置文件
    • classes 是一个文件夹 ,里面存储的都是.class文件和配置文件
    • lib 是一个文件夹:里面存放的是第三方的jar包

💺 Servlet

servlet是运行在服务器端的小程序

image.png

  • 我们可以通过浏览器成功访问一个类的,但是这样的类不是一般的类,而是servlet类,即能够通过浏览器访问到的类就是servlet

  • 如何区别普通类和Servlet类?

    • tomcat服务器给我们提供了一个接口,该接口的名字就叫做Servlet,但是我们所学习的Servlet是一个泛指,并不是这个接口,而是泛指的所有的servlet类。也就是Servlet是一个大家族的,Servlet接口下面也会有一些实现类。
    • 如果我们自己创建一个类的话,该类是一个普通类。如果该类加入了Servlet大家族之后,就成了Servlet类,只需要实现Servlet接口即可

总结:Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。将来我们自定义一个类,实现Servlet接口,复写方法。

🚥 Servlet详解

实现步骤

  1. 创建JavaEE项目
  2. 定义一个类,实现Servlet接口
    1. public class ServletDemo1 implements Servlet
  3. 实现接口中的抽象方法
  4. 配置Servlet
    在web.xml中配置:
    ```json demo1 cn.itcast.web.servlet.ServletDemo1

//用于映射对外的虚拟目录,可以进行多重映射 demo1 /demo1

  1. <a name="Jn5I2"></a>
  2. ## 执行原理
  3. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/21490994/1651160516608-66326223-b7ff-4613-9694-220f22134059.png#clientId=uf5c53a84-b71f-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=524&id=uadab41ac&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1048&originWidth=2548&originalType=binary&ratio=1&rotation=0&showTitle=false&size=646978&status=done&style=none&taskId=uc885fcf6-f802-4241-baba-9adeb86d5ca&title=&width=1274)
  4. 1. 通过地址栏输入:localhost:8080/项目的虚拟路径/servlet的虚拟目录
  5. 1. `localhost:8080/day52/servletDemo01`
  6. 2. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,得到项目的虚拟路径和servlet的虚拟目录
  7. 2. 拿servlet的虚拟目录去web.xml中进行查找,是否有url-pattern匹配值。
  8. 2. 如果有,则在找到对应的全类名
  9. 2. tomcat会将字节码文件加载进内存,通过反射技术,创建servlet类的对象,
  10. 2. 然后调用service()方法
  11. <a name="MRVJ5"></a>
  12. ## Servlet中的生命周期方法
  13. > Servlet接口中定义了5个抽象方法
  14. | void init(ServletConfig config) | ServletConfig getServletConfig() | String getServletInfo() | void service(ServletRequest request,ServletResponse response) | void destroy() |
  15. | --- | --- | --- | --- | --- |
  16. 1. **被创建:执行init方法,只执行一次 **
  17. Servlet什么时候被创建?
  18. - 默认情况下,第一次被访问时,Servlet被创建
  19. - 可以配置执行Servlet的创建时机。 在标签下配置 <load-on-startup>
  20. ```json
  21. 第一次被访问时,创建
  22. <load-on-startup>的值为负数
  23. 在服务器启动时,创建
  24. <load-on-startup>的值为0或正整数

Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

  • 多个用户同时访问时,可能存在线程安全问题。
  • 解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值
  1. 提供服务:执行service方法,执行多次

每次访问Servlet时,Service方法都会被调用一次。

  1. 被销毁:执行destroy方法,只执行一次

    1. Servlet被销毁时执行。服务器关闭时,Servlet被销毁
    2. 只有服务器正常关闭时,才会执行destroy方法。
    3. destroy方法在Servlet被销毁之前执行,一般用于释放资源
  2. 获取ServletConfig配置对象:getServletConfig()方法

  3. 获取Servlet的一些信息、版本、作者:getServletInfo()方法

Servlet3.0

好处:支持注解配置。可以不需要web.xml了。

步骤:

  1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
  2. 定义一个类,实现Servlet接口
  3. 复写方法
  4. 在类上使用@WebServlet注解,进行配置

@WebServlet("资源路径")

  1. @Target({ElementType.TYPE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. public @interface WebServlet {
  5. String name() default "";//相当于<Servlet-name>
  6. String[] value() default {};//代表urlPatterns()属性配置
  7. String[] urlPatterns() default {};//相当于<url-pattern>
  8. int loadOnStartup() default -1;//相当于<load-on-startup>
  9. WebInitParam[] initParams() default {};
  10. boolean asyncSupported() default false;
  11. String smallIcon() default "";
  12. String largeIcon() default "";
  13. String description() default "";
  14. String displayName() default "";
  15. }

Servlet的体系结构

  1. Servlet — 接口
  2. GenericServlet — 抽象类
  3. HttpServlet — 抽象类
  • GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象

    • 将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
  • HttpServlet:对http协议的一种封装,简化操作

image.png

  1. 定义类继承HttpServlet
  2. 复写doGet/doPost方法

    1. @WebServlet("/demo02")
    2. public class servletDemo02 extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5. System.out.println("doGet...");
    6. }
    7. @Override
    8. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    9. System.out.println("doPost...");
    10. }
    11. }

Servlet相关配置(注解配置)

  1. urlpartten:Servlet访问路径
    1. 一个Servlet可以定义多个访问路径 :@WebServlet({"/d4","/dd4","/ddd4"})
  2. 路径定义规则
    1. /xxx:路径匹配
    2. /xxx/xxx:多层路径,目录结构
      1. /*通配符写法 优先级是最低的
    3. *.自定义拓展名:扩展名匹配,如:*/do

🚇 IDEA与tomcat的相关配置

  1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件

    1. 查看控制台的log:Using CATALINA_BASE: “C:\Users\fqy.IntelliJIdea2018.1\system\tomcat_itcast”
  2. 工作空间项目 和 tomcat部署的web项目

    1. tomcat真正访问的是“tomcat部署的web项目”,”tomcat部署的web项目”对应着”工作空间项目” 的web目录下的所有资源
    2. WEB-INF目录下的资源不能被浏览器直接访问。
  3. 断点调试:使用”小虫子”启动 dubug 启动