二、spring boot:web综合开发

一、web开发

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

json接口开发

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

@RequestMapping("/getUser")
public Map<String, Object> getUser(){
    Map<String, Object> 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. 引入依赖
<!--Boot集成JPA-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
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<User, Integer> {}
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 JPASpring 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依赖

<!--引入freeMarker的依赖包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

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模板文件

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title></title>
</head>
<body>
${msg}
</body>
</html>

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<String, Object> 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
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.4.1</version>
</dependency>
  1. 页面引入
<script src="/webjars/jquery/3.4.1/jquery.min.js"></script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章