文章目录
  1. 1. WEB-INF 目录结构
  2. 2. JSP基础语法
  3. 3. JSP内置对象
  4. 4. JavaBeans
  5. 5. JSP状态管理
  6. 6. JSP中的指令与动作元素
  7. 7. 最后的最后

WEB-INF 目录结构

  • WEB-INF :安全目录
    • 即客户端无法访问,只有服务端可以访问的目录
  • web.xml :项目部署文件(即配置文件)
    • 默认的欢迎界面为 index.jsp,但也可以设定为其他 :
    • 修改后重启一下Tomcat服务器,就可以应用啦
  • classes 文件夹 :
    • 存放 *.class 文件,即编译生成的字节码文件
  • lib 文件夹 :
    • 存放项目所需要的jar包(如连接数据库的jar包)

JSP基础语法

  • JSP页面元素构成 :
    • 直接放张图好了
  • JSP指令元素 :
    • page指令
      • 通常位于JSP页面顶端
      • 用一个页面中可以有多个page指令
    • include指令
      • 可将外部文件嵌入当前JSP文件中
      • 同时解析这个页面中的JSP语句
    • taglib指令
      • 主要用于自定义标签
      • 在jsp页面中启用定制行为
  • page指令语法 :

    • 基本语法 :

      1
      2
      <% @page 属性1="属性值" 属性2="属性值1,属性值2"...
      属性n="属性值n" %>
    • 常见属性及其默认值 :

      • language(默认值java):
        指定JSP页面所使用的脚本语言
      • import(无默认值):
        通过该属性来引用脚本语言中使用到的类文件
      • contentType(默认为text/html;ISO-8859-1):
        用来指定JSP页面所采用的编码方式
  • jsp中的注释 :

    • HTML的注释 :

      1
      <!--html注释-->  //客户端可见
    • JSP的注释 :

      1
      <%--JSP注释--%>  //客户端不可见
    • JSP脚本注释 :

      1
      2
      //单行注释
      /*多行注释*/
  • JSP脚本

    • 基本语法 :

      1
      <% Java代码 %>
    • 用于实现各种脚本逻辑

      1
      2
      3
      4
      <%
      String s = "假装有逻辑";
      out.println(s);
      %>
  • JSP声明

    • 基本语法 :

      1
      <%! Java代码 %>
    • 用于变量或方法的声明 :

      1
      2
      3
      4
      5
      6
      <%!
      String s = "张三";
      int add(int x, int y){
      return x + y;
      }
      %>
  • JSP表达式

    • 基本语法 :

      1
      <%= 变量或表达式 %>  //注意表达式不以分号结束
    • 就比如说,调用上面声明的 :

      1
      2
      你好呀 <b> <%= s %> <b> 小朋友~ <br>
      你知道 1 + 1 = <%= add(1,1) %> 不?
  • JSP页面的生命周期

    • 还是放张图好了 :
    • 然后再放张图 嘿嘿 :
    • 最后做个练习题叭!

      答案是什么呢是什么呢?jspInit()嘛?居!然!不是哦!
      那么答案是什么呢!答案是 –> 构造方法!为什么呢?
      因为要先把JSP文件转化为一个Servlet嘛,然后Servlet是个类,所以初始化的时候要先执行它的构造函数 嗷呜

JSP内置对象

即由web容器创建的,不用new就能直接用的一组对象

  • JSP的九大内置对象
    • 依惯例放张图,绿色里面是不常用的 :
  • out对象

    • 基础描述 :
      • JspWriter类的实例
      • 用于向客户端输出内容
    • out对象的常用方法 :

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      //向客户端打印字符串
      void println();
      //清除缓存区的内容(若在flush之后调用会抛出异常)
      void clear();
      //清除缓存区的内容(若在flush之后调用不会抛出异常)
      void clearBuffer();
      //将缓冲区内容输出到客户端
      void flush();
      //返回缓冲区的字节数大小,若不设缓冲区则返回0
      int getBufferSize();
      //返回缓冲区还剩多少字节数可用
      int getRemaining();
      //返回缓冲区满时是否自动清空还是抛出异常
      boolean isAutoFlush();
      //关闭输出流
      void close();
    • 最后,什么是缓冲区?还是放图叭

  • request对象

    • 基础描述 :
      • HttpServletRequest类的实例
      • 用于封装客户端的请求信息
      • 在完成客户端的请求前一直有效
    • request对象的常用方法 :
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      //返回name指定参数的参数值
      String getParameter(String name);
      //返回包含参数name的所有值的数组
      String[] getParameterValues(String name);
      //为该请求中的属性设值
      void setAttribute(String,Object);
      //获取某一属性的属性值
      Object getAttribute(String name);
      //得到请求体的MIME类型
      //(比如 application/x-www-form-urlencoded)
      String getContentType();
      //返回请求用的协议类型及版本号
      //(比如 HTTP/1.1)
      String String getProtocol();
      //返回接受请求的服务器的主机名
      String getServerName();
      //返回服务器接受此请求用的端口号
      int getServerPort();
      //返回字符编码方式
      String getCharacterEncoding();
      //设置请求的字符编码方式
      void setCharacterEncoding();
      //返回请求体的长度(单位为字节数)
      int getContentLength();
      //返回发送此请求的客户端的IP地址
      String getRemoteAddr();
      //返回发出该请求的真实物理路径
      String getRealPath(String path);
      //返回上下文路径(即项目所在根目录)
      //(比如 /DemoJsp)
      String getContextPath();
  • response对象

    • 基础描述 :
      • HttpServletResponse类的实例
      • 包含了响应客户请求的有关信息
      • 但在JSP中很少直接用到
      • 具有页面作用域,即访问一个页面时,该页面内的response对象只对本次访问有效,其他页面的response对象对当前页面无效
    • response对象的常用方法 :

      1
      2
      3
      4
      5
      6
      7
      8
      //返回是用何种字符编码进行响应的
      String getCharacterEncoding();
      //设置响应的MIME类型
      void setContentType(String type);
      //返回一个可以向客户端输出字符的对象
      PrintWriter getWriter();
      //重定向客户端的请求
      void sendRedirect(String location);
    • response.getWriter()和out.println()的区别 :

      • 前者获取的输出流对象总是先于后者打印
      • 可以在out输出后调用flush清空缓存,然后使用response的输出流,就可以让它在后面显示了
  • 请求转发和请求重定向的区别
    • 请求重定向 :
      • 客户端行为
      • response.sendRedirect();
      • 相当于两次请求
      • 不保存前一次的请求对象
      • 地址栏的URL发生改变
    • 请求转发 :
      • 服务器行为
      • request.getRequestDispatcher().forward(request,response);
      • 相当于一次请求
      • 保存请求对象
      • 地址栏的URL不改变
  • session对象

    • 基础描述 :
      • 表示客户端和服务端的一次会话
      • 保存在服务器的内存中,和用户一一对应
      • Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览该网站所花费的时间;所以说session实际上是一个特定的时间概念(?)
    • session对象的常用方法 :
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      //返回session的创建时间
      long getCreationTime();
      //返回session创建时,JSP引擎为它设置的唯一ID号
      String getId();
      //为session设置属性并赋值
      Object setAttribute(String name,Object value);
      //获取session中某一属性的值;若无则返回null
      Object getAttribute(String name);
      //以字符数组的形式返回该session中所有属性
      String[] getValueNames();
      //返回该session的最大存活时间(单位:秒)
      //该session过期后会重新连接并生成新的session
      //相当于一个新的会话
      int getMaxInactiveInterval();
  • session的生命周期

    • 生命周期的三个阶段 :
      • 创建、活动、销毁
    • 创建 :
      • 当客户端第一次访问某个JSP或Servlet时,服务器会为当前会话创建一个sessionId,每次向客户端发送请求时,都会将此sessionId携带过去,服务器会对此id进行校验
    • 活动 :
      • 某次会话中通过超链接打开的新页面
        –> 属于同一次会话
      • 当前会话页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源
        –> 属于同一会话
      • 本次会话的所有页面都关闭后再重新访问
        –> 创建新的会话(注意原有会话依然存在,旧的id仍保存在服务端,只是再没有客户端会携带它然后交予服务端校验)
    • 销毁 :
      • 调用session.invalidate()方法
      • 或该session过期(超时)
      • 或服务器重新启动
  • application对象

    • 基础描述 :
      • ServletContext类的实例
      • 实现了用户间数据的共享,可存放全局变量
      • 在用户的前后连接或不同用户之间的连接中,只要服务器未中途重启,操作的均是同一个application
      • 开始于服务器的启动,终止于服务器的关闭
    • application对象的常用方法 :
      1
      2
      3
      4
      5
      6
      7
      8
      9
      //为该application设置属性并赋值
      void setAttribute(String name, Object value);
      //获取application中某一属性的值;若无则返回null
      Object getAttribute(String name);
      //以枚举的形式返回该application中的所有属性
      Enumeration getAttributeNames();
      //返回JSP的引擎名及版本号
      //比如 Apache Tomcat/7.0.26
      String getServerInfo();
  • page对象

    • 基础描述 :
      • java.lang.Object类的实例
      • 指向当前JSP页面本事
      • 可以理解为类中的this指针
    • page对象的常用方法 :
      1
      2
      3
      String methods = "就是Object类里面的那些方法啦";
      String plus = "毕竟是它的实例嘛";
      System.out.println(method + "," + plus);

JavaBeans

即遵循了某种设计原则的Java类

  • JavaBeans的设计原则
    • 公有类
    • 无参的公有构造方法
    • 私有属性
    • getter && setter
  • JSP中JavaBeans的使用方法

    • 使用普通方法创建JavaBeans :
      • 直接在 <% 脚本 %> 里面new就好了
      • 跟Java里的使用一样一样的
      • 记得用 <% page import=”” %> 导入它
    • 使用useBean实例化JavaBeans对象 :

      • 话不多说了直接放代码吧
        1
        2
        3
        4
        <jsp:useBean id="myUser" class="com.po.Users"/>
        <h1>使用useBean创建JavaBea实例<h1/>
        用户名 :<%= myUser.getUserName() %><br>
        密码 :<%= myUser.getPassword() %><br>
    • 通过setProperty设置属性 :

      • 给已实例化的Bean对象的属性赋值,共四种形式

        1
        2
        3
        4
        5
        6
        7
        8
        <!-- 与表单相关联,根据表单名的完全匹配 -->
        <jsp:setProperty name="JavaBean实例名" property="*"/>
        <!-- 与表单相关联,根据表单名的部分匹配 -->
        <jsp:setProperty name="JavaBean实例名" property="JavaBean属性名"/>
        <!-- 与表单无关,为JavaBean属性手动设值 -->
        <jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="该属性的值"/>
        <!-- 与request参数相关联,通过URL传参赋值 -->
        <jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" param="request对象中的参数名"/>
      • 最后的最后还是要放张图

    • 通过getProperty获取属性值 :
      • 还是直接上图吧 嘤
  • JavaBean的四个作用域范围
    注:使用useBeans的scope属性可以指定其作用范围
    • 四个作用域及对应的JavaBean对象获取方法 :
      • page :仅在当前页面有效
      • request :可通过HttpRequest.getAttribute()获取
      • session :可通过HttpSession.getAttribute()获取
      • application :通过application.getAttribute()获取
    • 注意当作用域为request时,需要使用请求转发来跳转;否则相当于请求了两次,得不到原request中保存的信息

JSP状态管理

  • http协议的无状态性
    • 无状态是指,当浏览器发送请求给服务器,服务器就响应客户端请求;但是,当同一个浏览器再次发送请求给该服务器的时候,服务器并不知道它既是刚才那个浏览器
    • 所以,如果我们想让服务器记得我们的浏览器,顺便把我们的用户状态给保存了,该要怎么做呢?
  • 保存用户状态的两个机制
    • session :相当于直接给服务端一个小笔记本,用来记录每个客户端对应的的请求信息
    • cookie :相当于让浏览器在每次请求的时候都带上一小段特定信息表明身份,这样服务器就知道每个请求是由哪个客户端发出的了
  • JSP页面中创建与使用cookie

    • Cookie的创建、写入、与读取 :

      1
      2
      3
      4
      5
      6
      //创建Cookie对象
      Cookie myCookie = new Cookie(String key,Object value);
      //写入Cookie对象
      response.addCookie(myCookie);
      //读取Cookie对象
      Cookie[] cookies = request.getCookes();
    • cookie对象的常见方法 :

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      //设置cookie的有效期(单位:秒)
      void setMaxAge(int expiry);
      //对已创建的cookie进行赋值
      void setValue(String value);
      //获取cookie的名称
      String getName();
      //获取cookie的值
      String getValue();
      //获取cookie的有效期(单位:秒)
      int getMaxAge();
  • session和cookie的对比

    • 就不列举了直接放图吧

JSP中的指令与动作元素

  • include指令
    • 语法 :
      • <%@ include file=”URL” %>
    • 用途 :
      • 简单来说,就是使一个页面包含另一个页面的内容
  • include动作
    • 语法 :
      • <jsp:include page=”URL” flush=”true|false”/>
    • 属性 :
      • page :要包含的页面
      • flush :被包含的页面是否从缓冲区读入
  • include指令与include动作的区别
    • 本质比较 :
      • include指令 :包含的是代码
      • include动作 :包含的是运行结果
    • 其他比较 :
      • 如图如图 :
    • 最后放个问题 :

      以及关于这个问题感觉看上去还挺靠谱的一个答案 :
  • forward动作
    • 语法 :
      • <jsp:forward page=”URL”/>
    • 等同于 :
      • request.getRequestDispatcher(“/URL”).forward(request,response);
      • 也就是说等同于请求转发啦
  • param动作
    • 语法 :
      • <jsp:param name=”参数名” value=”参数值”/>
    • 备注 :
      • 常常与 < jsp:forward > 一起使用,作为其的子标签,用来在请求转发时传递参数(或添加新的参数)
      • 子标签和传参的概念都很好理解这里就不放示例了

最后的最后

  • 我们的纸上谈JSP到此结束 撒花٩(๑>◡<๑)۶
  • 接下来让我们期待与纸上谈系列之二 –>
  • 纸上谈Servlet mua!( • ̀ω•́ )✧
文章目录
  1. 1. WEB-INF 目录结构
  2. 2. JSP基础语法
  3. 3. JSP内置对象
  4. 4. JavaBeans
  5. 5. JSP状态管理
  6. 6. JSP中的指令与动作元素
  7. 7. 最后的最后