Tomcat深入淺出——最終章(六)

Meteor發表於2022-07-11

前言

  • 利用了六天的時間,對Tomcat的內容進行了整理?。
  • 學習不易、整理也不易,自己堅持的更了下來,很不錯?。
  • 希望每一位在努力前行的小夥伴,都要相信堅持就會有收穫?。
  • 本次Tomcat就探尋到這裡,明年我還會更加深入的探尋一次,感興趣的小夥伴可以關注一下?。

一、Thymeleaf基本配置


首先如果我們想在Tomcat裡用thymeleaf,需要我們進行如下配置:

  • 這裡是專案所需要用到的jar包

  • 下面我們進行配置資訊
package com.meteor.thymeleaf;

import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ViewBaseServlet extends HttpServlet {

    //定義私有模板引擎物件
    private TemplateEngine templateEngine;

    //重寫init()方法(其是servlet的初始化方法)
    @Override
    public void init() throws ServletException {
        //1. 獲取當前Servlet的ServletContext物件
        ServletContext servletContext = this.getServletContext();
        //2. 建立Thymeleaf解析器物件,其接收:一個ServletContext物件
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
        //3. 給解析器物件設定引數
        //3.1 設定解析的模板模式, HTML是預設模式,明確設定是為了程式碼更容易理解
        templateResolver.setTemplateMode(TemplateMode.HTML);
        //3.2 設定字首
        String viewPrefix = servletContext.getInitParameter("view-prefix");
        templateResolver.setPrefix(viewPrefix);
        //3.3 設定字尾
        String viewSuffix = servletContext.getInitParameter("view-suffix");
        templateResolver.setSuffix(viewSuffix);
        //3.4 設定快取過期時間(毫秒)
        templateResolver.setCacheTTLMs(60000L);
        //3.5 設定是否快取
        templateResolver.setCacheable(false);
        //3.6 設定伺服器端編碼方式
        templateResolver.setCharacterEncoding("utf-8");

        //4. 例項化模板引擎物件
        templateEngine = new TemplateEngine();

        //5. 給模板引擎物件設定模板解析器物件
        templateEngine.setTemplateResolver(templateResolver);
    }

    //建立處理模板檔案的函式
    protected void processTemplate(String templateName, HttpServletRequest req, HttpServletResponse resp) throws IOException{
        //1. 設定響應體內容型別和字符集
        resp.setContentType("text/html;charset=UTF-8");
        //2. 建立WebContext物件
        WebContext webContext = new WebContext(req,resp,getServletContext());
        //3. 處理模板資料
        templateEngine.process(templateName,webContext,resp.getWriter());
    }
}
  • 在web.xml中配種context
<!-- 在web.xml檔案中的上下文引數中配置檢視字首和檢視字尾的相關屬性和值,方便後續servlet讀取 -->
    <!-- 說明:param-value中設定的字首、字尾的值不是必須叫這個名字,可以根據實際情況和需求進行修改。
        這裡示例將用於檢視字首設定為: /WEB-INF/view/, 檢視字尾設定為: .html -->
    <context-param>
        <param-name>view-prefix</param-name>
        <param-value>/</param-value>
    </context-param>
    <context-param>
        <param-name>view-suffix</param-name>
        <param-value>.html</param-value>
    </context-param>
  • 最後我們就可以進入測試環節了
@WebServlet("/index")
public class TestServlet extends ViewBaseServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("msg","傳過來的資料~");
        //這是你要轉到的頁面
        processTemplate("index",req,resp);
    }
}
  • 其實這些配置在我們的官方文件中都有,推薦大家學會跟著官方文件學習?。

二、Thymeleaf常用語法

加入<html xmlns:th="http://www.thymeleaf.org">規範

2.1 標準變數表示式

<p th:text="歡迎Thymeleaf">Hello~</p>
<h1 th:text="${msg}">msg會替換這個資訊/h1>

<!-- 可以將傳過來的物件,簡寫成這樣-->
<div th:object="${user}">
        <p th:text="*{id}">id</p>
        <p th:text="*{name}">name</p>
</div>

<!-- 連線表示式-->
<a th:href="@{/stu/student(id=20,name='lx')}"
<img src="" th:src="@{${圖片地址}}" alt="">

2.2 each

<div th:each="li:${list}">
    <span th:text="${liStat.size}"></span>
    <span th:text="${li.id}"></span>
    <span th:text="${li.name}"></span>
</div>
        ArrayList<User> list = new ArrayList<>();
        list.add(new User(1001,"Meteor"));
        list.add(new User(1002,"Meteors"));
        list.add(new User(1003,"Meteorss"));
        req.setAttribute("list",list);

2.3 if

<div th:if="10 > 0">
    顯示文字內容
</div>
<div th:unless="10 > 0">
    顯示文字內容
</div>

2.4 switch

<div th:switch="${sex}">
    <p th:case="m">顯示男</p>
    <p th:case="f">顯示女</p>
    <p th:case="*">顯示未知</p>
</div>

2.5 th:inline

<div th:inline="text">
    <p>顯示姓名:[[${key}]]</p>
</div>

<script type="text/javascript" th:inline="javascript">
    alert("獲取模板資料" + [[${method}]]);
</script>

<p th:text=" '我是' + ${name} + ',喜歡聽他的' + ${music}">
    顯示資料
</p>

2.6 內建物件

  •  #request 表示 HttpServletRequest

  •  #session 表示 HttpSession物件

  • session 表示 HttpSession物件,是#session簡化的一種方式

<p th:text="${#request.getAttribute('user')}"></p>
<p th:text="${#request.getContextPath()}"></p>
<p th:text="${#param.name}"></p>
<p th:text="${#param.size()}"></p>

三、結尾

  • 對於Tomcat的Servlet內容就總結這麼多,若想深入學習等待後續更新。
  • 我將會繼續更新關於Java方向的學習知識,感興趣的小夥伴可以關注一下。
  • 文章寫得比較走心,用了很長時間,絕對不是copy過來的!
  • 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。
  • ?你的點贊與關注,是我努力前行的無限動力。?

相關文章