使用内置tomcat创建WEB项目
大家知道,WEB应用程序有四个组成部分:网页、WEB服务器、浏览器、以及http协议。四个组成部分中,最为重要的就是WEB服务器。
Web服务器主要用提供网页浏览服务的计算机。接收客户端请求,然后根据请求向客户端返回结果。但是WEB服务器只能向客户端提供静态的html响应信息。所以,为了丰富响应信息的灵活性,就需要在WEB服务器基础上添加辅助应用。辅助应用可以在WEB服务器接收到请求信息以后,进行一系列的业务处理,然后动态产生响应信息。而java解决辅助应用的方案,就是WEB容器+Servlet方式。由WEB容器提供底层操作的服务,比如:解析流,封装请求响应对象,线程管理等,然后,预留Servlet接口,交给开发者书写业务操作。
在开发中,很多时候使用tomcat做为WEB应用服务器。tomcat源自于apache软件基金会jakarta项目。tomcat是一款免费的、开源的、性能稳定、技术成熟的WEB容器产品。
tomcat即提供了WEB服务器的功能,可以接收客户端请求,产生静态的html响应信息。又可以做为WEB容器,向客户端提供动态数据。在以前很多项目中,都是从官网中下载tomcat,然后,将WEB应用布署在tomcat中。当启动tomcat以后,就可以进行客户端的访问处理了。
不过,在springBoot出现以后,tomcat容器就已经在springBoot框架中内置了,这样的好处是开发WEB项目时,可以省去外置tomcat的一些管理,也可以集成布署的操作,也方便WEB项目的打包。那么内置tomcat是如何实现的呢?我们来看一下。
首先,在maven项目中添加tomcat依赖:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.36</version>
</dependency>
这样,tomcat的jar包就有了,相关的API也有了。现在,我们按照Servlet规范,创建一个Servlet实现类对象。
public class TestServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { this.doPost(req,resp); } protected void doPost(HttpServletRequest req,HttpServletResponse resp) { resp.getWriter().println("hello"); } }
好,现在看一下,如何启动tomcat。创建启动类MainServer:
public class MainServer { public MainServer(){ //创建tomcat对象 Tomcat tomcat = new Tomcat(); //设置启动端口 tomcat.setPort(8088); //引导Http引擎 tomcat.getConnector(); //创建上下文 Context context = tomcat.addContext("", null); //启动tomcat tomcat.start(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args){ new MainServer(); } }
现在来看一下如何注册Servlet,在调用tomcat.start(); 方法,启动tomcat之前,添加servlet的注册信息
Wrapper servlet = Tomcat.addServlet(context, "testServlet", new TestServlet());//注册Servlet servlet.setLoadOnStartup(1);//容器启动初始化Sevlet servlet.addMapping("/test");//配置Servlet的访问路径
好了,运行启动类,然后,打开浏览器输入http://localhost:8088/test就可以看到 hello 响应信息了。
我们现在使用maven创建好了内置tomcat,不过,内置tomcat的开发和外置tomcat的开发有很多不同。内置tomcat不再象外置tomcat一样有配置文件,可以改端口。也不象Servlet规范一样,在WEB应用程序中有web.xml进行WEB组件的注册。它有自己的API和管理WEB组件的方式,后续文章中,我们来继续看一下。

浙公网安备 33010602011771号