一、REST
全称是: Resource Representational State Transfer。
通俗来讲就是:资源在网络中以某种表现形式进行状态转移。
是一种互联网应用程序的API理念:URL定位资源
rest应该具备以下条件:
1、使用客户/服务器模型(简称C/S结构,是一种网络架构,它把客户端 (Client) 与服务器(Server) 区分开来。 每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。)
例如前后端分离,页面和服务不在同一服务器上运行。
2、层次化的系统
例如一个父系统下有多个子模块,每个模块都是独立的服务。
3、无状态
服务端并不会保存有关客户的任何状态,也就是说要服务后端服务,就要带token过去。
4、可缓存
例如服务端通过token缓存已登录过的用户信息,客户端请求会带一个token过来,后台服务通过带过来的token在缓存中取出用户信息,提高效率。
5、统一的接口
例如,一个项目的所有模块都整合到一起,all-in-one,打成一个包,多个服务,整合到一个端口下。
二、Mybatis和Druid配置
①application.yml文件
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/hahuhu?serverTimezone=GMT&useSSL=false&characterEncoding=UTF-8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#Druid的参数配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
thymeleaf:
cache: false
#开启hiddenmethod支持 put/delete请求
mvc:
hiddenmethod:
filter:
enabled: true
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
config-location: classpath:mybatis/mybatis-config.xml
②添加config.DruidConfig.java类
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
//配置druid监控中心
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String,String> initParams = new HashMap<>();
initParams.put("loginUsername","admin");
initParams.put("loginPassword","admin");
initParams.put("allow","");//默认允许所有人
//initParams.put("tianma","192.168.3.13");//指定用户名+ip
bean.setInitParameters(initParams);
return bean;
}
//过滤器
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
③添加config.MybatisConfig.java(可以选择mybatis-config.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/><!--标准日志输出-->
<setting name="mapUnderscoreToCamelCase" value="true"/><!--驼峰命名-->
</settings>
<typeAliases>
<package name="com.dfrz.pojo"/><!--别名扩展-->
</typeAliases>
</configuration>
④test类中检测数据库连接
三、创建Mapper、Mapper.xml、Controller进行测试
四、导入静态资源
五、配置访问首页
①配置MvcConfig
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//默认访问login.html
registry.addViewController("/").setViewName("login");
registry.addViewController("/login.html").setViewName("login");
//登录成功,重定向到index.xml,放置重复拉交
registry.addViewController("/index.html").setViewName("index");
}
//拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//先设置全部拦截,在选择不包含的部分
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/login.html", "/", "/user/login", "/css/**", "/images/**", "/js/**", "/error");
}
}
②配置登录拦截器LoginInterceptor
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("user");
if(user==null){
//未登录
request.setAttribute("msg", "请先登录");
request.getRequestDispatcher("/login/html").forward(request, response);
return false;
}else {
return true;
}
}
}
小技巧
在application.properties中添加
#日志
logging.level.com.dfrz.mapper=debug
#禁用缓存模板
spring.thymeleaf.cache=false
或者在application.yml中添加
thymeleaf:
cache: false
六、controller的创建以及login.html文件编写
CRUD满足Rest风格