目标:
学习使用 java 代码启动 Tomcat 。
实现:
一、前期准备
实现自定义注解,并用自定义注解模拟正常的业务逻辑,实现将用户发送给服务器的数据回写给用户的功能。
1、加入依赖
本项目使用 java 代码操作Tomcat,所以需要引入 servlet 的 jar 包。为了在浏览器等前端显示信息,所以需要引入 JSP 相关 jar 包。源码如下:
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<? xml version = "1.0" encoding = "UTF-8" ?> < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://HdhCmsTestw3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < parent > < artifactId >handwritingproject</ artifactId > < groupId >com.njust</ groupId > < version >1.0-SNAPSHOT</ version > </ parent > < modelVersion >4.0.0</ modelVersion >
< artifactId >javaStartTomcat</ artifactId > < dependencies >
<!--Java语言操作tomcat --> < dependency > < groupId >org.apache.tomcat.embed</ groupId > < artifactId >tomcat-embed-core</ artifactId > < version >8.5.16</ version > </ dependency >
<!-- tomcat对jsp支持 --> < dependency > < groupId >org.apache.tomcat</ groupId > < artifactId >tomcat-jasper</ artifactId > < version >8.5.16</ version > </ dependency >
</ dependencies >
</ project > |
2、定义Servlet类
定义 IndexServlet 类,继承 HttpServlet ,该类只是简单的向客户端输出一行信息以证明服务成功启动。源码如下:
IndexServlet .java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package com.njust.servlet;
import java.io.IOException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class IndexServlet extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print( "this is index... tomcat" ); }
} |
3、定义Servlet类
定义 IndexServletC 类,继承 HttpServlet ,该类只是简单的向客户端输出一行信息以证明服务成功启动。该类和上面的类功能相同,只是输出不同的信息,以证明 Tomcat 服务器可以将请求分发到不同的 servlet 处理。源码如下:
IndexServletC .java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package com.njust.servlet;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;
public class IndexServletC extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print( "this is index... tomcat IndexServletC" ); }
} |
4、启动Tomcat并测试
定义 Main 类。配置 Tomcat 的基本信息。同时将不同路径映射到不同的 servlet 。源码如下:
Main .java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
package com.njust.tomcat;
import com.njust.servlet.IndexServletC; import org.apache.catalina.LifecycleException; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.Tomcat.FixContextListener;
import com.njust.servlet.IndexServlet;
/** * 使用Java语言创建Tomcat服务器<br> * Tomcat 底层执行程序 最终servlet<br> * SpringMVC底层使用servlet 包装<br> * */ public class Main { private static int PORT = 8080 ; private static String CONTEX_PATH = "/njust" ; private static String SERVLET_NAME = "indexServlet1" ; private static String SERVLET_NAMET = "indexServletC" ;
public static void main(String[] args) throws LifecycleException, InterruptedException {
// 创建tomcat服务器 Tomcat tomcatServer = new Tomcat(); // 指定端口号 tomcatServer.setPort(PORT); // 是否设置自动部署 tomcatServer.getHost().setAutoDeploy( false ); // 创建上下文 StandardContext standardContex = new StandardContext(); standardContex.setPath(CONTEX_PATH); // 监听上下文 standardContex.addLifecycleListener( new FixContextListener()); // tomcat容器添加standardContex tomcatServer.getHost().addChild(standardContex);
// 创建Servlet tomcatServer.addServlet(CONTEX_PATH, SERVLET_NAME, new IndexServlet()); tomcatServer.addServlet(CONTEX_PATH, SERVLET_NAMET, new IndexServletC()); // servleturl映射 standardContex.addServletMappingDecoded( "/index" , SERVLET_NAME); standardContex.addServletMappingDecoded( "/indexc" , SERVLET_NAMET); tomcatServer.start(); System.out.println( "tomcat start success.." ); // 异步进行接收请求 tomcatServer.getServer().await();
}
} |
运行该程序。控制台输出如下:
Console
四月 03, 2020 3:32:30 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-nio-8080"]
四月 03, 2020 3:32:31 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
信息: Using a shared selector for servlet write/read
四月 03, 2020 3:32:31 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service [Tomcat]
四月 03, 2020 3:32:31 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/8.5.16
四月 03, 2020 3:32:31 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-nio-8080"]
tomcat start success..
根据控制台信息,我们发现程序成功启动。接下来我们在浏览器访问Tomcat服务器。
我们访问 http://localhost:8080/njust/indexc 可以定位到 IndexServletC ,访问 http://localhost:8080/njust/index ,可以定位到 IndexServlet 。说明的 Tomcat 可以正常工作了。
总结
流程图
重点及易错点
1、服务器阻塞等待请求
1 2 3 4 |
tomcatServer.start(); System.out.println( "tomcat start success.." ); // 异步进行接收请求 tomcatServer.getServer().await(); |
在服务启动后,一定要调用 await() 方法异步进行接收请求,否则服务器启动成功就直接关闭了。
到此这篇关于Java启动Tomcat的实现步骤的文章就介绍到这了,更多相关Java启动Tomcat内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://blog.csdn.net/qq_32510597/article/details/105294735
查看更多关于Java启动Tomcat的实现步骤的详细内容...