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文件,在其中添加以下代码:

        <welcome-file-list>
        <welcome-file>要设置的站点首页文件名</welcome-file>
        </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标签下添加子标签

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

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

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

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

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

    • 编辑test.xml内容

      <?xml version="1.0" encoding="UTF-8"?>
      <Context
      docBase="D:\testDirectory">
      reloadable="true"
      </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

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

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

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


Tomcat启动乱码问题

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

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

解决办法:

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

    java.util.logging.ConsoleHandler.encoding = UTF-8
    修改为
    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 实例,必须配置它们使用不同的端口。

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

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

2、Service 组件

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

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

3、Connector 组件

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

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

1) HTTP 连接器

2) SSL 连接器(HTTPS协议)

3) AJP1.3 连接器

4) proxy 连接器

<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 组件。

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

5、Host 组件

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

<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 属性,默认支持运行多个项目。

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

Tomcat体系结构

最新文章

  1. asp.net core视图组件(ViewComponent)简单使用
  2. 解决python编码格式错误问题
  3. 只具备内网的服务器通过yum安装软件
  4. 【转】 C++模板详解
  5. java中request,application,session三个域及参数简单示例
  6. python中的列表(list) 切片详解
  7. 原生js的数组除重复
  8. ubuntu server修改时区
  9. Jquery IE 缓存问题
  10. 冒泡排序算法(Java)
  11. ALV添加文字输入框
  12. 定制滚动条样式 webkit
  13. windows服务定时任务
  14. Java中的集合类,集合类有哪些,如何增添删除元素,如何遍历
  15. 【转载】C#检测客户端输入的内容是否含有危险字符串
  16. Python编程笔记(第二篇)二进制、字符编码、数据类型
  17. 传递数据后创建后台service来处理事件!
  18. Letterbox,Pillarbox和Pan&amp;Scan
  19. Reverse string using recursion
  20. T-SQL 标识符

热门文章

  1. JDK1.8新特性之(三)--函数式接口
  2. Java知识系统回顾整理01基础03变量04类型转换
  3. 【转载】绕过CDN找到源站的思路
  4. MATLAB中exist函数的用法
  5. STM32之旅1——LED
  6. 把python文件打包成可执行文件(win10实验成功)
  7. docker-创建容器常见选项
  8. 用网桥和veth实现容器的桥接模式
  9. MeteoInfoLab脚本示例:格点数据散点图
  10. Pyhton中获取列表的索引