JavaWeb简介

JavaWeb,是用Java技术来解决相关web互联网领域的技术总和。

Web包括:web服务器和web客户端两个部分,有两种软件架构

​ C/S:客户端/服务器端

​ B/S:浏览器/服务器端

web资源分静态资源和动态资源两个

静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析,如: html,css,JavaScript(前端三剑客)

动态资源:每个用户访问相同资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要先转换为静态资源,在返回给浏览器,如:servlet/jsp,php,asp....


Web服务器软件

常见的java相关的web服务器软件:

  • Tomcat:由Apache组织提供的一种Web服务器,仅支持少量的JavaEE规范、Servlet/jsp,是一种轻量级的JavaWeb容器,也是应用最广泛的JavaWeb服务器,开源且免费

  • webLogic:Oracle公司的产品,大型的JavaEE服务器,支持所有的JavaEE规范,适合大型项目,但是收费的

  • webSphere:IBM公司的产品,大型的JavaEE服务器,支持所有的JavaEE规范,也是收费的

  • JBOSS:JBOSS公司的的产品,支持所有的JavaEE规范、开放源代码的大型的JavaEE服务器,软件是不收费的,但是文档收费

  • Resin:是CAUCHO公司的产品,是一个非常流行的应用服务器,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发(收费,应用比较多)。

  • GlassFish: 由Oracle公司开发的一款JavaWeb服务器,是一款强健的商业服务器,达到产品级质量(应用很少,也收费)。

    何为JavaEE?:JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范


Tomcat服务器

什么是tomcat?Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序,它也是JSP和Serlvet的一个容器。tomcat是开源小型web服务器 ,完全免费,主要用于中小型web项目,只支持Servlet和JSP 等少量javaee规范(就是JavaWeb编程接口)

所以,Tomcat就是提供能够让别人访问自己写的页面的一个程序

Tomcat的版本对应的JDK版本,是向下兼容的,比如Tomcat版本为8.0.x,那么JDK7及其之后的JDK版本都可以使用,但是如果你的版本如果是10.0.x,那么JDK1-7都用不了,只能使用JDK8及其之后的


Tomcat下载地址

有多个版本可供下载,我是使用的8.5.57,下载地址,下载完成之后得到一个压缩包为apache-tomcat-8.5.57-windows-x64.zip,解压到你的指定目录即可完成安装,安装目录建议不要有中文和空格


Tomcat目录结构

  • bin:可以执行文件,里面有启动和关闭tomcat的批处理文件

  • conf:tomcat服务器的配置文件

    • server.xml配置server相关的信息,如tomcat启动的端口号,配置主机(Host)
    • web.xml文件配置与web应用(web应用相当于一个web站点)
    • tomcat-user.xml配置用户名密码和相关权限
  • lib:tomcat启动后需要依赖的jar包

  • logs:tomcat工作之后的日志文件,可以查询信息

  • temp:存放tomcat运行时产生的临时文件

  • webapps:是tomcat布暑工程的目录,放置我们的web应用

    • web站点的目录是有规范的

    • java动态项目的目录结构:

      • 项目的根目录

        • WEB-INF目录:
        • web.xml:web项目的核心配置文件
        • classes目录:放置字节码文件的目录
        • lib目录:放置依赖的jar包
    • 为什么要这样设置web站点目录呢?

      • 如果有多个html文件,想把其中一个作为web战点首页,那么就需要设置web-INF目录下的web.xml文件,在其中添加以下代码:

        1. <welcome-file-list>
        2. <welcome-file>要设置的站点首页文件名</welcome-file>
        3. </welcome-file-list>
      • 这个规范是约定俗成的

  • work:该目录用于存放jsp被访问后生成对应的server文件和.class文件,即tomcat的工作目录


Tomcat的启动

  • 启动tomcat目录: tomcat目录/bin/startup.bat(window启动文件) 找到startup.bat 双击运行,弹出一个黑窗口,黑窗口不要关闭(如果关闭,相当于把tomcat停止了)

  • Tomcat启动,还有一种启动的方法就是在命令行中,先把你的当前目录切换 到你tomcat目录\bin目录下,然后输入catalina run命令即可启动成功

在浏览器地址栏中输入:http://localhost:8080http://127.0.0.1:8080,如果看到如下页面,证明启动成功

Tomcat启动失败原因

  1. 没有设置JAVA_HOME。因为tomcat启动是依赖JAVA_HOME来启动的,所以一定要设置好JAVA_HOME

  2. 端口被占用。解决方法:在cmd输入netstat -anb查看谁占用了该端口【Tomcat默认的是8080】,在进程中关闭它 或者 主动改变tomcat的端口, 到tomcat目录下的conf/server.xml文件中修改,把8080端口改成是8088或者是其他的即可

    • 如何修改端口号?

      • 打开/conf/server.xml配置文件,找到Connector标签

      • 修改port的值,将port端口原来的8080值修改为80


Tomcat的关闭

  • 第一种:Ctrl+C键,直接关闭Tomcat服务器,会有日志输出,正常关闭

  • 第二种:点击Tomcat窗口的右上角关闭按钮 (暴力停止服务器)

  • 第三种:找到tomcat目录/bin/shutdown.bat文件,双击执行关闭Tomcat


配置虚拟目录

由于我们每次部署web项目时候,总部可能再移动项目到webapps目录下吧,那样效率太低了,所以我们介绍一下如何配置虚拟目录,不用移动项目也可以完成部署

  • 方法一:

    • 在其他目录下创建一个web站点目录,在目录里面再创建一个WEB-INF目录和一个html文件

    • 打开/conf/server.xml文件,再Host标签下添加子标签

      1. <Context path="/test(虚拟目录)" docBase="D:\testDirectory(项目存放的路径)" />

    • 现在我们打开浏览器,输入http://localhost:8080/test/hello.html,可以成功访问

  • 方法二:(最常用,必须掌握)

    • 由于每次添加一个站点都要修改server.xml核心文件,是很不好的,没搞好容易导致tomcat崩溃,所以我们来介绍第二种方式。先删除刚才添加<Context />标签

    • 进入/conf/Catalina/localhost文件下,创建一个xml文件,该文件名就是你的web站点的名字,我们的站点名是test

    • 编辑test.xml内容

      1. <?xml version="1.0" encoding="UTF-8"?>
      2. <Context
      3. docBase="D:\testDirectory">
      4. reloadable="true"
      5. </Context>
    • 再次访问我们的站点http://localhost:8080/test/hello.html,和上面一样,再次成功访问

  • 方法三:

    • 把网站目录压缩成war包部署到tomcat中,war包:就是一个压缩文件zip格式的压缩文件,只不过扩展名不是.zip 而是.war

      • 把文件夹中的内容压缩成zip的格式,点击一个要部署的文件夹下面,全选 然后压缩
      • 然后修改文件的后缀名为.war
      • 最后把war文件复制到webapps目录下,tomcat会自己把war的文件进行解压
  • 方法四:

    • webapps目录下/ROOT工程的访问

      当我们在浏览器中直接输入http://ip地址:端口号,那么默认访问的是Tomcat目录/webapps/ROOT目录

      如果webapps下面有一个ROOT的项目,那么在访问的时候,直接可以省略项目的名字,/表示找到root目录


临时域名的配置

进入到C:\Windows\System32\drivers\etc,将hosts文件复制到桌面,打开修改,添加127.0.0.1 localhost

然后你在浏览器输入域名时候,先查询本机的host文件中域名对应的IP地址,有的话访问该IP,如果没有的话,就向DNS查询IP,查询到了,就访问该IP,如果没有查询到,则访问失败


虚拟主机

什么是虚拟主机?

多个不同域名的网站共存于一个Tomcat中

为什么需要用到虚拟主机?

如果我现在开发了4个网站,有4个域名,如果我不配置虚拟主机,一个Tomcat服务器运行一个网站,我就需要4台电脑才能把4个网站运行起来。

设置虚拟主机

  • 现在某个位置创建你的虚拟主机目录,我是叫做newwebapps

  • 打开/conf/server.xml文件,再Engine标签中加入子标签Host

  1. <Host name="www.linzeliang.com" appBase="D:\newwebapps(主机路径)">
  2. <Context path="/test(站点名称)" docBase="D:\testDirectory(项目存放的路径)"/>
  3. </Host>
  • 再浏览器输入http://www.linzeliang.com:8080/test/hello.html,可以看到虚拟主机配置成功

  • 如果没有加Context标签,直接把站点放到你创建的虚拟主机目录下,那么输入http://www.linzeliang.com:8080/testDirectory/hello.html也可以访问

    1. <Host name="www.linzeliang.com" appBase="D:\newwebapps">
    2. </Host>


Tomcat启动乱码问题

我下载的8.5.57版本的Tomcat,然后启动时出现了如下乱码:

查看启动Tomcat时候cmd的属性,发现是GBK编码,而Tomcat默认再控制台是UTF-8编码

解决办法:

  • 打开Tomcat下的conf目录中的logging.properties找到:(也可以将cmd窗口的gbk属性改为utf-8,但是不推荐)

    1. java.util.logging.ConsoleHandler.encoding = UTF-8
    2. 修改为
    3. java.util.logging.ConsoleHandler.encoding = GBK
  • 保存文件,重启服务器,恢复正常,不再乱码了


IDEA中Tomcat的相关设置

  • IDEA中的Tomcat模板设置:

    • 进入Edit Configuration,点击Templates,找到Tomcat Setver(不是Tomcat EE)

    • 然后再找到Startup/Connection,点击+号,添加JAVA_OPTS=-Dfile.encoding=UTF-8(这是防止出现编码问题)

最后点击OK,IDEA中Tomcat模板的基本配置就完成了!

  • 为IDEA的每个项目设置Tomcat:

    • URL(要以 / 结尾)是IDEA启动Tomcat后自动打开的地址,而Deployment中的Application context(除非是 / ,否则其他的站点目录不能以 / 结尾)是代表web站点目录,URL和Application的要一致,否则默认打开的不是预期的网页

    • 然后VM options将两个都设置成Update classes and resources

    • 项目的Tomcat基本配置完成了!


关于Tomcat的组件(server.xml)

1、Server 组件

启动一个 Server 实例(即一个 JVM),它监听在 8005 端口以接收 shutdown 命令。 Server 的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个 Server 实例,必须配置它们使用不同的端口。

  1. <Server port="8005" shutdown="SHUTDOWN">
  • port:接收 shutdown 指令的端口,默认为 8005;

  • shutdown:发往此 Server 用于实现关闭 Tomcat 实例的命令字符串(标记),默认为SHUTDOWN;

2、Service 组件

Service 主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收请求并将其转发至关联的引擎进行处理。因此,Service 要包含一个引擎、一个或多个连接器。

  1. <Service name="Catalina">
  • name:此服务的名称,默认为 Catalina;

3、Connector 组件

支持处理不同请求的组件,一个引擎可以有一个或多个连接器,以适应多种请求方式。默认只开启了处理 Http 协议的连接器。如果需要使用其他协议,需要在 Tomcat中配置该协议的连接器。

  • 在 Tomcat 中连接器类型通常有4种:

1) HTTP 连接器

2) SSL 连接器(HTTPS协议)

3) AJP1.3 连接器

4) proxy 连接器

  1. <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
  • port:监听的端口
  • protocol:连接器使用的协议,默认为 HTTP/1.1;
  • connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒;
  • redirectPort:如果某连接器支持的协议是 HTTP,当接收客户端发来的 HTTPS 请求时,则转发至此属性定义的端口;
  • maxThreads:支持的最大并发连接数,默认为 200 个;

4、Engine 组件

Engine 是 Servlet 处理器的一个实例,即 Servlet 引擎,定义在 server.xml 中的 Service 标记中。Engine 需要 defaultHost 属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的 host 组件。

  1. <Engine name="Catalina" defaultHost="localhost">
  • name:Engine 组件的名称;
  • defaultHost:Tomcat 支持基于 FQDN(Fully Qualified Domain Name 全限定域名)的虚拟主机,这些虚拟主机可以通过在 Engine 容器中定义多个不同的 Host 组件来实现;但如果此引擎的连接器收到一个发往非明确定义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理,因此,在 Engine 中定义的多个虚拟主机的主机名称中至少要有一个跟 defaultHost 定义的主机名称同名;

5、Host 组件

位于 Engine 容器中用于接收请求并进行相应处理的虚拟主机。通过该容器可以运行 Servlet 或者 JSP 来处理请求。

  1. <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
  • name:虚拟主机的名称,Tomcat 通过在请求 URL 中的域名与 name 中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在 Engine 中 defaultHost 指定的主机处理;
  • appBase:此 Host 的 webapps目录,即指定存放 web 应用程序的目录的路径,默认指向 ROOT 目录下的 index.jsp;
  • unpackWARs:在启用此 webapps 时是否对 WAR 格式的归档文件先进行展开;默认为 true;
  • autoDeploy:在 Tomcat 处于运行状态时放置于 appBase 目录中的应用程序文件是否自动进行 部署,默认为 true;

6、Context 组件

Context 是 Host 的子标签,代表指定一个 Web 应用,它运行在某个指定的虚拟主机(Host) 上;每个 Web 应用都是一个 WAR 文件,或文件的目录;server.xml 配置中没有配置 Context 属性,默认支持运行多个项目。

  1. <Context path="/test" docBase="D:\bjsxt\itbaizhan.war"/>
  • path:context path 既浏览器访问项目的访问路径。
  • docBase:相应的 Web 应用程序的存放位置;也可以使用相对路径,起始路径为此 Context 所属 Host 中 appBase 定义的路径;

Tomcat体系结构

Tomcat 总结的更多相关文章

  1. Tomcat一个BUG造成CLOSE_WAIT

    之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...

  2. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  3. Tomcat shutdown执行后无法退出进程问题排查及解决

    问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...

  4. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  5. Linux CentOS 配置Tomcat环境

    一.下载Tomcat 下载Tomcat方式也有两种,可以参考我的前一篇博文Linux CentOS配置JDK环境,这边就不再赘述. 二.在Linux处理Tomcat包 1.创建tomcat文件夹 mk ...

  6. 在Linux虚拟机下配置tomcat

    1.到Apache官网下载tomcat http://tomcat.apache.org/download-80.cgi 博主我下载的是tomcat8 博主的jdk是1.8 如果你们的jdk是1.7或 ...

  7. tomcat开发远程调试端口以及利用eclipse进行远程调试

    一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里:  SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...

  8. Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法

    有的项目引用了太多的jar包,或者反射生成了太多的类,异或有太多的常量池,就有可能会报java.lang.OutOfMemoryError: PermGen space的错误, 我们知道可以通过jvm ...

  9. mac下安装及配置tomcat

    mac下的软件不像windows下的程序那样写注册表,对于tomcat的安装来说,在mac下是名符其实的绿色软件,具体操作如下: 1.到 apache官方主页 下载完整 tar.gz文件包.(没有专门 ...

  10. 设置tomcat远程debug

    查看端口占用情况命令: netstat -tunlp |grep 8000 tomcat 启动远程debug: startup.sh 中的最后一行 exec "$PRGDIR"/& ...

随机推荐

  1. matlab中colormap

    来源:https://ww2.mathworks.cn/help/matlab/ref/colormap.html?searchHighlight=colormap&s_tid=doc_src ...

  2. Noip 2013 真题练习

    Day1 T1 转圈游戏 Link 一句话题意: 让你求 \({x + m \times 10^k} \bmod n\) 的结果. 直接套上快速幂的板子. code #include<iostr ...

  3. DX12龙书 02 - DirectXMath 库中与向量有关的类和函数

    0x00 需要用到的头文件 #include <DirectXMath> #include <DirectXPackedVector.h> using namespace Di ...

  4. Verilog基础入门——Vivado流水灯工程(四)(实验报告)

    今日进行了数字逻辑实验,完成了一个最简单的FPGA设计,即流水灯设计. 此处记录我们的指导文件以及实验报告,同时记录遇到的问题及解决方法. 一.vivado工程源文件编写 counter.v文件 `t ...

  5. 我不信这篇文章能让你学会C语言,但是我还是想分享一下!

    前言 C 语言是一门抽象的.面向过程的语言,C 语言广泛应用于底层开发,C 语言在计算机体系中占据着不可替代的作用,可以说 C 语言是编程的基础,也就是说,不管你学习任何语言,都应该把 C 语言放在首 ...

  6. selenium 提取天猫网页数据

    from time import sleep from selenium import webdriver br = webdriver.Chrome() url = "https://ww ...

  7. win安装appium

    Windows 下配置 Appium,要提前装好jdk,请参考:https://jingyan.baidu.com/article/e8cdb32b2699cb37042bad59.html 1.下载 ...

  8. 探索ParNew和CMS垃圾回收器

    前言 上篇文章我们一起分析了JVM的垃圾回收机制,了解了新生代的内存模型,老年代的空间分配担保原则,并简单的介绍了几种垃圾回收器.详细内容小伙伴们可以去看一下我的上篇文章:秒懂JVM的垃圾回收机制. ...

  9. Linux系统及第三方应用官方文档

    通过在线文档获取帮助 http://www.github.com https://www.kernel.org/doc/html/latest/ http://httpd.apache.org htt ...

  10. CDH+Kylin三部曲之一:准备工作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...