菜鸟学JavaWeb之——JSP

九、JSP

9.1 概念

Java Server Pages:Java服务器端页面

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

指令

JSP的指令格式:<%@ 指令名称 属性名1=属性值1 属性名2 = 属性值2 …%>

分类

  • page:配置JSP页面的

    • contentType:等同于response.setContentType()

    • import:导包

    • errorPage:当前页面发生异常后,会自动跳转到指定的错误页面

    • isErrorPage:标识当前页是否是错误页面

      true:是,可以使用内置对象exception

      false:否,默认值。不可以使用内置对象exception

    eg:<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="500.jsp "%>

  • taglib:导入资源(比如导入JSTL标签库)

    eg:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

9.2 JSP原理

JSP本质上就是一个Servlet,当我们发布的时候网络容器会将JSP页面解析为Java的一个类,将JSP的每一行解析为Java代码。这个Servlet是网络容器帮我们完成的。

在这里插入图片描述

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

  • <% 代码 %>:定义的Java代码在service方法中。service方法中可以定义什么,该脚本就可以定义什么

  • <%! 代码 %>:定义的Java代码在JSP转换后的Java类的成员位置。(一般不会用)

  • <%= 代码 %>:定义的Java代码会输出到页面上,输出语句中可以定义什么,该脚本就可以定义什么。

9.4 JSP内置对象

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

JSP一个有9个内置对象

  • pageContext:当前页面共享数据,还可以获取其他八个内置对象

  • request:请求对象。一次请求访问的多个资源(转发)

  • response:响应对象

  • session:一次会话的多个请求间

  • application:所有用户间共享数据

  • page:当前页面(Servlet)的对象 this

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

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

      在Tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。所以response.getWriter()数据输出永远在out.writer()之前

  • config:Servlet的配置对象

  • exception:异常对象

9.5 MVC开发模式

M:Model,模型。JavaBean

  • 完成具体的业务操作,如:查询数据库,封装对象

V:View,视图。JSP

  • 展示数据

C:Controller(中介),控制器。Servlet

  • 获取用户的输入
  • 调用模型
  • 将数据交给视图进行展示

9.6 EL表达式

JSP中写太多Java代码会让代码繁琐难以维护,但有时候又需要做一些逻辑处理,这就引入了EL表达式和JSTL标签来替换Java代码。

作用:替换和简化jsp页面中的Java代码的编写

语法:${表达式}

使用:

  • 运算

    • 算术运算符:+ - * /(div) %(mod)

    • 比较运算符:> < >= <= == !=

    • 逻辑运算符:&&(and) ||(or) !(not)

    • 空运算符:empty

      功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0(取反:not empty)

      eg:${empty list}

  • 获取值

    • el表达式只能从域对象中获取值

    • 语法:

      • ${域名称.键名}:从指定域中获取指定键的值

        域名称

        • pageScope —> pageContext
        • requestScope —> request (当前页面,本次请求)
        • sessionScope —> session (指当前用户,没有退出之前(程序启动着))
        • applicationScope —> application(ServletContext) (指所有用户,任何时候(一般用application来统计页面访问次数))

        举例:在request域中存储了name=张三

        获取:${requestScope.name}

      • ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

        注意:如果需要越级拿值,比如request中有值,同时session里面也有,现需要拿session里的值,则通过sessionScope来拿(同样:applicationScope)

      • 获取对象、List集合、Map集合的值

        • 对象:${域名称.键名.属性名}(本质上调用的是对象的getter()方法)

        • List集合:${域名称.键名[索引]}

          eg: l i s t [ 0 ] 、 {list[0]}、 list[0]{list[0].name}

        • Map集合:${域名称.键名.key名称}

          eg: m a p . n a m e 或 {map.name}或 map.name{map[“name”]}、${map.user.name}

9.7 JSTL

标签库就是把小脚本进行的一次封装,EL表达式也是对小脚本的一次封装。只不过EL表达式封住的式取值过程,而标签库封装的是流程控制过程

JSTL:JSP标准标签库,由Apache组织提供的开源的免费的jsp标签

作用:用于简化和替换JSP页面上的Java代码

使用步骤:

  • 导入JSTL相关的jar包
  • 引入标签库:taglib指令:<%@ taglib %>
  • 使用标签

9.7.1 常用的JSTL标签

if
  • c : if 标签

    属性:

    • test 必须属性,接受boolean表达式,如果表达式为true,则显示if标签体内容,如果为false,则不下显示标签体内容。

      一般情况下,test属性值会结合el表达式一起使用

      <body>
          <%
              List list = new ArrayList();
              list.add("aaa");
              request.setAttribute("list",list);
          %>
      
          <c:if test="${not empty list}">
              遍历集合...
          </c:if>
      </body>
      
    • 注意:c : if 标签没有else情况,想要else情况,则可以再定义一个c : if 标签

choose(Java的switch)

​ choose标签:相当于switch声明

​ when标签:相当于case

​ otherwise标签:相当于default

foreach(Java的for)

属性

  • begin:开始值
  • end:结束值
  • var:临时变量(或容器中元素的临时变量)
  • step:步长
  • items:容器对象(遍历容器时用)
<c:forEach begin="1" end="10" var="i" step="1">
        ${i}<br>
    </c:forEach>


    <%
        List list =  new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        request.setAttribute("list",list);
    %>
<%--遍历容器--%>
    <c:forEach items="${list}" var="str">
        ${str}<br>
    </c:forEach>

9.8 三层架构

界面层(表示层):用户看得到的界面。用户可以通过界面上的组件和服务器进行交互

业务逻辑层:处理业务逻辑的。

数据访问层:操作数据存储文件。

在这里插入图片描述
内容持续更新中…

Guess you like

Origin blog.csdn.net/ysf15609260848/article/details/105518256