二、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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章