前言
最近在看 springmvc 的相关源码… 不想下载tomcat 等等等等操作.想跟 springboot 一样直接启动… 估做学习记录
整体代码
@ComponentScan
public class AnnotatedBeanDefinitionReaderContext {
public static void main(String[] args) throws LifecycleException {
File base = new File(System.getProperty("java.io.tmpdir"));
Tomcat tomcat = new Tomcat();
Context context = tomcat.addContext("/", base.getAbsolutePath());
addFilters(context);
tomcat.start();
// 添加 servlet
addDispatcherServlet(tomcat);
// 阻塞
tomcat.getServer().await();
}
public void setConnector(Tomcat tomcat) {
//设置Tomcat的端口tomcat.setPort(9091)。两种写法都可以设置端口
Connector connector = tomcat.getConnector();
connector.setPort(8080);
}
public static void addDispatcherServlet(Tomcat tomcat) {
//容器添加需要启动的ApplicationContext
AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext
= new AnnotationConfigWebApplicationContext();
annotationConfigWebApplicationContext.register(AnnotatedBeanDefinitionReaderContext.class);
annotationConfigWebApplicationContext.refresh();
DispatcherServlet dispatcherServlet = new DispatcherServlet(annotationConfigWebApplicationContext);
Wrapper wrapper = tomcat.addServlet("/", "app", dispatcherServlet);
wrapper.setLoadOnStartup(1);
wrapper.addMapping("/");
}
// 添加过滤器
private static void addFilters(Context context) {
FilterDef filterDef = new FilterDef();//Filter定义
filterDef.setFilterName("test-filter");
filterDef.setFilterClass(ReqResFilter.class.getName());
filterDef.addInitParameter("name", "test-filter");
context.addFilterDef(filterDef);
FilterMap filterMap = new FilterMap();//Filter路径映射
filterMap.setFilterName("test-filter");
filterMap.addURLPattern("/*");
context.addFilterMap(filterMap);
}
private static void configureListeners(StandardContext context) {
context.addApplicationEventListener(new TestListener() {
@Override
public void addError(Test test, Throwable t) {
}
@Override
public void addFailure(Test test, AssertionFailedError t) {
}
@Override
public void endTest(Test test) {
}
@Override
public void startTest(Test test) {
}
});
}
}
过滤器代码
public class ReqResFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {
System.out.println("测试");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
后言
可以参考我同类上一篇文章… 可以说这一篇文章是上一篇文章的进阶版~~~