Springboot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Springboot是Spring中的一个成员,可以简化Spring,SpringMVC的核心是IOC容器
使用Springboot开发效率高。
Springboot特点
- 独立运行的 Spring 项目
Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“ java–jar xx.jar” 即可运行。
可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
- 内嵌 Servlet 容器
Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成 WAR 包 。
- 提供 starter 简化 Maven 配置
Spring Boot 提供了一系列的“starter”项目对象模型(POMS)来简化 Maven 配置。
- 提供了大量的自动配置
Spring Boot 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。
尽可能自动配置Spring容器
- 自带应用监控
Spring Boot 可以对正在运行的项目提供监控。
- 无代码生成和 xml 配置
Springboot特性
遵循习惯优于配置的原则。使用springboot我们只需要很少的配置,大多数使用默认配置即可
内嵌servlet容器,降低了对环境的要求,可用命令直接执行项目
项目快速搭建。springboot尽可能自动配置spring以及第三方库,帮助开发者快速搭建spring框架,可无需配置的自动整合第三方框架
提供各种starter简化Maven配置。springboot提供了一系列的starter用来简化maven依赖。如:常用的spring-boot-starter-web、spring-boot-starter-tomcat等
独立运行spring项目。springboot可以以jar包的形式进行独立运行,使用java -jar xx.jar 就可以成功运行项目,无需部署war文件
可以完全不使用xml配置,只需要自动配置和Java config
应用监控(SpringBootActuator)
SpringBoot使用Interceptor拦截器
拦截器的实现方式
1、继承HandlerInterceptorAdapter的父类
2、实现HandlerInterceptorAdapter接口(推荐方式)
SpringMVC使用拦截器的步骤
1、在session中存储用户信息,用于进行权限验证。
2、实现HandlerInterceptorAdapter接口,重写preHandle()方法
3、springMVC.xml文件中注册拦截器
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//判断是否登录过
if (request.getSession().getAttribute("id") ==null){
request.setAttribute("msg","还未登录!");
//转发
request.getRequestDispatcher("/WEB-INF/Page/login.jsp").forward(request,response);
return false;
}else {
return true;//放行
}
}
}
注册拦截器
springmvc.xml
<!-- 注册拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--设置要拦截的请求 -->
<mvc:mapping path="/**"/>
<!--设置放行的请求-->
<mvc:exclude-mapping path="/showLogin"/>
<mvc:exclude-mapping path="/loginCheck"/>
<!--配置拦截器实现功能类-->
<bean class="com.qgs.controller.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
Spring Boot使用拦截器的步骤
1、注册拦截器
2、实现拦截器
实现WebMvcConfigurer接口注册连接器(等同于在springmvc.xml中注册拦截器)
//注册拦截器
public class MvcConfig implements WebMvcConfigurer {
//添加拦截器对象,并注入IOC容器
@Override
public void addInterceptors(InterceptorRegistry registry) {
HandlerInterceptor interceptor = new Login();
//拦截哪个地址
String[] PathPattern ={"/Info/**"};
registry.addInterceptor(interceptor).addPathPatterns(PathPattern);
//放行哪个地址
String[] path ={"/login/**","/show/**"};
registry.addInterceptor(interceptor).excludePathPatterns(path);
//设置拦截器执行顺序
registry.addInterceptor(interceptor).order(1);
}
}
实现HandlerInterceptor接口,实现拦截器
//注册拦截器
@Configuration
public class MvcConfig implements WebMvcConfigurer {
//添加拦截器对象,并注入IOC容器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//创建拦截器对象
HandlerInterceptor interceptor = new Login();
//拦截哪个地址
String[] PathPattern ={"/Info/**"};
//放行哪个地址
String[] path ={"/login/**","/show/**"};
registry.addInterceptor(interceptor)
.addPathPatterns(PathPattern) //拦截
.excludePathPatterns(path);//放行
}
}
SpringBoot中使用Servlet
1、创建Servlet类。
2、注册Servlet
创建Servlet类
public class ServletA extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("hello servlet");
out.flush();
out.close();
}
}
注册Servlet
//注册servlet
@Configuration//代替xml文件
public class ServletConfig {
@Bean
public ServletRegistrationBean servletRegistrationBean(){
ServletRegistrationBean bean =new ServletRegistrationBean(
new ServletA(),"/ServletA");
//bean.addUrlMappings("/ServletA" ,"/hello");
return bean;
}
}
SpringBoot使用自定义Filter过滤器
Filter是Servlet规范中的过滤器,可以处理请求,请求参数,属性。常用在过滤处理字符编码
Filter过滤器的使用及原理
如:没一个Servlet都要解决中文乱码问题,也有公共代码,这些代码目前都是重复编写,并没有达到复用的效果。
Filter过滤器是和用户的请求路径对应的。
Filter过滤器可以在Servlet这个目标程序执行之前添加代码。也可以在Servlet执行之后添加代码。
一般在过滤器当中编写公共代码。
Filter对象在服务器启动的时候会新建对象。而Servlet在服务器启动时不会新建对象。
Filter和Servlet是单例的。
Filter的实现
java类实现Filter接口
Init方法:在Filter对象第一次被创建后调用,并且只调用一次。
doFilter方法:用户每发送一次请求就执行一次。
Destroy()方法:Filter对象被释放/销毁之前执行,并且只调用一次。
SpringBoot中使用Filter
- 创建类
- 注册Filter
//自定义过滤器
public class FilterA implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤了");
filterChain.doFilter(servletRequest,servletResponse);
}
}
//注册Filter
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean bean =new FilterRegistrationBean();
bean.setFilter(new FilterA());
//设置过滤地址
bean.addUrlPatterns("/login/*");
return bean;
}
}
SptingBoot使用字符集过滤器
Servet默认响应的是ISO-8859-1
使用步骤
1、注册过滤器
2、application.properties配置
//注册Filter
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean bean =new FilterRegistrationBean();
//使用框架中的字符集过滤类
CharacterEncodingFilter charFilter =new CharacterEncodingFilter();
charFilter.setEncoding("utf-8");
charFilter.setForceEncoding(true);
bean.setFilter(charFilter);
//设置过滤地址
bean.addUrlPatterns("/*");
return bean;
}
}
#Springboot框架已经设置CharacterEncodingFilter
#默认编码为 ISO-8859-1 false表示关闭#Springboot框架已配置的过滤器
server.servlet.encoding.enable=false
application.properties设置过滤器字符集
设置Springboot框架中(已存在)的CharacterEncodingFilter字符集
#启用
server.servlet.encoding.enable=true
#设置指定的字符集
server.servlet.encoding.charset=utf-8
#强制request和response使用utf-8字符集
server.servlet.encoding.force=true