JSP相关内容

JSP:

1. 概念:

  • Java Server Pages:java服务器端页面

    • 可以理解为一个特殊的页面,其中既可以指定定义html,又可以定义java代码

    • 用于简化书写

    • JSP本质上就是一个Servlet

    • JSP的脚本:JSP定义Java代码的方式

      • <% 代码 %>:定义的Java代码,在service方法中.service方法中可以定义什么,该脚本就可以定义什么
      • <%! 代码 %>:定义的Java代码,在JSP转换后的Java类的成员位置
      • <%= 代码 %>:定义的Java代码在service方法中,会输出到页面上,输出语句中可以定义什么,该脚本中就可以定义什么
    • JSP的内置对象:

      • 在JSP页面中不需要获取和创建的,可以直接使用的对象

      • JSP一共有9个内置对象

        1. request

        2. response

        3. out:字符输出流.可以将数据输出到页面上,和response.getWriter()类似

          • response.getWriter()和out.write()的区别:

            • 在tomcat服务器真正给客户端做出相应之前,会先找response缓冲区数据再找out缓冲区数据
            • response.getWriter()数据输出永远在out.write()之前

2.指令:

  • 作用:用于配置JSP页面,导入资源文件
  • 格式:
    • <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 …%>
  • 分类:
    1. page:配置JSP页面的
      • contentType:等同于response.setContentType()
        1. 设置响应体的mime类型和字符集
        2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
      • language:支持的语言,目前只支持java
      • buffer:缓冲区大小,默认8kb(out对象有缓冲区)
      • import:导包
      • errorPage::当前页面发生异常后,会自动跳转到指定的错误页面
      • isErrorPage:标识当前页面是否是错误页面
        1. true:是,可以使用内置对象exception(可用于输出错误信息)
        2. false:否,默认值,不可以使用内置对象exception
    2. include:页面包含的.导入页面的资源文件(当多个页面有重复内容时,可以提取出相同部分,在其他页面中导入,来简化书写)
    3. taglib:导入资源库

3.注释:

  • html注释:
    • <!-- -->:只能注释html代码片段
  • JSP注释:(推荐使用)
    • <%-- --%>:可以注释所有

4.内置对象

​ 变量名 :真实类型 : 作用

  • pageContext : PageContext : 当前页面共享数据 ,还可以获取其他8个内置对象
  • request : HttpServletRequest : 一次请求访问的多个资源(转发)
  • session : HttpSession : 一次会话的多次请求间
  • application : ServletContext : 所有的用户间共享数据
  • rseponse : HttpServletResponse : 响应对象
  • page : Object : 当前页面(Servlet)的对象, this
  • out : JspWriter : 输出对象,数据输出到页面上
  • config : ServletConfig : Servlet的配置对象
  • exception : Throwable : 异常对象

MVC:

  1. M:Model ,模型, JavaBean
    • 完成具体的业务操作,如:查询数据库,封装对象
  2. V:View,视图,JSP
    • 展示数据
  3. C:Controller,控制器,Servlet
    • 获取用户的输入
    • 调用模型
    • 将数据交给视图进行展示

EL表达式:

  1. 概念:Expresssion language 表达式语言
  2. 作用:替换和简化JSP页面中Java代码的缩写
  3. 语法:${表达式}
  4. 注意:
    1. JSP默认是支持el表达式的,如果要忽略el表达式
      • 设置jsp中的page指令中的 :ELIgnored=”true” 忽略当前页面中所有的el表达式
      • \${} :忽略当前这个el表达式
  5. 使用:
    1. 运算:
      • 运算符:
        1. 算数运算符:+ - * /(div) %(mod)
        2. 比较运算符:> < >= <= == !=
        3. 逻辑运算符: &&(and) ||(or) !(not)
        4. 空运算符:empty
          • 功能: 用于判断字符串,集合,数组对象是否为null,或者长度是否为0
          • ${empty list}:判断字符串,集合,数组,对象是否为null,或者长度是否为0
          • ${not empty list}:表示判断字符串,集合,数组是否不为null,并且长度>0
    2. 获取值:
      1. el表达式只能从域对象中获取值
      2. 语法:
        1. ${域名称.键名} :从指定域中获取值
          • 域名称:
            1. pageScope —> pageContext
            2. requestScope —> request
            3. sessionScope —> session
            4. applicationScope —> application
          • 举例:在request域中存储了name :张三
          • 获取:${requestScope.name}
        2. ${域名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止
        3. 获取对象,List集合,Map集合的值
          1. 对象:${域名称.键名.属性名}
            • 本质上会去调用对象的getter方法
          2. List集合:${域名称.键名.[索引]},索引越界会显示空字符串(什么都不显示,不会报错)
          3. Map集合:
            • ${域名称.键名.Key名称}
            • ${域名称.键名[“Key名称”]}
      3. 隐式对象:
        • el表达式中有11个隐式对象
        • pageContext:
          1. 获取jsp其他八个内置对象
            • ${pageContext.request.contextPath}:动态获取虚拟目录

JSTL:

  1. 概念:JavaServer Pages Tag Library :JSP标准标签库

    • 是由Apache组织提供的开源的免费的jsp标签
  2. 作用:用于简化和替换jsp页面上的Java代码

  3. 使用步骤:

    1. 导入jstl相关的jar包
    2. 引入标签库: taglib指令: <%@ taglib %>
    3. 使用标签库
  4. 常用的JSTL标签

    1. if :c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签

      • c: if标签 1.属性, 必须属性:test 接收boolean表达式
      • 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
        • 一般情况下,test属性值会结合el表达式一起使用
    2. choose : 相当于java代码中的switch语句

      1. 使用choose标签取出数字 //相当于switch声明
      2. 使用when标签做数字判断 //相当于 case
      3. otherwise标签做其他情况的声明 //相当于default
    3. foreach:相当于java代码中的for语句
  5. 练习:

    • 需求:在request域中有一个存有User对象的List集合,需要使用jstl标签将list集合数据展示到jsp页面的表格table中

三层架构:

软件设计架构:

  1. 界面层(表示层):用户看的界面,用户可以通过界面上的组件和服务器进行交互
  2. 业务逻辑层:处理业务逻辑的
  3. 数据访问层:操作数据存储文件
    • 软件开发的三层架构
Thanks!