天天看點

Java中上下文 Context的了解Java中上下文 Context的了解前言一、簡易化了解二、使用步驟總結:2020/11/3 記錄美好!

Java中上下文 Context的了解

前言

通過servlet綁定資料使用

一、簡易化了解

上下文其實是一個抽象的概念。我們常見的上下文有Servlet中的pageContext,通路JNDI時候用的Context。其實他們真正的作用就是承上啟下。比如說pageContext他的上層是WEB容器,下層是你寫的那個Servlet類,pageContext作為中間的通道讓Servlet 和Web容器進行互動。再比如通路JNDI的Context,他的上層是JNDI伺服器(可能是遠端的),下層是你的應用程式,他的作用也是建立一個通道讓你能通路JNDI伺服器,同時也讓JNDI伺服器接受你的請求,同樣起到互動作用。

二、使用步驟

1.設定(響應資料)模闆

代碼如下(示例):

import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class ThUtils {
    private static TemplateEngine te;
    static {
        te = new TemplateEngine();
        //建立解析器 使用這個解析器會自動查找resources目錄下的html檔案
        ClassLoaderTemplateResolver r = new ClassLoaderTemplateResolver();
        //設定字元集
        r.setCharacterEncoding("UTF-8");
        //将解析器和模闆引擎對象關聯
        te.setTemplateResolver(r);
    }

    public static void print(String fileName, Context context,
                             HttpServletResponse response) throws IOException {
        //讓html模闆頁面和Context裡面的資料整合到一起得到一個新的html
        String html = te.process(fileName,context);
        //把得到的html傳回給用戶端浏覽器
        response.setContentType("text/html;charset=utf-8");
        PrintWriter pw = response.getWriter();//異常抛出
        pw.print(html);
        pw.close();
    }

}

           

2.建立上下文對象,綁定資料

代碼如下(示例):

import cn.tedu.dao.MessageDao;
import cn.tedu.entity.Message;
import cn.tedu.entity.User;
import cn.tedu.utils.ThUtils;
import com.sun.xml.internal.ws.resources.HttpserverMessages;
import org.thymeleaf.context.Context;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

@WebServlet(name = "HomeServlet",urlPatterns = "/home")
public class HomeServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //取出Session中儲存的目前登入的使用者對象
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if(user==null){//如果沒有使用者對象說明用戶端還沒登入
            //重定向到登入頁面
            response.sendRedirect("/login.html");
            return;
        }
        //顯示出home.html頁面
        Context context = new Context();
        //得到登入成功的使用者資訊 将使用者資訊顯示到首頁中
        context.setVariable("user",user);
        //建立MessageDao 并調用findAll方法
        MessageDao dao = new MessageDao();
        List<Message> list = dao.findAll();
        context.setVariable("list",list);
        ThUtils.print("home.html",context,response);
    }
}
           

web層擷取資料

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>朋友圈</title>
</head>
<body>
    <h1 align="center">朋友圈</h1>
    <hr>
    <img th:src="${user.imgPath}" src="b.jpg" width="50">
    <p>歡迎<span th:text="${user.username}"></span>回來!
        <a href="logout">退出</a></p>
    <h3><a href="send.html">發朋友圈</a></h3>
    <hr>
    <div th:each="m:${list}">
        <p>
            <img th:src="${m.user.imgPath}" width="30">
            <span th:text="${m.user.username}"></span>
            在<span th:text="${m.createdstr}"></span>說:
        </p>
        <p th:text="${m.content}"></p>
        <hr>
    </div>
</body>
</html>
           

總結:2020/11/3 記錄美好!