苍南网站建设shaoky,成都百度公司在哪里,做一个网址需要多少钱,正国级领导有几位JAVAWebSession会话会话跟踪技术session保存作用域Thymeleaf - 视图模板技术配置过程Session会话
HTTP是无状态的#xff1a;服务器无法区分这两个请求是同一个客户端发过来的#xff0c;还是不同的客户端发过来的 现实问题#xff1a;第一次请求是添加商品到购物车#x…
JAVAWebSession会话会话跟踪技术session保存作用域Thymeleaf - 视图模板技术配置过程Session会话
HTTP是无状态的服务器无法区分这两个请求是同一个客户端发过来的还是不同的客户端发过来的 现实问题第一次请求是添加商品到购物车第二次请求是结账如果这两次请求无法区分是同一个用户的那么会导致混乱 通过会话跟踪技术来解决无状态的问题 示例代码 public class Demo03Servlet extends HttpServlet {Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取session如果获取不到则创建一个新的HttpSession session request.getSession();System.out.println(session IDsession.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 {Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getSession().setAttribute(uname,lina);}
}public class Demo05Servlet extends HttpServlet {Overrideprotected 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 version1.0 encodingUTF-8?
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0!--配置上下文参数--context-paramparam-nameview-prefix/param-nameparam-value//param-value/context-paramcontext-paramparam-nameview-suffix/param-nameparam-value.html/param-value/context-param/web-app配置前缀 prefix配置后缀 suffix 3新建一个Servlet文件中添加配置
public class ViewBaseServlet extends HttpServlet {private TemplateEngine templateEngine;Overridepublic 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;charsetUTF-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 .html6使用thymeleaf的标签 th:if ,th:unless , th:each