当前位置:网站首页 > Java教程 > 正文

java servlet视频教程



Servlet入门


但是,要编写一个完善的HTTP服务器,以HTTP/1.1为例,需要考虑的包括:

  • 识别正确和错误的HTTP请求;
  • 识别正确和错误的HTTP头;
  • 复用TCP连接;
  • 复用线程;
  • IO异常处理;

这些基础工作需要耗费大量的时间,并且经过长期测试才能稳定运行。如果我们只需要输出一个简单的HTML页面,就不得不编写上千行底层代码,那就根本无法做到高效而可靠地开发。

因此,在JavaEE平台上,处理TCP连接,解析HTTP协议这些底层工作统统扔给现成的Web服务器去做,我们只需要把自己的应用程序跑在Web服务器上。为了实现这一目的,JavaEE提供了Servlet API,我们使用Servlet API编写自己的Servlet来处理HTTP请求,Web服务器实现Servlet API接口,实现底层功能:

我们来实现一个最简单的Servlet:

一个Servlet总是继承自,然后覆写或方法。注意到方法传入了和两个对象,分别代表HTTP请求和响应。我们使用Servlet API时,并不直接与底层TCP交互,也不需要解析HTTP协议,因为和就已经封装好了请求和响应。以发送响应为例,我们只需要设置正确的响应类型,然后获取,写入响应即可。

现在问题来了:Servlet API是谁提供?

Servlet API是一个jar包,我们需要通过Maven来引入它,才能正常编译。编写文件如下:

注意到这个与前面我们讲到的普通Java程序有个区别,打包类型不是,而是,表示Java Web Application Archive:

引入的Servlet API如下:

注意到指定为,表示编译时使用,但不会打包到文件中,因为运行期Web服务器本身已经提供了Servlet API相关的jar包。

要务必注意的版本。4.0及之前的由Oracle官方维护,引入的依赖项是,编写代码时引入的包名为:

而5.0及以后的由Eclipse开源社区维护,引入的依赖项是,编写代码时引入的包名为:

教程采用最新的版本,但对于很多仅支持Servlet 4.0版本的框架来说,例如Spring 5,我们就只能使用版本,这一点针对不同项目要特别注意。

引入不同的Servlet API版本,编写代码时导入的相关API的包名是不同的。

目录目前为空,如果我们需要存放一些资源文件,则需要放入该目录。有的同学可能会问,目录下是否需要一个配置文件?这个配置文件是低版本Servlet必须的,但是高版本Servlet已不再需要,所以无需该配置文件。

运行Maven命令,在目录下得到一个文件,这个文件就是我们编译打包后的Web应用程序。

如果执行package命令遇到Execution default-war of goal org.apache.maven.plugins:maven-war-plugin:2.2:war failed错误时,可手动指定maven-war-plugin最新版本3.3.2,参考练习工程的pom.xml。

现在问题又来了:我们应该如何运行这个文件?

普通的Java程序是通过启动JVM,然后执行方法开始运行。但是Web应用程序有所不同,我们无法直接运行文件,必须先启动Web服务器,再由Web服务器加载我们编写的,这样就可以让处理浏览器发送的请求。

因此,我们首先要找一个支持Servlet API的Web服务器。常用的服务器有:

  • Tomcat:由Apache开发的开源免费服务器;
  • :由Eclipse开发的开源免费服务器;
  • GlassFish:一个开源的全功能JavaEE服务器。

还有一些收费的商用服务器,如Oracle的,IBM的WebSphere。

无论使用哪个服务器,只要它支持Servlet API 5.0(因为我们引入的Servlet版本是5.0),我们的war包都可以在上面运行。这里我们选择使用最广泛的开源免费的Tomcat服务器。

要运行我们的,首先要,解压后,把复制到Tomcat的目录下,然后切换到目录,执行或启动Tomcat服务器:

在浏览器输入即可看到的输出:

细心的童鞋可能会问,为啥路径是而不是?因为一个Web服务器允许同时运行多个Web App,而我们的Web App叫,因此,第一级目录表示Web App的名字,后面的才是我们在中映射的路径。

那能不能直接使用而不是?毕竟比较简洁。

答案是肯定的。先关闭Tomcat(执行或),然后删除Tomcat的webapps目录下的所有文件夹和文件,最后把我们的复制过来,改名为,文件名为的应用程序将作为默认应用,启动后直接访问即可。

因为我们编写的Servlet并不是直接运行,而是由Web服务器加载后创建实例运行,所以,类似Tomcat这样的Web服务器也称为Servlet容器。

由于Servlet版本分为<=4.0和>=5.0两种,所以,要根据使用的Servlet版本选择正确的Tomcat版本。从可知:

  • 使用Servlet<=4.0时,选择Tomcat 9.x或更低版本;
  • 使用Servlet>=5.0时,选择Tomcat 10.x或更高版本。

运行本节代码需要使用Tomcat 10.x版本。

在Servlet容器中运行的Servlet具有如下特点:

  • 无法在代码中直接通过new创建Servlet实例,必须由Servlet容器自动创建Servlet实例;
  • Servlet容器只会给每个Servlet类创建唯一实例;
  • Servlet容器会使用多线程执行或方法。

复习一下Java多线程的内容,我们可以得出结论:

  • 在Servlet中定义的实例变量会被多个线程同时访问,要注意线程安全;
  • 和实例是由Servlet容器传入的局部变量,它们只能被当前线程访问,不存在多个线程访问的问题;

因此,正确编写Servlet,要清晰理解Java的多线程模型,需要同步访问的必须同步。

给增加一个URL参数,例如传入,能够输出。

Servlet入门 - 图2下载练习: (推荐使用IDE练习插件快速下载)

提示:根据,调用合适的方法获取URL参数。

编写Web应用程序就是编写Servlet处理HTTP请求;

Servlet API提供了和两个高级接口来封装HTTP请求和响应;

Web应用程序必须按固定结构组织并打包为文件;

需要启动Web服务器来加载我们的war包来运行Servlet。

  • 上一篇: java简单爬虫教程
  • 下一篇: java教程全文
  • 版权声明


    相关文章:

  • java简单爬虫教程2025-03-09 11:58:03
  • java源码教程全集2025-03-09 11:58:03
  • java网页前端教程2025-03-09 11:58:03
  • java平板运行教程2025-03-09 11:58:03
  • Java finereport教程2025-03-09 11:58:03
  • java教程全文2025-03-09 11:58:03
  • windows java安装教程2025-03-09 11:58:03
  • java批量上传教程2025-03-09 11:58:03
  • java script安装教程2025-03-09 11:58:03
  • java redis 视频教程2025-03-09 11:58:03