我的Java Web之路 - Tomcat(1)

介绍

前面介绍了Web的基础知识,最后引出了Web前端和Web后端,Web服务器、Web容器和Servlet容器等概念。Web前端的开发主要涉及HTML、CSS和JavaScript;Web后端的开发那就有很多语言了,C/C++、PHP、Python、Java和新贵语言Go等等。

Java在Web开发的主要技术就是Servlet,它最初是有Sun公司的某个大牛用Java开发Web服务器的产物,最后形成规范、标准,就叫Java Servlet Specification,简称JSS。Tomcat也是由该大牛开发出来的(其实就是用Java开发的),后来贡献给了Apache软件基金会。

所以,Tomcat首先是一个Web服务器,同时也是一个Servlet容器,当然它也是一个JSP容器(本质上,JSP也是Servlet)。容器也可以叫引擎。既然叫容器,那么它肯定就是能够某些东西,什么东西呢?当然就是Servlet了,那Servlet又是什么东西呢?它既然是Java提供的技术,在Java世界里一切都是类和对象,所以Servlet其实就是某种类而已,只不过它遵循某些规范(可以想象为某种格式)来供Servlet容器装载并执行。

Servlet技术咱暂且不细说,既然我们要用Servlet技术来开发Web应用程序,一个Servlet容器就必然是需要的,我们就选择Tomcat吧。

下载和安装

因为我使用的是Windows系统作为开发平台,在Windows系统下Tomcat的安装有两种,一种是使用安装器(就是Installer),一种是直接解压Tomcat二进制发行包。安装器可以把Tomcat安装为一个Windows服务。但这里,我采用跟Eclipse类似的方式,直接解压安装法。

当然,当你开发完你的Web应用程序之后,需要放到Tomcat服务器上,所以在你的部署机器上也需要安装Tomcat。

先到Tomcat官网下载最新版的Tomcat。
Tomcat下载.png
我们就选择红色箭头所指的版本Tomcat 9.0.16.Released,点击下面的Download,将出现:
Tomcat下载2.png
大家根据自己的系统来选择就可以了,我选择的是64-bit Windows zip。下载完毕之后,直接解压缩到合适的目录下。OK,这样就算安装完毕了,进入到解压出来的目录去看看都有哪些内容:
Tomcat安装.png

  • bin目录:主要存放各种脚本,包括启动和停止等脚本;
  • conf目录:存放配置文件,包括server.xml等配置文件;
  • lib目录:存放各种JAR包,包括servlet-api.jarjsp-api.jar等,我们的web应用程序就需要引用这些JAR包中的类或接口等。
  • logs目录:顾名思义,就是存放Tomcat的日志文件的,目前是空的;
  • temp目录:Tomcat临时文件的存放目录,暂时不需要理会,目前是空的;
  • webapps目录:这里就是存放你的Web应用程序的地方了,你需要把你的Web应用程序拷贝到这,然后Tomcat就能加载它,这就是所谓的部署你的应用。当然,还有其他的部署方式。这个目录里面已经带有一些Tomcat的示例Web应用程序。
  • work目录:这个是Tomcat的工作目录,目前是空的。
  • 剩下的:就是些说明文件、授权文件等,无须理会。

这里要说明的是,Tomcat把这些个目录分成三类:

  • 可以修改其中的文件的目录:conf、logs、webapps、work这四个目录。这类目录的存放位置其实可以用环境变量CATALINA_BASE设置,其值默认是安装目录;
  • 只能读其中的文件的目录:bin、lib这两个目录,可以用环境变量CATALINA_HOME设置,其值默认是安装目录;
  • 临时文件目录:temp目录,可以用环境变量CATALINA_TMPDIR设置,其值默认是CATALINA_HOME/temp。

为什么要这样分呢?这是为了启动多个Tomcat实例而拥有各自的定制特性和日志等(就放在自己设置的CATALINA_BASE目录下),或者避免升级Tomcat带来的文件覆盖。

启动和停止

既然这就算安装成功了,那咱就启动一下Tomcat来验证一下。打开Windows命令行工具,并进入到Tomcat的安装目录,我的机器上是:E:\csdn\apache-tomcat-9.0.16,然后输入:

bin\startup.bat

这就是执行bin目录下的tomcat启动脚本,一般情况下会执行成功,同时弹出Tomcat的控制台窗口:
Tomcat启动.png
从最后一句日志信息中可以看出Tomcat已经成功启动,但问题是出现了很多乱码,这是怎么回事?猜想是Tomcat打印日志的字符集和这个控制台显示信息的字符集有问题吧。于是网上搜了半天,在Tomcat控制台的标题栏右击弹出菜单,点击属性弹出属性对话框:
Tomcat启动2.png
显示Tomcat控制台窗口的字符集是GBK。于是想只要把Tomcat日志打印的字符集改为GBK就可以了吧。日志打印的字符集配置在哪呢?当然是先到conf目录下找找看啊,可以找到一个logging.properties文件,用文本编辑器打开看看:
Tomcat启动3.png
可以看到这个文件里有一项是配置日志打印字符集的,那就把它修改为GBK试试,结果真的成功了。

好,现在已经把Tomcat成功启动了,实际上我们就可以在浏览器地址栏输入:

http://localhost:8080/

按回车键可以看到:
Tomcat启动4.png
这其实就是Tomcat自带的一个示例Web应用程序,只不过它也可以用来配置、管理和监控该Tomcat运行实例,这也说明Tomcat确实已经运行起来了,而且是监听在8080端口上,当然,这都是可配置的。

停止Tomcat有几种方法:

  • 直接点击Tomcat控制台窗口标题栏的关闭按钮;
  • 在Tomcat控制台窗口时,使用快捷键Ctrl + C
  • 在另外一个命令行窗口执行Tomcat停止脚本:
bin\shutdown.bat

配置

这里先暂时不用理会,等需要用到的时候再讨论,所谓契约优先原则就是我们尽量使用默认的配置,尽量让默认的配置够用,这样就可以减少我们的工作量。试想一下,如果一个软件的使用需要很多很繁复的配置,那用户将会多么沮丧,这样的软件将是失败的。实际上,我们设计出的软件也应该尽量遵循这个原则。

Tomcat自带的示例Web应用程序

上面提到的webapps目录就是部署Web应用程序的目录,Tomcat安装包里面已经自带有几个示例Web应用。我们可以尝试着访问它们。

启动Tomcat,打开浏览器,先在地址栏输入:

http://localhost:8080/docs/

在浏览器上可以看到下面这个页面:
Tomcat示例Web应用.png
说明这个Web应用可以访问,它是Tomcat的使用文档,如果英文熟练的话,我们完全就可以通过这个应用来研究Tomcat的使用。没错,这就是Web应用,看起来用户体验不错吧。

在地址栏输入:

http://localhost:8080/examples/

在浏览器上可以看到下面这个页面:
Tomcat示例Web应用2.png
说明这个Web应用也可以访问,它真的是Tomcat的示例Web应用,我们可以进一步点击上面三个链接中的每一个,看看里面都有什么内容,每一个页面又有链接,继续点击访问即可,反正鼠标可以到处尝试着点击,看页面会有什么反应。这里给出的例子还是比较丰富的,甚至有聊天工具、贪吃蛇游戏、画板等应用。

我点击上面的Servlets examples,页面显示:
Tomcat示例Web应用3.png
再点击红色箭头所指的HelloWorld这个Servlet的源代码,让我们来看看Servlet的庐山真面目:
Tomcat示例Web应用4.png
可以看到,Servlet的庐山真面目就是一个Java类:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello World!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

上面代码熟悉吧,就是前面Java基础里面介绍的Java类的定义,只不过类定义里面有个extends关键字,以及方法doGet里面有个throws关键字,这两个我们还未曾介绍。剩下的要么就是导入其他包里面的类(import语句)、其他类的名称(HttpServlet、HttpServletRequest、HttpServletResponse、IOException、ServletException、PrintWriter 等)、对象的引用变量、通过对象引用调用方法。这些我们都已经介绍过。可见,一个Servlet就是一个Java类,只不过它继承了某个特殊的类而已,这里是继承 HttpServlet。我们后面就介绍何为继承

再在地址栏输入:

http://localhost:8080/host-manager/

http://localhost:8080/manager/

可以看到这两个web应用可以访问,但是需要用户名和密码登录后才能继续使用。

最后在地址栏输入:

http://localhost:8080/Root

这时页面显示HTTP Status 404错误,之前介绍HTTP协议的时候提到过,它表示服务器上没有所要请求的资源,可见Root这个目录这不是一个Web应用。

总结

  • Tomcat是一个既是Web服务器,又是Servlet容器;
  • Servlet其实就是一个特殊的类,遵循Servlet规范,当然Servlet规范可不仅仅包含Servlet这个类而已;
  • 遇到乱码的问题,一般都是字符集冲突的原因造成的;
  • 我们设计出的软件最好也遵循契约优先原则。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值