JAVA Session会话 Thymeleaf - 视图模板技术配置步骤

简介: JAVA Session会话 Thymeleaf - 视图模板技术配置步骤

Session会话

HTTP是无状态的:服务器无法区分这两个请求是同一个客户端发过来的,还是不同的客户端发过来的
现实问题:第一次请求是添加商品到购物车,第二次请求是结账;如果这两次请求无法区分是同一个用户的,那么会导致混乱
通过会话跟踪技术来解决无状态的问题

示例代码:

public class Demo03Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session,如果获取不到,则创建一个新的
        HttpSession session = request.getSession();
        System.out.println("session ID"+session.getId());
    }
}

运行结果:

会话跟踪技术

1.客户端第一次发请求给服务器,服务器获取session,获取不到,则创建新的,然后响应给客户端
2.当客户端给服务器发请求的时候,那么服务器就能获取到了,那么服务器就判断这一次请求和上次请求是同一个客户端,从而能够区分开客户端
常用API:

request.getSession() -> 获取当前的会话,没有则创建一个新的会话

request.getSession(true) -> 效果和不带参数相同

request.getSession(false) -> 获取当前会话,没有则返回null,不会创建新的

session.getId() -> 获取sessionID

session.isNew() -> 判断当前session是否是新的

session.getMaxInactiveInterval() -> session的非激活间隔时长,默认1800秒

session.invalidate() -> 强制让会话立即失效

session.getCreationTime() -> 获取会话创建时间

session.getLastAccessedTime() -> 获取最近一次访问时间

session保存作用域


session保存作用域是和具体的某一个session对应的
常用的API:
session.setAttribute(k,v)
Object session.getAttributr(k)

演示代码:

//演示向HttpSession保存数据
public class Demo04Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().setAttribute("uname","lina");
    }
}
public class Demo05Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object unameObj = request.getSession().getAttribute("uname");
        System.out.println(unameObj);
    }
}

运行结果:




Thymeleaf - 视图模板技术

配置过程

thymeleaf是用来帮助我们做视图渲染的一个技术

1)添加thymeleaf的jar包


2)在web.xml文件中添加配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0">
    <!--配置上下文参数-->
    <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>
</web-app>
  • 配置前缀 prefix
  • 配置后缀 suffix
    3)新建一个Servlet文件中添加配置
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());
    }
}

4)使得我们的Servlet继承ViewBaseServlet
5)根据逻辑视图名 得到 物理视图名

//此处的视图名称是index
//那么thymeleaf会将这个 逻辑视图名称 对应到物理视图 名称上去
//逻辑视图名称  index
//物理视图名称 view-prefix + 逻辑视图名称 + view-suffix
//所以真是的视图名称是 / index .html

6)使用thymeleaf的标签
th:if ,th:unless , th:each

目录
相关文章
|
7天前
|
Java
Java配置环境
Java配置环境
14 0
Java配置环境
|
6天前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
6天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
6天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
6天前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
6天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
12天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
13天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
37 6
|
14天前
|
监控 前端开发 算法
Java技术体系
Java技术体系(韩顺平老师整理)
10 0
|
17天前
|
Java 测试技术
[软件自动化测试] selenium java环境配置
介绍了包括选择Gradle构建,关闭Gradle Wrapper的默认下载,修改`gradle-wrapper.properties`以使用腾讯云镜像,以及更新`build.gradle`文件添加国内仓库和Selenium依赖。在测试驱动部分,创建了一个简单的JUnit测试用例,展示了如何初始化Edge浏览器并访问网站。运行测试时可能出现关于CDP版本不匹配的警告,可以通过升级Selenium依赖中的CDP版本来解决。推荐根据[Selenium库网页](https://search.maven.org/search?q=g:org.seleniumhq.selenium)提供的版本信息进行升级
334 6