栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MVC开发模式和EL表达式的介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MVC开发模式和EL表达式的介绍

前言   :CSDN的小伙伴们大家好,今天跟大家分享一个MVC开发模式,以及EL表达式和JSP标签库,如果这篇文章对你有用,麻烦给我点个小赞以示鼓励吧
  :博客主页:空山新雨后的java知识图书馆
  ☁️:今天天气多云,适合学习
  :名言分享:一个能思想的人,才真是一个力量无边的人——巴尔扎克
  上一篇文章:cookie和Session
  欢迎大家一起学习,进步。加油


文章目录

一、MVC开发模式二、EL表达式

2.1、EL表达式的概念2.2、EL表达式的语法2.3、EL表达式的使用方法

  2.3.1、运算符  2.3.2、EL表达式获取值的方法 2.4、忽略EL表达式的方法 三、JSTL

3.1、JSTL基本概念和使用方法3.2、常用的JSTL标签

  3.2.1、if  3.2.2、choose  3.3.3、forEach 小案例:通过表格展示集合中的数据


一、MVC开发模式

  MVC开发模式是在JSP文件中糅杂了大量的java代码,和HTML代码的前提下,造成了代码维护工作的难度的提升,因此就有人在java的web开发中使用借鉴MVC开发模式,使得程序更易于开发和维护。
  MVC开发模式是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

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

MVC开发模式的优缺点:

优缺点:
1. 优点:
  1. 耦合性低,方便维护,可以利于分工协作
  2. 重用性高
2. 缺点:
  1. 使得项目架构变得复杂,对开发人员要求高

二、EL表达式 2.1、EL表达式的概念

expression Language 表达式语言,主要是用于替换和简化jsp页面中java代码的编写

2.2、EL表达式的语法
	${表达式}
2.3、EL表达式的使用方法   2.3.1、运算符

分类

    算数运算符: + - * /(div) %(mod)比较运算符: > < >= <= == !=逻辑运算符: &&(and) ||(or) !(not)空运算符: empty * 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0 * ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0 * ${not empty
    str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
  2.3.2、EL表达式获取值的方法

el表达式只能从域对象中获取值
语法:

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

域名称:

    pageScope --> pageContextrequestScope --> requestsessionScope --> sessionapplicationScope --> application(ServletContext)

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

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

代码实例:

<%--
  Created by IntelliJ IDEA.
  User: wang
  Date: 2022/3/15
  Time: 11:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    el表达式获取值的演示


<%--
2. 获取值
		1. el表达式只能从域对象中获取值
		2. 语法:
			1. ${域名称.键名}:从指定域中获取指定键的值
				* 域名称:
					1. pageScope		--> pageContext
					2. requestScope 	--> request
					3. sessionScope 	--> session
					4. applicationScope --> application(ServletContext)
				* 举例:在request域中存储了name=张三
				* 获取:${requestScope.name}

			2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
--%>
<%--在域中存储值--%>
<%
    session.setAttribute("name", "娇小汉子李四");
    request.setAttribute("name", "法外狂徒张三");
    session.setAttribute("age", "22");
    application.setAttribute("hobby", "playGame");
    pageContext.setAttribute("Professional", "student");

%>

<%--通过el表达式来获取值--%>
<%--语法一: ${域名称.键名}:从指定域中获取指定键的值--%>

el表达式获取值

${requestScope.name}
${sessionScope.age}
${applicationScope.hobby}
${pageScope.Professional}

el表达式获取不存在的值的效果演示

<%--获取不存在的值会返回一个空字符串--%>
<%--${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。 我们存储了两个name值,那么一个在session域中,一个在request域中,session比request于大,因此 会先访问到张三 --%>

演示第二种语法

${name}
    获取对象、List集合、Map集合的值
      对象:${域名称.键名.属性名} * 本质上会去调用对象的getter方法List集合:${域名称.键名[索引]}Map集合: * ${域名称.键名.key名称} * ${域名称.键名[“key名称”]}

代码实例:

<%@ page import="com.study.El.User" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: wang
  Date: 2022/3/15
  Time: 14:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    测试获取对象的值


获取user对象的值

<%--首先设置user对象的值--%> <% User user = new User(); user.setName("张三"); user.setAge(34); user.setBirthDate(new Date()); request.setAttribute("user", user); // 演示list集合的获取,首先new一个list集合对象 ArrayList arrayList = new ArrayList(); arrayList.add("111"); arrayList.add("222"); //list集合中存储一个对象 arrayList.add(user); request.setAttribute("list", arrayList); //演示map集合 HashMap map = new HashMap<>(); map.put("one", "一"); map.put("two", "二"); map.put("user", user); request.setAttribute("map", map); %> <%--演示获取user对象的属性的值 *setter 或 getter 方法, 去掉set, get,首字母变小写 例如:getName --> Name --> name; --%> ${requestScope.user.name}
${requestScope.user.age}
${requestScope.user.birthDate}
可以发现date属性的格式不太好看,那么可以通过在类中提供一个逻辑视图的方法, 来显示好看的格式
${requestScope.user.birStr}

演示获取list集合对象

${requestScope.list[0]}
${requestScope.list[1]}
<%--获取list集合中的user对象的属性依旧是一样的格式--%> ${requestScope.list[2].name}
<%--如果获取list集合的时候超出了界限,那么会显示空字符串,不会报错,是因为el表达式内部优化好了。--%> ${requestScope.list[3]}

演示获取map集合对象

${requestScope.map.one}
<%--如果key为数字,是无法被解析的--%> ${requestScope.map."2"} ${requestScope.map["user"].name}
${requestScope.map.user.name}
2.4、忽略EL表达式的方法

jsp默认支持el表达式的。如果要忽略el表达式

    设置jsp中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式${表达式} :忽略当前这个el表达式
<%--
  Created by IntelliJ IDEA.
  User: wang
  Date: 2022/3/15
  Time: 11:05
  To change this template use File | Settings | File Templates.
--%>
<%--还有一种方法就是在指令中来忽略所有的el表达式
    isELIgnored="true":表示忽略所有的el表达式
    如果值为true,则不忽略
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>


    el表达式基本语法演示


<%--基本语法--%>
${3>4}<%--这个表达式会在浏览器页面中输出false--%>
<%--忽略单个el表达式的方法--%>
${3>4}<%--这个表达式会原样输出--%>




三、JSTL 3.1、JSTL基本概念和使用方法

概念

  JavaServer Pages Tag Library JSP标准标签库
  是由Apache组织提供的开源的免费的jsp标签 <标签>

作用:

用于简化和替换jsp页面上的java代码

用法:

    导入jstl相关jar包:jar包引入标签库:taglib指令: <%@ taglib %>使用标签
3.2、常用的JSTL标签   3.2.1、if

用法与java中的if类似
1. 属性:

test 是必须属性,接收boolean表达式如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容一般情况下,test属性值会结合el表达式一起使用
另外,* c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签,写else的情况即可

代码演示:

<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: wang
  Date: 2022/3/15
  Time: 16:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--前缀名默认使用c,引用路径为下方这个,版本较高--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    jstl1标签的介绍——if标签



<%--基本使用--%>
<%--test属性为true,则在页面中展示标签体的内容,--%>
<%--test属性为false,则在页面中不展示标签体的内容--%>

    hello jst


hello jst
<%--一般情况下可以配合el表达式来进行使用--%> <%--例如判断集合是否为空,如果为空,可以遍历集合,如果不为空,提示不为空--%> <% ArrayList list = new ArrayList<>(); // list.add("1111"); request.setAttribute("list", list); int number = 3; request.setAttribute("number", number); %> 集合可以做遍历操作
<%--如果想要相反的效果,就只能用test来做,不能使用else--%> 集合为空,不能遍历
<%--同理,也可以使用该方法来完成对数字奇偶进行判断--%> 该数字是偶数 该数字为奇数   3.2.2、choose

类似于java中的Switch语句
  使用步骤

    使用choose标签声明 相当于switch声明使用when标签做判断 相当于case使用otherwise标签做其他情况的声明 相当于default
<%--
  Created by IntelliJ IDEA.
  User: wang
  Date: 2022/3/15
  Time: 16:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    jstl标签choose演示案例


<%--演示一个案例,数字对应的星期数

        1. 使用choose标签声明         			相当于switch声明
        2. 使用when标签做判断         			相当于case
        3. 使用otherwise标签做其他情况的声明    	相当于default
        --%>
<%
    int number = 3;
    request.setAttribute("number",number);
%>


    星期一
    星期二
    星期三
    星期四
    星期五
    星期六
    星期日

    数字输入有误







  3.3.3、forEach

相当于java中的for循环

  有两种用法
  1、相当于java中的普通for循环
属性:

属性:
begin:开始值
end:结束值
step:步长
varStatus:循环状态对象
index:容器中的索引,从0开始
count:循环次数,从1开始

  2、相当于java中增强for
属性:

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

代码演示

<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: wang
  Date: 2022/3/16
  Time: 9:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    foreach循环测试




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

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

--%>



    ${s.index} ${s.count} ${i}

<% ArrayList list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); request.setAttribute("list", list); %> ${s.index} ${s.count} ${str}

小案例:通过表格展示集合中的数据

效果如下:

分析:

1、首先可以通过将数据存储到集合中,发送到request域中
2、通过EL表达式获取到存储的集合对象
3、使用JSTL标签foreach遍历
4、通过if标签实现颜色效果

代码实例:

<%@ page import="java.util.ArrayList" %>
<%@ page import="com.study.El.User" %>
<%@ page import="java.util.Date" %><%--
  Created by IntelliJ IDEA.
  User: wang
  Date: 2022/3/16
  Time: 9:56
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    表格小案例



<%
    ArrayList list = new ArrayList<>();
    list.add(new User("张三", 15, new Date()));
    list.add(new User("张四", 14, new Date()));
    list.add(new User("张五", 55, new Date()));
    list.add(new User("张六", 25, new Date()));

    //将数据存储到request域中
    request.setAttribute("list", list);

%>

<%--实现表格的动态添加--%>


        <%--        表头行--%>
        
    <%--    表格行,动态的获取list中的数据--%>

    

        <%--        为每一行动态的添加背景色,通过if标签实现,奇数一种颜色,偶数一种颜色--%>
        
            
                    <%--  count作为编号--%>
                
                    <%-- 获取对象中的属性--%>
                
                    <%--获取有格式的日期--%>
                
            
                    <%--  count作为编号--%>
                
                    <%-- 获取对象中的属性--%>
                
                    <%--获取有格式的日期--%>
                
编号 姓名 年龄 日期
${s.count}${user.name} ${user.age}${user.birStr}
${s.count}${user.name} ${user.age}${user.birStr}

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号