Tomcat内嵌式Tomcat及手写内嵌式Tomcat
嗯,代码如下。 import org.apache.catalina.Context; import org.apache.catalina.Host; import org.apache.catalina.LifecycleException; import org.apache.catalina.Wrapper; import org.apache.catalina.connector.Connector; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.Tomcat; /** * 实现自己的内嵌tomcat */ public class EmbeddedTomcatDemo { public static void main(String[] args) throws LifecycleException { //把目录的绝对的路径获取到 String classpath = System.getProperty("user.dir"); System.out.println(classpath); Tomcat c = new Tomcat(); // 设置端口 // 2种方式 1、直接使用 tomcat实例设置 2、获取Connector连接器,连接器里提供了很多方法 // c.setPort(9901); Connector connector = c.getConnector(); connector.setPort(9091); //设置Host Host host = c.getHost(); //我们会根据xml配置文件来 host.setName("localhost"); host.setAppBase("webapps"); //要把class加载进来,把启动的工程加入进来了 Context context = c.addContext(host, "/", classpath); if(context instanceof StandardContext){ StandardContext standardContext = (StandardContext)context; // 这里取本地的web.xml 也可以设置相对目录的方式 standardContext.setDefaultContextXml("E:/softToll/apache-tomcat-8.0.21-windows-x64/apache-tomcat-8.0.21/conf/web.xml"); // standardContext.setDefaultContextXml("classpath:web.xml"); // wrapper包装 servlet Wrapper wrapper = c.addServlet("/", "TestServlet", new TestServlet()); wrapper.addMapping("/"); } //Tomcat跑起来 c.start(); //强制Tomcat server等待,避免main线程执行结束后关闭 c.getServer().await(); } } // 测试servlet public class TestServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); out.println("非鸽传书
"); out.println(""); out.println("道可道,非常道;名可名,非常名"); out.println(""); out.println(""); } }
效果:
respect!!