在本文中您将了解到Tomcat的下载安装教程以及基本使用方法,语言通俗易懂,适合快速上手。
一、Tomcat简介
1、Tomcat概述和使用场景
Tomcat是一款开源的Servlet容器,实现了对Servlet和JSP规范的支持。 Tomcat 本身内含了一个 HTTP 服务器,所以也可以被当作一个 Web 服务器来使用。
当我们完成一个HTML前端页面的编写时,需要一个Web服务器来接收HTML信息,此时除了我们可以自己编写这个网页外(方法附在文末),还有便是使用Tomcat开源服务器来完成。
2、Tomcat里各配置文件的功能
配置文件名称 | 概述和主要功能 |
---|---|
bin | binary二进制可执行脚本文件,其中.bat后缀适用于windows系统,.sh后缀文件适用于Linux操作系统。 |
conf | config配置文件,存放应用程序配置信息的模块或文件夹。 |
lib | library库,通常包含一系列可重用的代码模块或函数集合。在这里存放 Tomcat 服务器的 jar 包。 |
logs | logs日志文件,存放出现的错误便于修改。 |
temp | temp临时文件,在运行过程中出现的临时文件(可删)。 |
webapps | webapps存放项目资源的目录,里面有我们创建的项目。 |
work | work工作目录,记录了我们工作的基本信息,很重要。 |
二、Tomcat下载安装教程
1、Tomcat的下载
首先登录Tomcat官网:Apache Tomcat® - Welcome!https://tomcat.apache.org/找到Download栏,选择自己想要下载的Tomcat版本.
在这里,笔者选择了较为稳定的Tomcat9版本,点击后打开可看到如下界面。
我们可以根据自己的电脑配置来选择合适的安装包(ps:电脑配置可以在设置->系统->系统信息中查看)一般为64位,点击即可开始下载。
温馨提示:下载完成后记得将它放在一个合适的路径下哦!
2、环境变量的配置
配置Tomcat环境变量前一定要配置好java的环境变量,尤其是JAVA_HOME。
其中需要注意的一点是,在环境变量时,不可以将jdk的路径直接放到path中,而是要通过一个JAVA_HOME作为中间变量来完成。
所以一个正确的环境变量配置应该是:
在path变量下的值有%JAVA_HOME%\bin
而同时有一个JAVA_HOME变量,值指向你的JDK存储的位置(注意最好不要有中文)。
三、Tomcat基本调试
1、启动和结束Tomcat
在前文中讲到在Tomcat配置文件中有bin二进制可执行脚本文件,其中便有我们使用Tomcat必须要打开的startup.bat或者startup.sh(区别在于你使用的操作系统是Linux还是Windows,在这里笔者使用的系统为Windows,故下面以.bat后缀文件展开演示)
点击Tomcat->bin->startup.bat,即可打开一个cmd界面如下。
此时我们发现由于中间出现了中文,没有很好的兼容导致了乱码。
需要我们进行一下调整,打开Tomcat->conf->logging.properties
将其中的UTF-8 改为 GBK,如上图所圈的地方
将java.util.logging.ConsoleHandler.encoding = UTF-8
替换为java.util.logging.ConsoleHandler.encoding = GBK
替换结果如下图所示
此时再看运行结果就已经可以正常显示中文了。
当我们看到最后一行有服务器启动的字样,就说明Tomcat就已经可以正常启动运行了。
那我们又该如何结束Tomcat呢?
主要有两种方法。
一是简单粗暴的点击右上角界面的关闭按钮,这种在一般情况下都是可以的,但是也可能会出现错误,造成关闭异常。
二是通过Tomcat->bin->shutdown.bat关闭,这种比较安全,也比较符合流程。
2、测试是否功能正常
当我们可以正常打开Tomcat后,我们需要进行下一步的功能测试,那就是在startup.bat运行的情况下,打开一个浏览器,输入网址 http://127.0.0.1:8080 或者 http://localhost:8080,再回车查看显示页面。此时正常状态下是会到Tomcat上的,如下图所示。
四、使用Tomcat完成一个简单的网页测试
1、简单HTML网页的编写
在该例中我们模拟的是一个显示学生的基本信息的表格网页(是一个没有网页设计和前后端连接,只有信息的比较简易的网页),HTML代码如下。
<!DOCTYPE html>
<html>
<head>
<title>Student List</title>
</head>
<body>
<table border='1' bgcolor="AntiqueWhite">
<tr>
<th>NO.</th>
<th>NAME</th>
<th>SEX</th>
<th>AGE</th>
</tr>
<tr>
<td>001</td>
<td>ZhangSan</td>
<td>m</td>
<td>19</td>
</tr>
<tr>
<td>002</td>
<td>LiSi</td>
<td>w</td>
<td>10</td>
</tr>
<tr>
<td>003</td>
<td>WangWu</td>
<td>m</td>
<td>18</td>
</tr>
</table>
</body>
</html>
页面显示情况如下。
2、连接Web服务器
我们可以发现,在当前路径下,我们只是完成了在本地的访问,而实际上一个网页的完成是需要实现交互的,通俗来说就是需要在网上访问的,也就是需要连接Web服务器,此时如果我们不想手写一个服务器的话,就需要用到我们的Tomcat了,那么具体该如何操作呢?
1.创建一个WebApp项目
点击Tomcat->webapps,在这个界面上我们可以看到原本就有的几个文件夹,这些也都是WebApps项目,其中有一个名为examples的项目,是我们需要重点关注和参考的创建规范。
我们在此界面上右击空白处选择新建文件夹,完成命名,注意不要带中文。本例中,我们命名为StuCour项目,将写好的HTML文件放到这个文件夹里。
2.在服务器上打开HTML文件
这个地方需要我们注意的是其实我们访问的根路径已经指向webapps了,我们在设置相对路径时只需要根据webapps下的路径来完成。
已知我们为了实验方便,只是将HTML文件存在了StuCour文件夹下,那么我们可以设置的网址就是 http://127.0.0.1:8080/StuCour/stuList.html,注意大小写不要拼错,要记得自己的文件名。
记得首先要打开startup.bat再访问网页!
此时我们便可以通过网页来访问它啦!
这就是我们这一节学到的简单的Tomcat完成网页访问的例子,希望大家理解记忆。
五、常见debug解决方案
1、8080端口被占如何处理
首先Win+R键打开cmd命令框,然后输入 netstat -nao 查看PID值
在任务栏右键打开任务管理器,找到对应的进程并把它关掉。
六、扩展:如何自己搭建简易服务器完成网页测试
这里我们主要介绍两种方法来自己搭建非常简易的服务器,可以接收请求request。
1、直接代码法
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10002);
Socket s = ss.accept();
InputStream in = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String str = br.readLine();
String [] strs = str.split(" ");
if(!strs[1].equals("/stuList.html"))
{
s.close();
return;
}
OutputStream out = s.getOutputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
pw.println("HTTP/1.1 200 OK");
pw.println("Content-Type: text/html");
pw.println("");
pw.println("<!DOCTYPE html>");
pw.println("<html>");
pw.println("<head><title>Student List</title></head>");
pw.println("<body>");
pw.println("<table border='1' bgcolor='AntiqueWhite'>");
pw.println("<tr><th>NO.</th><th>NAME</th><th>SEX</th><th>AGE</th></tr>");
pw.println("<tr><td>316</td><td>LuoYiZhou</td><td>m</td><td>24</td></tr>");
pw.println("<tr><td>226</td><td>HuYiTian</td><td>m</td><td>30</td></tr>");
pw.println("<tr><td>223</td><td>WangXinYi</td><td>w</td><td>19</td></tr>");
pw.println("</table>");
pw.println("</body>");
pw.println("</html>");
pw.flush();
s.close();
}
}
通过这段代码我们可以看出,我们直接将请求报文的格式内容以及HTML代码写入了打印流中,这种方法比较适用于代码工程量较小的项目,并且有修改HTML内容的需求的。
2、文档嵌入法
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10002);
Socket s = ss.accept();
InputStream in = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String str = br.readLine();
String [] strs = str.split(" ");
OutputStream out = s.getOutputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
BufferedReader fr = new BufferedReader(new FileReader("d://HTML/htmlcode/webroot" + strs[1]));
pw.println("HTTP/1.1 200 OK");
pw.println("Content-Type: text/html");
pw.println("");
while((str = fr.readLine())!=null)
{
pw.println(str);
}
pw.flush();
s.close();
}
}
可以看出这种利用了访问一个文档的形式,简化了我们将request直接写入代码的繁琐,它适用于工程量较大的项目,但是缺点是没有办法直接访问HTML代码。
3、如何完成测试
我们只需要在eclipse上运行该代码,并在输入网址 http://127.0.0.1:10002/stuList.html 即可访问。