码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-11-02 11:38:44      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:tomcat   servlet   javaweb   j2ee   javaee   


Tomcat常见问题

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

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

技术分享


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

技术分享


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

技术分享


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

技术分享


  1. 检查以下几个细节:

ip地址是否有写错

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

工程名称有没有访问错误

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


  1. 清理Tomcat的工作环境:

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

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


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

技术分享


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

技术分享


思维导图:

技术分享



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

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


技术分享


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

技术分享

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

技术分享


选择一个版本点击进去:

技术分享


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

技术分享


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工程:

技术分享


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

技术分享


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

技术分享


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

技术分享


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

技术分享


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





Servlet开发

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

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

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

示意图:

技术分享

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

技术分享

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

技术分享


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

技术分享


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

技术分享


  1. 增加以下配置信息:

技术分享


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

技术分享


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

http://localhost:8080/myweb/hello

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

技术分享

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


从浏览器访问Servlet的过程:

技术分享

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方法,在方法中写上一句打印语句:

技术分享


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

技术分享

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


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

http://localhost:8080/myweb/hello

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

技术分享


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

技术分享


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

技术分享

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

技术分享

技术分享

技术分享

技术分享


控制台:

技术分享


甚至可以加上任意后缀:

技术分享


访问它时依旧是个Servlet:

技术分享

技术分享


控制台:

技术分享


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



本文出自 “zero” 博客,请务必保留此出处http://zero01.blog.51cto.com/12831981/1978266

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

标签:tomcat   servlet   javaweb   j2ee   javaee   

原文地址:http://zero01.blog.51cto.com/12831981/1978266

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!