Web-Servlet(2)--Thymeleaf
視圖模板技術,是做視圖渲染的一個技術(靜態頁面和資料柔和在一起)
基本流程

在服務器端引入Thymeleaf環境
1.加入jar包

2.新建一個Servlet類ViewBaseServlet
package src.com.wht.myssm.myspringmvc;
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;
@Override
public void init() throws ServletException {
// 1.獲取ServletContext物件
ServletContext servletContext = this.getServletContext();
// 2.創建Thymeleaf決議器物件
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
// 3.給決議器物件設定引數
// ①HTML是默認模式,明確設定是為了代碼更容易理解
templateResolver.setTemplateMode(TemplateMode.HTML);
// ②設定前綴
String viewPrefix = servletContext.getInitParameter("view-prefix");
templateResolver.setPrefix(viewPrefix);
// ③設定后綴
String viewSuffix = servletContext.getInitParameter("view-suffix");
templateResolver.setSuffix(viewSuffix);
// ④設定快取過期時間(毫秒)
templateResolver.setCacheTTLMs(60000L);
// ⑤設定是否快取
templateResolver.setCacheable(true);
// ⑥設定服務器端編碼方式
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());
}
}
3.在web.xml檔案中添加配置
<!-- 配置背景關系引數 -->
<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>
4.使我們的Servlet繼承ViewBaseServlet
public class indexServlet extends ViewBaseServlet
5.根據邏輯視圖名稱,得到物理視圖名稱
-
此處的視圖名稱是 index
-
那么thymeleaf會將這個 邏輯視圖名稱 對應到 物理視圖 名稱上去//邏輯視圖名稱 : index
-
物理視圖名稱 : view-prefix + 邏輯視圖名稱 + view-suffix
-
所以真實的視圖名稱是: / index .html
6.使用Thymeleaf的標簽
th:if, th:unless, th:each, th:text
Servlet-保存作用域
保存作用域:
保存作用域我們可以認為有4個:page(目前不用),request(一次請求回應范圍),session(一次會話范圍),application(整個應用程式范圍)
- request:

代碼的小例子(主代碼):
@WebServlet("/demo01")
public class Demo01Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.向request保存作用域保存資料
request.setAttribute("uname","lili");
//2.客戶端重定向
//response.sendRedirect("demo02");
//3.服務器端轉發
//request.getRequestDispatcher("demo02").forward(request,response);
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.獲取request保存作用域保存的資料,key為uname
Object unameObj = request.getAttribute("uname");
System.out.println("unameObj = " + unameObj);
}
重定向的結果:

服務器轉發的結果:

-
session:(上一篇有哦)
-
application:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.向application保存作用域保存資料
//ServletContext : Servlet背景關系
ServletContext application = request.getServletContext();
application.setAttribute("uname","lili");
//2.客戶端重定向
response.sendRedirect("demo06");
//3.服務器端轉發
//request.getRequestDispatcher("demo04").forward(request,response);
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.獲取application保存作用域保存的資料,key為uname
ServletContext application = request.getServletContext() ;
Object unameObj = application.getAttribute("uname");
System.out.println("unameObj = " + unameObj);
}
都可以列印出,不管是直接搜demo05、demo06、還是換一個瀏覽器再搜索,都可以的(只要不停掉tomcat)
路徑問題
- 相對路徑(../回傳上一級)紅字
- 絕對路徑 藍字

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458209.html
標籤:Java
上一篇:java學習之IO流
下一篇:Day6
