Java中上下文 Context的理解
Java中上下文 Context的理解前言通过servlet绑定数据使用一、简易化理解上下文其实是一个抽象的概念。我们常见的上下文有Servlet中的pageContext,访问JNDI时候用的Context。其实他们真正的作用就是承上启下。比如说pageContext他的上层是WEB容器,下层是你写的那个Servlet类,pageContext作为中间的通道让Servlet 和Web容器进行交互
·
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 记录美好!
更多推荐
已为社区贡献1条内容
所有评论(0)