二、spring boot:web综合开发

一、web开发

spring boot web开发很简单,包括json输出,filter,log,properties等

json接口开发

使用spring开发项目时,
spring boot中使用@RestController标注类,便可以使类中的方法返回json格式的数据

@RequestMapping("/getUser")
public Map getUser(){
    Map map = new HashMap<>();
    map.put("username", "张三");
    map.put("password", "123456");
    return map;
}
自定义filter

Spring Boot默认实现了OrderedCharacterEncodingFilter 和 HiddenHttpMethodFilter,如果需要使用自定义的Filter,步骤如下:

  1. 实现Filter接口,重写接口中的方法
  2. 添加@Configuration 注解,将自定义Filter加入过滤链
@Configuration
public class WebFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("容器初始化!");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        System.out.println("请求地址是:" + req.getRequestURI());
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("容器销毁!");
    }
}
自定义property

在spring boot中,如果需要使用自定义的property的文件,则需要在类路径下创建application.properties配置文件,然后添加自己的配置,配置文件如下:

com.lt.username=黄三
com.lt.usercode=1234

实体类如下:

@Component
public class User {

    @Value("${com.lt.username}")
    private String username;
    @Value("${com.lt.usercode}")
    private String usercode;

    public String getUsername() {
        return username;
    }

    public String getUsercode() {
        return usercode;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setUsercode(String usercode) {
        this.usercode = usercode;
    }
}

controller如下:

@RestController
public class HelloWorld {

    @Autowired
    private User user;

    @RequestMapping("/getInfo")
    public User getInfo(){
        return user;
    }
}
YAML

一个以数据为中心的数据描述语言,在spring boot中可以用作配置文件,来简化配置文件的书写;具体可以参考:YAML快速入门

log配置

spring boot中默认集成了LogBack,无需其他配置,就会将日志打印到控制台;但如果需要将日志输出到硬盘上的日志文件中时,则需要在application.properties中进行配置,配置如下:

#表示将日志输出至D盘log文件下
logging.path=D:/log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR

配置文件中参数说明

  • logging.path:日志文件的路径
  • logging.file:日志文件的名称,默认为spring.log
  • logging.level:日志文件的级别,日志级别总共有TARCE < DEBUG < INFO < WARN < ERROR < FATAL ,且级别是逐渐提供,如果日志级别设置为INFO,则意味TRACE和DEBUG级别的日志都看不到;上例中我们打印了一个INFO级别的日志,因为Spring Boot默认级别就是INFO,如果我们改为WARN,项目启动时,几乎就不会打印日志了;

具体可以参考Spring Boot系列——日志配置

在程序中需要创建Logger对象,我使用的是sl4j

@RestController
public class HelloWorld {

    private final static Logger log = LoggerFactory.getLogger(HelloWorld.class);

    @RequestMapping("/log")
    public void log(){
        log.info("spring boot 日志");
    }
}

二、数据库操作

1. 引入依赖


    org.springframework.boot
    spring-boot-starter-data-jpa


    mysql
    mysql-connector-java

2. 配置数据源

在application.yml中配置

spring:
    #配置数据源信息
    datasource:
        url: jdbc:mysql://localhost:3306/learner?serverTimezone=UTC&useSSL=false
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 123456
    #配置JPA
    jpa:
        hibernate:
            ddl-auto: update
        show-sql: true
3. 创建实体类
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String username;
    private String password;
    //get和set省略
}
4. 创建dao
public interface UserDao extends JpaRepository {}
4. 创建测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class JPATest {

    @Autowired
    private UserDao userDao;

    @Test
    public void testSave() throws Exception {
        User user = new User();
        user.setUsername("张翔");
        user.setPassword("124");
        userDao.save(user);
    }
}
碰到的问题
【1】报错:Loading class `com.mysql.jdbc.Driver’. This is deprecated.

由于mysql的版本是8,所以和之前的版本有区别:首先驱动换了,不是com.mysql.jdbc.Driver而是’com.mysql.cj.jdbc.Driver’;此外mysql8.0是不需要建立ssl连接的,需要显示关闭;最后需要设置时区,即:

spring:
    #配置数据源信息
    datasource:
        url: jdbc:mysql://localhost:3306/learner?serverTimezone=UTC&useSSL=false
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 123456
【2】JPA常见的注解:JPA基本注解
【3】Spring Data Jpa

Spring Data Jpa 还有很多功能,比如封装好的分页,可以自己定义SQL,主从分离等等,可以参考:Spring Data JPA、Spring Boot整理——Spring Data JPA、使用 Spring Data JPA 简化 JPA 开发

三、Thymeleaf 模板

Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 JSP,Velocity,FreeMaker 等,它也可以轻易的与 Spring MVC 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用;说了这么多,其实还是推荐前后分离,使用新的vue等前端框架

四、spring boot整合freemarker

1. 添加pom依赖



    org.springframework.boot
    spring-boot-starter-freemarker

2. 配置freemarker

  • 新建application.properties文件
########################################################
###FREEMARKER (FreeMarkerAutoConfiguration)
########################################################
spring.freemarker.allow-request-override=false
spring.freemarker.cache=true
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
#spring.freemarker.prefix=
#spring.freemarker.request-context-attribute=
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
#comma-separated list
#spring.freemarker.view-names= # whitelist of view names that can be resolved


3. 在templates下创建index.ftl模板文件




    
    


${msg}


4.创建controller文件

package com.lt.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

/**
 * @ClassName Index
 * @Description TODO
 * @Author lt
 * @Date 2019-04-05
 **/
@Controller
public class Index {

    @RequestMapping("/index")
    public String index(Map param){
        param.put("msg", "spring boot整合freemarker");
        return "index";
    }
}

五、Gradle 构建工具

Spring 项目建议使用 Maven/Gradle 进行构建项目,相比 Maven 来讲 Gradle 更简洁,而且 Gradle 更适合大型复杂项目的构建

六、WebJars

1. 什么是WebJars

WebJars 是将客户端(浏览器)资源(JavaScript,Css等)打成 Jar 包文件,以对资源进行统一依赖管理。WebJars 的 Jar 包部署在 Maven 中央仓库上

2. 为什么要使用WebJars

我们在开发 Java web 项目的时候会使用像 Maven,Gradle 等构建工具以实现对 Jar 包版本依赖管理,以及项目的自动化管理,但是对于 JavaScript,Css 等前端资源包,我们只能采用拷贝到 webapp 下的方式,这样做就无法对这些资源进行依赖管理。那么 WebJars 就提供给我们这些前端资源的 Jar 包形势,我们就可以进行依赖管理

3. 如何使用
  1. WebJars官网查找对于的组件,比如 jQuery

    org.webjars
    jquery
    3.4.1

  1. 页面引入

你可能感兴趣的:(Spring,boot,06.spring,boot)