目录:
- 集成Tomcat
- 跑通spring mvc
1. 集成Tomcat
pom增加Tomcat依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mp</groupId>
<artifactId>my-spring</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- 集成Tomcat服务-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.27</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
</dependencies>
</project>
- 在framework包下新建servlet服务类
-
package com.mp.framework.servlet; import javax.servlet.*; import java.io.IOException; /** * ClassName: Servlet01 * Function: TODO * Date: 2020-05-07 10:01 * author mp * version V1.0 */ public class Servlet01 implements Servlet { public void init(ServletConfig config) throws ServletException { System.out.println("servlet01 init ...."); } public ServletConfig getServletConfig() { System.out.println("servlet01 config...."); return null; } public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("this is service method..."); res.getWriter().write("servlet01......"); } public String getServletInfo() { System.out.println("servlet01 getSevletInfo。。。。"); return null; } public void destroy() { System.out.println("servlet01 destroy..."); } }
说明: 实现Servlet接口,并实现其service方法; 同理我们创建一个server02实现类
- 在framework包下创建TomcatServer 服务
-
package com.mp.framework.web.server; import com.mp.framework.servlet.Servlet01; import com.mp.framework.servlet.Servlet02; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.Tomcat; import javax.servlet.Servlet; /** * ClassName: TomcatServer * Function: 集成Tomcat服务器 * Date: 2020-05-07 09:55 * author mp * version V1.0 */ public class TomcatServer { private Tomcat tomcat; private String[] args; public TomcatServer(String[] args){ this.args = args; } public void startServer() throws LifecycleException { // 实例化Tomcat tomcat = new Tomcat(); tomcat.setPort(9999); tomcat.start(); // 实例化context容器 Context context = new StandardContext(); context.setPath(""); context.addLifecycleListener(new Tomcat.FixContextListener()); Servlet servlet01 = new Servlet01(); Tomcat.addServlet(context,"servlet01",servlet01).setAsyncSupported(true); Servlet servlet02 = new Servlet02(); Tomcat.addServlet(context,"servlet02",servlet02).setAsyncSupported(true); // 添加url映射 context.addServletMappingDecoded("/s01/*","servlet01"); context.addServletMappingDecoded("/s02/*","servlet02"); tomcat.getHost().addChild(context); // 设置守护进程 Thread thread = new Thread("tomcat-await-thread") { @Override public void run() { super.run(); TomcatServer.this.tomcat.getServer().await(); } }; // 设置为非守护进程 thread.setDaemon(false); thread.start(); } }
说明:
-
(1)指定了服务的端口,当然这个可以走配置化;
-
(2)注入了servlet,及添加了url映射
-
(3)添加了守护线程,保证web容器线程一直运行
- 在MyApplication 中启动TomcatServer服务
-
package com.mp.framework.starter; import com.mp.framework.beans.MyBeanFactory; import com.mp.framework.core.ClassScanner; import com.mp.framework.handler.HandlerManager; import com.mp.framework.web.server.TomcatServer; import com.mp.framework.web.server.TomcatServerNew; import org.apache.catalina.LifecycleException; import java.io.IOException; import java.util.List; /** * ClassName: MyApplication * Function: TODO * Date: 2020-05-07 09:44 * author mp * version V1.0 */ public class MyApplication { public static void run(Class<?> cls,String[] args) throws LifecycleException, IOException, ClassNotFoundException { System.out.println("hello my0-spring application!!!"); // 实例化Tomcat服务 TomcatServer tomcatServer = new TomcatServer(args); tomcatServer.startServer(); } }
- 启动demo中的LaunchApp服务,可以看到Tomcat正常启动
- 跑通mvc,在浏览器中访问, http://localhost:9999/s01/aaa
-
servlet01...... 至此mvc正常跑通
总结:
(1)web项目初现,但是离springboot的功能还相差甚远;
(2)接下来,将通过注解的方式来实现接口的调用..