Tomcat常见问题

当我们在Eclipse上开发web工程时,工程部署到Tomcat上了,所以修改文件的源码时,Eclipse会自动将更改后的文件重新部署到Tomcat上,但是如果你做出修改的内容仍然在浏览器中看不到,那么可以使用以下几种常用的解决方法:

1. 右键点击部署的工程,选择清理模块文件夹:

Tomcat常见问题与简单的Servlet开发_第1张图片


右键点击Tomcat,选择Clean,清理Tomcat的工程目录:

Tomcat常见问题与简单的Servlet开发_第2张图片


  1. 右键点击Tomcat,选择Restart重新启动:

Tomcat常见问题与简单的Servlet开发_第3张图片


  1. 点击stop停止Tomcat服务器,并删除部署的工程,然后再重新部署工程运行:

Tomcat常见问题与简单的Servlet开发_第4张图片


  1. 检查以下几个细节:

ip地址是否有写错

端口是否有写错或者是否通行

工程名称有没有访问错误

请求页面的名称是否有写错


  1. 清理Tomcat的工作环境:

删除Tomcat中部署的所有工程,只运行目前的工程。

还是不行就删除整个Tomcat,重新下载一个


  1. 如果是在启动服务器时报错,要查看控制台打印的日志信息,找出错误来源,学会分析日志信息对于解决错误很有帮助:

Tomcat常见问题与简单的Servlet开发_第5张图片


  1. 查看Eclipse中的server目录下的文件是否正常,有没有缺失:

Tomcat常见问题与简单的Servlet开发_第6张图片


思维导图:

Tomcat常见问题与简单的Servlet开发_第7张图片



关于创建web工程时的一些问题:

在Eclipse中创建Dynamic Web Porject(动态web工程)时,会让我们选择以下几个配置:


Tomcat常见问题与简单的Servlet开发_第8张图片


1. 上图中的工程名称不用多解释,关于运行服务器则不一定要选择Tomcat,可以使用其他的web服务器:

Tomcat常见问题与简单的Servlet开发_第9张图片

我们选择Tomcat并不是说针对Tomcat这个服务器去开发,开发后的工程并不是只能应用于这个服务器,Tomcat只是作为一个运行我们开发工程的载体,在Tomcat上开发的工程完全可以在其他的支持Java的服务器中运行。

我们使用Tomcat作为运行服务器是为了导入Tomcat的jar包类库,每个支持Java的web服务器都实现了Java所定制的接口规范,我们开发web工程的时候需要借助这些接口来进行开发,就像使用JDBC连接数据库一样,需要导入JDBC的jar包,通过它根据接口规范所实现的操作类去开发连接数据库的模块,这也是Java面向接口编程普遍的应用之一。


  1. 动态web模块版本需要视服务器的版本而选择,因为不同版本的web服务器支持的动态web模块版本不一样,这里以Tomcat为例,Tomcat8.0以上的版本才可以支持3.1的web模块版本,那么如何得知当前使用的web服务器版本支持什么版本的web模块?这个可以在官方的文档上查看到,同样的以Tomcat为例:

Tomcat常见问题与简单的Servlet开发_第10张图片


选择一个版本点击进去:

Tomcat常见问题与简单的Servlet开发_第11张图片


在工程创建时的点击Configuration(配置)右边的按钮,可以在里面勾选一些Project Facets,并且能选择不同的版本:

Tomcat常见问题与简单的Servlet开发_第12张图片


Project Facets可以理解为:“项目的特性”。Project Facets的作用特性:

  • facet 定义了 java ee 项目的特性和要求

  • 为项目添加 EAR facet 会自动添加 web.xml (deployment descriptor file) ,并重新设置classpath

  • 项目创建时至少已经有一个 facet,开发人员可以按需添加其他 facet

  • 有的 facet 会依赖其他 facet

  • 有的 facet 可能和其他 facet 互斥

  • facet 可以设置版本



下面用实际例子来演示一下Project Facets的作用:

例如我现在有一个普通的Java工程:

4256


右键点击此工程的属性,进入属性界面后点击Project Facets,可以看到这个工程勾选了哪些Project Facets:

Tomcat常见问题与简单的Servlet开发_第13张图片


可以看到只勾选了Java,这是被默认选中的配置,因为这是一个最简单的java项目,如果想把这个java项目变成一个web项目,勾选其中的Dynamic Web Module并点击Apply即可:

Tomcat常见问题与简单的Servlet开发_第14张图片


此时查看工程目录可以看到多了一个WebContent目录:

Tomcat常见问题与简单的Servlet开发_第15张图片


重新打开Project Facets面板框,会发现JavaScript选项框也被选中了:

Tomcat常见问题与简单的Servlet开发_第16张图片


从这个例子应该可以很轻易地明白Project Facets的作用。





Servlet开发

介绍如何开发servlet之前,先介绍一下什么是servlet:

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

所以Servlet就是一个接收用户请求,处理完请求后生成动态Web内容的一个Java程序。是一个简单的Java类,这个类中写的是处理用户请求的代码,因为web服务器都是以http协议来进行通信的,所以开发基于http协议的Servlet需要继承一个叫做HttpServlet的类,并且要实现它里面的一个方法,这个方法用来处理用户的请求。

示意图:

Tomcat常见问题与简单的Servlet开发_第17张图片

除了需要继承一个父类,我们还需要配置Servlet的web访问映射,需要给它起一个别名,在浏览器中只需要访问这个别名就可以访问到这个Servlet类。有两种配置方式:一种是通过web.xml文件进行配置,一种是通过注解来配置。首先介绍通过xml来配置,因为注解相对于xml来说要简单一些,至于为什么要有一个别名:

4262

  1. 在创建web工程的时候勾选创建web.xml文件:

Tomcat常见问题与简单的Servlet开发_第18张图片


2. 创建一个Java类,继承于HttpServlet,并重写父类的doGet方法,并在方法中写上一句打印语句:

Tomcat常见问题与简单的Servlet开发_第19张图片


3. 打开web.xml文件,删除一些内容:

Tomcat常见问题与简单的Servlet开发_第20张图片


  1. 增加以下配置信息:

Tomcat常见问题与简单的Servlet开发_第21张图片


简单解释一下这段配置信息的意义:

Tomcat常见问题与简单的Servlet开发_第22张图片


5. 配置完之后,将工程部署到Tomcat中,并启动Tomcat服务器,然后在浏览器中访问以下地址:

http://localhost:8080/myweb/hello

打开后会发现控制台打印了一段消息:

Tomcat常见问题与简单的Servlet开发_第23张图片

这是因为这个Servlet被访问了,所以方法中的代码也就会执行了。


从浏览器访问Servlet的过程:

Tomcat常见问题与简单的Servlet开发_第24张图片

Tomcat服务器接收到浏览器的访问时,会先去webapps这个目录下找到该访问的目标Servlet所在的工程目录,然后在此工程目录下找到WEB-INF目录,询问此目录下的web.xml文件,会在此文件中先寻找到标签所声明的内容,再找到与此标签相对应的标签里声明的Servlet操作类。寻找到后就会去classes目录下找到这个Servlet操作类,接着就会实例化此操作类的对象,然后调用此类中的doGet方法,就会执行此方法里面的代码。

所以最后会在控制台打印一段消息,每次访问Servlet都是这样的一个流程,这只是最简单Servlet访问流程,还有更复杂的。


以上是通过web.xml去配置Servlet的web访问,下面介绍一下使用注解来配置,但是要注意的是注解的配置方式是Servlet3.0才有的特性:

1.创建web工程,这次不需要勾选创建web.xml文件了,然后同样的创建一个Java类,继承于HttpServlet,并重写父类的doGet方法,在方法中写上一句打印语句:

Tomcat常见问题与简单的Servlet开发_第25张图片


  1. 配置注解,在类上声明@WebServlet() 注解,并在注解的小括号里上此Servlet类的web访问名称:

Tomcat常见问题与简单的Servlet开发_第26张图片

可以看到通过注解的方式来配置,比web.xml不知道高到哪里去了,一个注解就搞定了,要简单很多,所以xml渐渐地比较少使用了,只不过一些老工程可能是使用xml文件配置的,所以了解一下xml的配置方式还是有必要的,免得到时候遇到了抓瞎。


3. 配置完之后,同样的将工程部署到Tomcat中,并启动Tomcat服务器,然后在浏览器中访问以下地址:

http://localhost:8080/myweb/hello

打开后也会发现控制台打印了一段消息:

Tomcat常见问题与简单的Servlet开发_第27张图片


你访问几次就会打印多少句:

Tomcat常见问题与简单的Servlet开发_第28张图片


通过数组,注解能一次性配置多个别名,而xml文件需要写好几个标签:

Tomcat常见问题与简单的Servlet开发_第29张图片

通过以上的几个别名都可以访问这个Servlet:

4275

4276

4277

4278


控制台:

Tomcat常见问题与简单的Servlet开发_第30张图片


甚至可以加上任意后缀:

Tomcat常见问题与简单的Servlet开发_第31张图片


访问它时依旧是个Servlet:

Tomcat常见问题与简单的Servlet开发_第32张图片

Tomcat常见问题与简单的Servlet开发_第33张图片


控制台:

Tomcat常见问题与简单的Servlet开发_第34张图片


每次修改Servlet的别名后记得重启Tomcat服务器,不然不会生效的。