java day39——session、jsp

session

Session: 服务器中的会话技术
存储数据 - 域对象
域对象范围: 一次会话

获得方式及持久化

在这里插入图片描述

  • 当客户端第一次调用该方法, 服务器会创建一个session对象并返回
    request.getSession();
    当客户端再次调用该方法, 服务器直接将之前的session返回

  • 服务器第一次为客户端创建Session对象的时候, 会分配一个JSESSIONID编号,并且将 JSESSIONID 传递给客户端的cookie进行保存

  • 一次会话结束(浏览器关闭), 下次会话想要继续访问之前的session,
    因此需要将 JSESSIONID 进行持久化

@WebServlet("/Demo01Servlet")
		// 1.获取session对象
        HttpSession session = request.getSession();
        // 2.获取session的id
--      String jsessionid = session.getId();// 3.创建一个一模一样的cookie
久      Cookie cookie = new Cookie("JSESSIONID", jsessionid);
化      cookie.setPath(request.getContextPath());//获得当前虚拟目录并携带// 4.设置这个cookie持久化时间
作      cookie.setMaxAge(Integer.MAX_VALUE);
        // 5.将原来的cookie覆盖
--      response.addCookie(cookie);
        // 2.向session中存储数据
        session.setAttribute("name", "zhangsan");//String,Object
@WebServlet("/Demo02Servlet")
		// 1.获取session对象
        HttpSession session = request.getSession();
        // 2.从session中取数据
        Object name = session.getAttribute("name");
        response.setContentType("text/html");
        response.getWriter().write("name: " + name + "<br/>");
        response.getWriter().write("JSESSIONID: " + session.getId());

生命周期

创建: 客户端第一次调用getSession()方法时
销毁:

  1. 手动销毁 session.invalidate();

  2. 服务器非正常关闭
    注:服务器正常关闭, session不会消失, 会变成文件保存在本地磁盘 - session钝化

  3. 超时 - 30分钟 tomca/config/web.xml

    <session-config>
        	<session-timeout>分钟</session-timeout>
    </session-config>
    

四种域对象范围总结

从大到小

  • ServletContext: 服务器启动期间
  • session: 一次会话
  • request: 一次请求
  • pageContext: page域

jsp

概述

JSP第一次运行之前会先翻译成xx_jsp.java文件, 再编译成xx_jsp.class

xx_jsp.java: 在work文件夹中
例:C:\Users\管盛凯\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat_javaweb\work\Catalina\localhost

JSP文件->翻译成java文件->继承HttpJspBase->继承HttpServlet
class xx_jsp 本质就是Servlet
核心方法 _jspService - 服务方法, 功能和service方法一致
_jspService:
html标签 --> out.write()
<% %> --> Java代码

<% 普通java代码 %>: 翻译到service方法中
<%=表达式 %>: 翻译到service方法中, out.print(表达式);
<%! 声明语句 %>: 翻译成 xx_jsp 类的成员

jsp指令(了解)

page: <%@ page 属性 %>
        contentType: response.setContentType("text/html;charset=utf-8")
        language: java语言
        session: true-默认
        pageEncoding: response.setContentType("text/html;charset=utf-8")
                      <meta charset=utf-8>
        buffer: out缓冲区大小, 默认8kb, 设置关闭=none
        extends: 继承 HttpJspBase
        import: 导包
        isErrorPage: 是否是错误页面, 默认false
        errorPage: 错误页面, 当前页面出现异常后转发到的页面
        isELIgnored: 是否忽略EL表达式, 默认"false"
include: <%@ include%> 静态包含
        引入文件, 属性file="不加虚拟目录uri"
路径中不加虚拟目录:
  1.转发
  2.errorPage
  3.include中file属性

taglib: <%@ taglib%> 标签库
        uri:jar路径  prefix:前缀

jsp内置对象

JSP内置对象9个: 在<% %>中可以直接使用的对象

 	HttpServletRequest request
    HttpServletResponse response
    
**  PageContext pageContext 域对象
        本质是pageContext.findAttribute("name")
        从 page->request->session->application 按顺序搜索name对应的值, 直到找到为止, 并返回
        
    HttpSession session: session = true
    ServletContext application
    ServletConfig config
    JspWriter out
    Object page = this
    Throwable exception: isErrorPage = true

pagecontext域对象

1.可以获得其他八个内置对象 – 框架设计

		ServletRequest req = pageContext.getRequest();
        pageContext.getResponse();
        pageContext.getException();
        pageContext.getSession();

2.可以作为域对象使用, 域范围: 当前页面page

		pageContext.setAttribute("name", "zhangsan");

        String str = (String) pageContext.getAttribute("name");

3.可以通过 pageContext 操作其他三个域对象
等同于内置对象.setAttribute
例如:session.setAttribute

		向四个域中存储数据:
		pageContext.setAttribute("name", "zhangsan", PageContext.APPLICATION_SCOPE);
        pageContext.setAttribute("name", "lisi", PageContext.SESSION_SCOPE);
        pageContext.setAttribute("name", "wangwu", PageContext.REQUEST_SCOPE);
        pageContext.setAttribute("name", "zhaoliu", PageContext.PAGE_SCOPE);

跳转页面后取数据,注意每个域对象的范围

    <%= "application------"+pageContext.getAttribute("name", PageContext.APPLICATION_SCOPE)%><br>
    <%= "session------"+pageContext.getAttribute("name", PageContext.SESSION_SCOPE)%><br>
    <%= "request------"+pageContext.getAttribute("name", PageContext.REQUEST_SCOPE)%><br>
    <%= "page------"+pageContext.getAttribute("name", PageContext.PAGE_SCOPE)%><br>

动态标签

JSP动态标签: 意义-减少java脚本的书写
<jsp:include page=“uri”> 动态包含
对比: <%@ include file=“uri” %> 静态包含
翻译后的java文件
<jsp:forward page=“uri”/>

	<h1>JSP动态标签</h1>
    <%--  动态包含  --%>
    <jsp:include page="includeB.jsp"/>
    <%--  请求转发  --%>
    <jsp:forward page="includeB.jsp"/>

EL表达式

expression language 对象属性导航语言 OGNL
作用: 为了取代get方法,从域中取值
${对象.属性} - 对象.get属性()

<% // 模拟向域中存值
        request.setAttribute("name", "zhangsan");
        Cookie cookie1 = new Cookie("user", "tom");
        Cookie cookie2 = new Cookie("password", "12345");

        response.addCookie(cookie1);
        response.addCookie(cookie2);
    %>
    <%--  <%=request.getAttribute("name")%> --%>
    ${requestScope.name}<br> //zhangsan

    <%--  request.getParameter("username")  --%>
    ${param.username} -- ${param["username"]}
    <br>

    <%-- request.getHeader("user-agent") --%>
    ${header["user-agent"]}<br>
    <%-- Cookie[] cookies = request.getCookies()其中name=user的cookie对象
         for(int i ) {
            cookies[i].getName() == "user"
            cookies[i].getValue() -> tom
         }

         cookie.user -- Cookie对象
    --%>
    ${cookie}<br>
    ${cookie.user.name}  --- ${cookie.user.value}//user --- tom

empty
<%-- empty 表示
1. 对象为null
2. 对象没有内容
–%>

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值