一、简单描述
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目的构建系统所使用。
建独立的Spring应用程序,是一个基于spring容器来启动的spring应用。嵌入的Tomcat,无需部署WAR文件
简化Maven配置,自动配置Spring,autoConfiguration的功能。可以简化spring的配置信息。
提供生产就绪型功能,如指标,健康检查和外部配置,没有代码生成并且对XML也没有配置要求
二、servlet
1. servlet
pom.xml
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JSP需要的依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- freemarker启动器,整合freemarker模板视图 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
</dependencies>
第一种方式:通过注解@WebServlet配置servlet
@WebServlet(name="first", urlPatterns={"/first","/first1"},
initParams={@WebInitParam(name="test", value="value")}, loadOnStartup=1)
public class FirstServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().println("<center><h1>测试Servlet1</h1></center>");
}
}
第二种方式(推荐):通过@Configuration配置servlet
public class SecondServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().println("<center><h1>测试Servlet2</h1></center>");
}
}
一般来说,@Configuration文件会被优先加载。
@Configuration
public class MyServletConfiguration {
/*
* <bean id="secondId" class="ServletRegistrationBean" />
*
* ServletRegistrationBean - Spring boot web中定义的用于注册Servlet对象的Bean。
*/
@Bean(name="secondId")
public ServletRegistrationBean getServletRegistrationBean(){
ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
// 设置servlet-name
bean.setName("second");
// 增加一个url-pattern
bean.addUrlMappings("/second");
// 相当于 <init-param><param-name>test</param-name><param-value>value</param-value></init-param>
bean.addInitParameter("test", "value");
// <load-on-startup>1</load-on-startup>
bean.setLoadOnStartup(1);
return bean;
}
}
springboot启动
@SpringBootApplication - 注解当前类是一个spring应用入口类型。
@ServletComponentScan - 通知spring容器,扫描Servlet注解的。如: @WebServlet
- 默认的扫描路径是,当前启动类所在包及其所有的子孙包。
@SpringBootApplication
@ServletComponentScan
public class AppStarter {
public static void main(String[] args) {
SpringApplication.run(AppStarter.class, args);
}
}
运行结果:
2. filter
@WebFilter 注解 - 配置一个filter过滤器。
urlPatterns - 过滤器要过滤的路径。字符串数组。
拦截器一:
@WebFilter(urlPatterns="/*", initParams={@WebInitParam(name="test", value="test init param value")})
public class FirstFilter implements Filter {
/**
* init方法只在容器启动的时候初始化运行一次。
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 处理初始化参数?
String initParamValue = filterConfig.getInitParameter("test");
System.out.println("init param value : " + initParamValue);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("first filter run...");
chain.doFilter(request, response);
System.out.println("first filter end...");
}
/**
* destroy方法运行唯一一次,在容器关闭的时候执行。
*/
@Override
public void destroy() {
}
}
拦截器二:
public class SecondFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("second filter run...");
chain.doFilter(request, response);
System.out.println("second filter end...");
}