JSP、EL、JSTL、MVC、三层架构

# 今日内容 :

 1. JSP :

   (1. 指令

  (2. 注释

  (3. 内置对象

 2. MVC 开发模式

 3. EL 表达式

 4. JSTL 标签

 5. 三层架构


##  JSP :

 1. 指令

    * 作用 :用于配置JSP页面,导入资源文件

    * 格式 :

         <%@  指令名称 属性名1=属性值1  ... %>

   * 分类 :

  (1. page  :配置jsp页面的

         * ContextType : 等于 response.setContextType()

           a. 设置响应体的mime类型以及字符集

           b.  设置当前jsp页面的编码  (只能是高级开发 工具ide才能生效,如果使用低级,则需要设置pageEncoding属性设置)

         * import 导包

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

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

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

             b. false :否 。默认值,不可使用

  (2. include    : 页面包含的, 导入页面的资源文件 (不常用)将资源中的其他jsp页面包含进该jsp页面

  (3. taglib  :  导入资源,引入标签库,如jstl标签库

        *  <%@taglib prefix="" uri="" %>>

         * prefix : 前缀,自定义的

 2. 注释 :

   (1. html注释 :

      :只能注释html代码片段

  (2. jsp注释 :

       <%--   --%> : 可以注释所有

 3. 内置对象

    * 在JSP页面中不需要创建,直接使用 的对象

    * 一共有9个 :(前4个为域对象)

                变量名                            真实类型                                  作用

          * pageContext                 PageContext                      当前页面共享数据  ——可以获取其他的八个对象

          * request                          HttpServletRequest           一次请求访问的多个资源(转发)

          * session                         HttpSession                        一次会话的多个请求(重定向)

          * application                    ServletContext                  所有用户间共享数据 (服务器开启被创建,服务器关闭被销毁)

          * response                       HttpServletResponse       响应对象

          * page                              Object                                 当前页面(Servlet)的对象   this

          * out                                 JspWriter                            输出对象,数据输出到页面上

          * config                            ServletConfig                     Servlet的配置对象

          *exception                       Throwable                           异常对象


## MVC : 开发模式 

     1. JSP演变历史 

      (1. 早期只有Servlet,只能使用resonse 输出标签数据,非常麻烦

      (2. 后来有jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中既写大量的Java代码,又写html标签,造成难以维护,难以分工写作。

     (3.  再后来,Java web的开发,借鉴mvc开发模式,使得程序的设计更加合理性。

  2. MVC :

    (1. M : Model ,模型 —— JavaBean

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

   (2. V : View ,视图  —— JSP

        * 展示数据

   (3. C : Controller ,控制器  —— Servlet

        * 获取用户的输入

        * 调用模型

        * 将数据交给视图层展示  

JSP、EL、JSTL、MVC、三层架构_第1张图片


* 优缺点 :

   a. 优点 :

  (1. 耦合性低 :方便维护,可以利于分工协作

  (2. 重用性高 : 

   b. 缺点 :

   (1. 使得项目架构变得复杂,对开发人员要求较高。


## EL表达式 :

  1. 概念 :Expression Language : 表达式语言

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

  3. 语法 : $P{表达式}

 4. 注意 :

    * JSP默认是支持EL表达式的。如果要忽略EL表达式

       (1. 设置jsp中page指令中 : isELIgnored="true" 。忽略当前jsp页面中所有的el表达式

       (2. \${表达式} :忽略当前这个el表达式

 5. 使用 :

 (1. 运算 :

     * 运算符 :

       a. 算数运算符 : +     -     *   / (div)    %(mod)

       b. 比较运算符 : >   <    >=    <=    !=    == 

       c. 逻辑运算符 :&& (and)     ||(or)      !

       d. 空运算符 : empty

          * 功能 : 用于判断字符串、集合、数组对象是否为null 并且长度是否为 0

         * ${empty list} : 判断字符串、集合、数组对象是否为null 或者 长度 为 0

         * ${not empty list} : 表示判断字符串、集合、数组对象是否不为null,并且长度 >0 

 (2. 获取值 

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

     b. 语法 :

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

             * 域名称 :

                 (1. pageScope   --> pageContext

                   (2. requestScope    --> request

                   (3. sessionScope   -->  session

                   (4. applicationScope  --> application(ServletContext)

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

           * 获取 : ${requestScope.name}

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

          ${name}

        3. 获取对象 、List集合 、Map集合的值

         (1.对象 :${域名称.键名.属性名}

                   * 本质上会调用对象的getter方法

      注意 :通过对象的属性来获取 

         *  setter或getter 方法 ,去掉set 或 get ,将剩余部分,首字母变小写

          * setName  --> Name  --> name

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

           (3. Map集合 : ${域名称.键名.key}    ${域名称.键名["key名称"]}

              ${requestScope.m.age}

              ${m["age"]

  (3. 隐式对象 :

       * el表达式中有11个隐式对象 :

       * pageContext :

             * 获取jsp其他8个内置对象

                * ${pageContext.request.contextPath} : 动态获取虚拟目录

## JSTL

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

    * 是由Apache组织提供的开源的免费的jsp标签

  2. 作用 : 用于简化和替换jsp页面的Java代码

  3.  使用步骤 :

   (1. 导入jstl相关的jar包  ( javax.servlet.jsp.jstl.jar     jstl-impl.jar)

   (2. 引入标签库 : taglib 指令 :<%@  taglib  uri = ""   prefix = "" %>

     (3. 使用标签

  4. 常用的JSTL标签 

    (1. if    : 相当于Java代码的if语句

         * c:if 标签

            1. 属性 :

                * test :必须属性,接收Boolean的表达式

                * 如果表达式为 true ,则显示if标签的内容,如果为false ,则不显示标签体内容

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

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

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="org.w3c.dom.ls.LSInput" %>
<%@ page import="jdk.nashorn.internal.ir.LiteralNode" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    Title


    <%--
        c:if 标签
           1. 属性 :
                * test :必须属性,接收Boolean的表达式
                  * 如果表达式为 true ,则显示if标签的内容,如果为false ,则不显示标签体内容
                  * 一般情况下,test属性值会结合el表达式一起使用
           2.注意 :c:if 没有else情况,想要else情况,则可以在定义一个c:if 标签
    --%>
    
        

我是真 .....

<% //判断request 域中的一个list集合是否为空,如果不为null则显示遍历集合 List list = new ArrayList(); list.add("aaa"); request.setAttribute("list",list); request.setAttribute("num",3); %> 遍历集合 ${requestScope.num}为奇数

    (2. choose :相当于 switch 

    (3. foreach :相当于Java代码的for 循环

           a. 完成重复的操作

               for (int i = 0; i < 10; i++) {

             }

            * 属性 :

               begin :开始值

               end :结束值

               var : 临时变量

              step :步长

              varstatus : 循环状态对象

              index :容器中元素的索引从0开始

              count : 循环次数

        b. 遍历容器

           List list;

          for (User user: list ) {

           }

           * 属性 :

               items :容器对象

               var : 容器中元素的临时变量

               varStatus : 循环状态对象

              index :容器中元素的索引从0开始

              count :循环次数\

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>>


    foreach


    <%--
        foreach :相当于Java代码的for语句
          1. 完成重复的操作
            for (int i = 0; i < 10; i++) {

          }
           * 属性 :
                begin :开始值
                end :结束值
                var : 临时变量
                step :步长
                varstatus : 循环状态对象
                   index :容器中元素的索引从0开始
                   count : 循环次数
          2. 遍历容器
          List list;
           for (User user: list ) {

         }
         * 属性 :
            items :容器对象
            var : 容器中元素的临时变量
            varStatus : 循环状态对象
                index :容器中元素的索引从0开始
                count :循环次数
    --%>

    ${i}

<% List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); request.setAttribute("list",list); %> ${l}
${s.index}
${s.count}

# 练习 :

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.zhulin.entity.User" %>
<%@ page import="javax.xml.crypto.Data" %>
<%@ page import="java.util.Date" %>
<%@ page import="sun.util.calendar.BaseCalendar" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    jstl_test


    <%
        List list = new ArrayList();
        list.add(new User("张三",new Date(),"female"));
        list.add(new User("李四", new Date(), "male"));
        list.add(new User("王五", new Date(), "male"));
        request.setAttribute("list",list);
    %>

    <%--数据行--%>
    
    
        <%--表格集数行为red--%>
       
        
        <%--表格偶数行 green--%>
        
        
编号 姓名 生日 性别
${s.count} ${user.name} ${user.birStr} ${user.gender}
${s.count} ${user.name} ${user.birStr} ${user.gender}

 

你可能感兴趣的:(java,web前端,JSP)