前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tomcat常见问题与简单的Servlet开发

Tomcat常见问题与简单的Servlet开发

作者头像
端碗吹水
发布2020-09-23 11:16:03
7470
发布2020-09-23 11:16:03
举报

Tomcat常见问题

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

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

4243
4243

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

4244
4244
  1. 右键点击Tomcat,选择Restart重新启动:
4245
4245
  1. 点击stop停止Tomcat服务器,并删除部署的工程,然后再重新部署工程运行:
4246
4246
  1. 检查以下几个细节:

ip地址是否有写错

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

工程名称有没有访问错误

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

  1. 清理Tomcat的工作环境:

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

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

  1. 如果是在启动服务器时报错,要查看控制台打印的日志信息,找出错误来源,学会分析日志信息对于解决错误很有帮助:
4247
4247
  1. 查看Eclipse中的server目录下的文件是否正常,有没有缺失:
4248
4248

思维导图:

4249
4249

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

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

4250
4250

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

4251
4251

我们选择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为例:
4252
4252

选择一个版本点击进去:

4254
4254

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

4255
4255

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
4256

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

4257
4257

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

4258
4258

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

4259
4259

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

4260
4260

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

Servlet开发

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

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

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

示意图:

4261
4261

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

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

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

4264
4264

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

4265
4265
  1. 增加以下配置信息:
4266
4266

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

4267
4267

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

http://localhost:8080/myweb/hello

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

4268
4268

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

从浏览器访问Servlet的过程:

4269
4269

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

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

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

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

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

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

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

http://localhost:8080/myweb/hello

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

4272
4272

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

4273
4273

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

4274
4274

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

4275
4275
4276
4276
4277
4277
4278
4278

控制台:

4279
4279

甚至可以加上任意后缀:

4280
4280

访问它时依旧是个Servlet:

4281
4281
4282
4282

控制台:

4283
4283

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档