<dependency>
<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-coreartifactId>
<version>8.5.34version>
dependency>
<dependency>
<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-elartifactId>
<version>8.5.34version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>5.0.9.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.0.9.RELEASEversion>
dependency>
<dependency>
<groupId>org.apache.tomcatgroupId>
<artifactId>tomcat-jasperartifactId>
<version>8.5.16version>
dependency>
可以看到不需要加入任何springboot的依赖
package com.lqr.HWspringboot.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 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");
}
}
public class Test {
private static int PORT = 8080;
private static String CONTEXT_PATH = "/hwtomcat";
private static String SERVER_NAME = "indexServlet";
public static void main( String[] args ) throws LifecycleException {
// 创建Tomcat服务器
Tomcat tomcatServer = new Tomcat();
// 设置端口号
tomcatServer.setPort(PORT);
// 是否设置自动部署
tomcatServer.getHost().setAutoDeploy(false);
// 创建上下文
StandardContext standardContext = new StandardContext();
standardContext.setPath(CONTEXT_PATH);
// 监听上下文
standardContext.addLifecycleListener(new Tomcat.FixContextListener());
// 给Tomcat容器添加standardContext
tomcatServer.getHost().addChild(standardContext);
// 创建servlet
tomcatServer.addServlet(CONTEXT_PATH,SERVER_NAME,new IndexServlet());
// servleturl映射
standardContext.addServletMappingDecoded("/index",SERVER_NAME);
tomcatServer.start();
System.out.println("tomcat启动成功...");
// 异步进行接收请求
tomcatServer.getServer().await();
}
}
启动项目,访问http://127.0.0.1:8080/hwtomcat/index即可看到效果:
依赖与上一节相同
继承于AbstractAnnotationConfigDispatcherServletInitializer类,这个类是负责配置DispatcherServlet、初始化SpringMVC容器、spring容器。
getRootConfigClasses()用于加载根配置信息,初始化spring容器,
getServletConfigClasses()用于加载springMVC配置信息,初始化springMVC容器
getServletMappings()用于配置拦截url映射,这里“/”表示拦截所有请求
package com.lqr.HWspringboot.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
//加载根配置信息 spring核心
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfig.class };
}
// springmvc 加载 配置信息
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebConfig.class };
}
// springmvc 拦截url映射 拦截所有请求
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
package com.lqr.HWspringboot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.lqr.HWspringboot.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {
//需要配置视图转换器
//创建SpringMVC视图解析器
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
// 可以在JSP页面中通过${}访问beans
viewResolver.setExposeContextBeansAsAttributes(true);
return viewResolver;
}
}
package com.lqr.HWspringboot.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.lqr.HWspringboot")
public class RootConfig {
}
package com.lqr.HWspringboot.Tomcat;
import com.lqr.HWspringboot.servlet.IndexServlet;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;
import java.io.File;
public class Test {
private static int PORT = 8080;
// private static String CONTEXT_PATH = "/hwtomcat";
// private static String SERVER_NAME = "indexServlet";
public static void main( String[] args ) throws LifecycleException {
// 创建Tomcat服务器
Tomcat tomcatServer = new Tomcat();
// 设置端口号
tomcatServer.setPort(PORT);
// 读取项目路径 加载静态资源
StandardContext standardContext = (StandardContext)tomcatServer.addWebapp("/",
new File("src/main").getAbsolutePath());
// 禁止重新载入
standardContext.setReloadable(false);
// class文件读取地址
File additionWebInfClasses = new File("target/classes");
// 创建WebRoot
WebResourceRoot resources = new StandardRoot(standardContext);
// tomcat内部读取Class执行
resources.addPreResources(
new DirResourceSet(resources,"/WEB-INF/classes",
additionWebInfClasses.getAbsolutePath(),"/")
);
tomcatServer.start();
System.out.println("tomcat启动成功...");
// 异步进行接收请求
tomcatServer.getServer().await();
}
}