MVC开发模式

 

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


        * 优缺点:
            1. 优点:
                1. 耦合性低,方便维护,可以利于分工协作
                2. 重用性高

            2. 缺点:
                1. 使得项目架构变得复杂,对开发人员要求高

EL表达式
    1. 概念:Expression Language 表达式语言
    2. 作用:替换和简化jsp页面中java代码的编写
    3. 语法:${表达式}
    4. 注意:
        * jsp默认支持el表达式的。如果要忽略el表达式
            1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
            2. \${表达式} :忽略当前这个el表达式


    5. 使用:
        1. 运算:
            * 运算符:
                1. 算数运算符: + - * /(div) %(mod)
                2. 比较运算符: > < >= <= == !=
                3. 逻辑运算符: &&(and) ||(or) !(not)
                4. 空运算符: empty
                    * 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
                    * ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
                    * ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0

 

 

 

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

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

<html>
<head>
    <title>el获取数据</title>
</head>
<body>
    <%
        User user = new User();
        user.setName("张三");
        user.setAge(23);
        user.setBirthday(new Date());

        request.setAttribute("u",user);
    %>

    <h3>el获取对象的值</h3>
    ${requestScope.u}
    <br>
    <%--
    * 通过的是对象的属性来获取
        * setter或getter方法,去掉set或get,在将剩余部分,首字母变为小写。
        * setName --> Name --> name
--%>
    ${requestScope.u.name}<br>
    ${requestScope.u.age}<br>
    ${requestScope.u.birthday}<br>
    ${requestScope.u.name}<br>
    ${requestScope.u.birth}

</body>
</html>
public class User {
    private String name;
    private int age;
    private Date birthday;

    /**
     * 逻辑视图
     * @return
     */
    public String getBirth(){
        if(birthday != null){
            //格式化日期对象
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            //返回字符串
            return sdf.format(birthday);
        }
        return "";
     }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

        3. 获取对象List集合、Map集合的值
                    1. 对象:${域名称.键名.属性名}
                        * 本质上会去调用对象的getter方法

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

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

3. 隐式对象:
          
 * el表达式中有11个隐式对象
            * pageContext:
         
       * 获取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:相当于java代码的if语句
            1. 属性:
                * test 必须属性,接受boolean表达式
                    * 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
                    * 一般情况下,test属性值会结合el表达式一起使用
                2. 注意:
                    * c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签

<html>
<head>
    <title>if标签</title>
</head>
<body>
<%--
    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("number",33);
    %>

    <c:if test="${not empty list}">
        遍历集合
    </c:if>
<br>
    <c:if test="${number % 2 != 0}">
        ${number}为奇数
    </c:if>
</body>
</html>


        2. choose:相当于java代码的switch语句
            1. 使用choose标签声明                     相当于switch声明
            2. 使用when标签做判断                     相当于case
            3. 使用otherwise标签做其他情况的声明        相当于default

 

        3. foreach:相当于java代码的for语句

<html>
<head>
    <title>forench标签</title>
</head>
<body>
<%--

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

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

        }

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


--%>

<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
    ${i} <h3>${s.index}</h3> <h4> ${s.count} </h4><br>
    </c:forEach>
    <hr>
        <%
        List list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        request.setAttribute("list",list);
    %>
    <c:forEach items="${list}" var="str" varStatus="s">
        ${s.index} ${s.count} ${str}<br>
    </c:forEach>

</body>
</html>

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

<html>
<head>
    <title>Title</title>
    <style>
        table{
            border: 1px solid;
            width: 500px;
            align-content: center;
        }
        tr{
            border: 1px solid;
        }
        td{
            border: 1px solid;
        }
        th{
            border: 1px solid;
        }
    </style>
</head>
<body>
    <%
        List list = new ArrayList<>();
        list.add(new User("张三",20,new Date()));
        list.add(new User("李四",30,new Date()));
        list.add(new User("王二",24,new Date()));

        request.setAttribute("list",list);
    %>
<table>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>出生日期</th>
    </tr>
<%--    数据行--%>
    <c:forEach items="${list}" var="user" varStatus="s">
        <c:if test="${s.count % 2 != 0}">
            <tr bgcolor="aqua">
                <td>${s.count}</td>
                <td>${user.name}</td>
                <td>${user.age}</td>
                <td>${user.birth}</td>
            </tr>
        </c:if>
        <c:if test="${s.count % 2 == 0}">
            <tr bgcolor="#7fffd4 ">
                <td>${s.count}</td>
                <td>${user.name}</td>
                <td>${user.age}</td>
                <td>${user.birth}</td>
            </tr>
        </c:if>

    </c:forEach>
</table>
</body>
</html>

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

 

 

?Bad guy?
关注 关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVC完全开发手册(一篇学会SpringMVC所有知识点)
hao_kkkkk的专栏
03-22 144
2.请求参数的接收方式不一样。Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
复杂jstl取值的方式
独行侠梦的博客
05-12 755
负责jstl取值方式 当对象嵌套层次太深时,jstl取值多有不便,解决方式如下 map的key可以很复杂: <c:set var="gpskey" value="${car.gps }" />jstl取值: <c:if test="${deviceStatusForm.onlineMap[gpskey] eq 1}"> 解决的方法就是采用 标签来接收临时变量
域对象&EL表达式&JSTL库
qq_62881798的博客
05-14 226
1.域对象 page域(pageContext):只能作用于当前页面,既不能用来做做转发的数据分享,也不能做重定向的数据分享。 request域:只能作用于同一个请求的数据共享,所以只能在请求的转发中使用。 session域:只能作用于一次对话中共享数据(一次对话:用户打开浏览器,浏览多个web站点后,关闭该浏览器),转发和重定向都可以使用 context域(application):只能在同一个web应用中使用。(全局的) 2.EL表达式的...
MVC模式介绍
最新发布
怎奈你何的博客
10-25 4206
mvc
什么是MVC开发模式
yeqiuBOke的博客
07-04 7917
全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。简介编辑MVC开始...
MVC开发模式详解
09-12
MVC开发模式详解,介绍MVC开发模式详解,看看。
关于php mvc开发模式的感想
10-28
使用mvc开发已经有一段很长时间了,发现了一些问题。
mvc开发模式
11-18
java web的 mvc开发模式
MVC开发模式.pdf
10-03
MVC开发模式.pdf
JSTL——jstl标签简介
chenxingxingxing的博客
03-04 8753
JSTL——jstl标签简介
MVC设计模式demo
03-18
这个是MVC for Android的设计模式范例,可以参考研究下,希望对大家有帮助
利用MVC模式开发Java应用程序
灰虫轨迹
03-12 1083
Java是一种面向对象的语言,是实现面向对象编程的强大工具。我们在实际编程中,应该运用并发挥其最大效能。但是,要利用面向对象编程思想,自己独立开发出好的Java应用程序,特别是大、中型程序,并不是一件简单的事情。正是基于面向对象编程思想,人们将实际中的各种应用程序,进行了大量的分析、总结,从而归纳出许多标准的设计模式。将这些设计模式合理地运用到自己的实际项目中,可以最大限度地减少开发过程中出现的设
EL表达式$JSTL
m0_71026716的博客
08-16 138
EL表达式$JSTL
MVC开发
qq_44336097的博客
04-23 360
我们通过前面的章节可以看到: Servlet适合编写Java代码,实现各种复杂的业务逻辑,但不适合输出复杂的HTML; JSP适合编写HTML,并在其中插入动态内容,但不适合编写复杂的Java代码。 能否将两者结合起来,发挥各自的优点,避免各自的缺点? 答案是肯定的。我们来看一个具体的例子。 假设我们已经编写了几个JavaBean: public class User { public long id; public String name; public School scho

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • mysql启动问题:Can‘t open the mysql.plugin table. Please run mysql_upgrade to create it. 11900
  • Redis中对key的操作命令 3020
  • 外键一定是另一个表的主键吗 2522
  • Servlet 2105
  • 网络通信- 1976

最新评论

  • LocalCache带过期时间的本地缓存

    CSDN-Ada助手: 不知道 Java 技能树是否可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • mysql启动问题:Can‘t open the mysql.plugin table. Please run mysql_upgrade to create it.

    hjhjhjy: 还是不行啊,启动服务那步无法启动

  • mysql启动问题:Can‘t open the mysql.plugin table. Please run mysql_upgrade to create it.

    _QWS_: 真他么的有用,牛比

  • JAVA 基础 IO流学习笔记

    CSDN-Ada助手: 推荐 Java 技能树:https://edu.csdn.net/skill/java?utm_source=AI_act_java

大家在看

  • Chromium源码阅读:从页面加载到元素展示(从<p>hello world</p>.html到界面上的hello world)(1) 1
  • ray框架训练阶段和 Serve 阶段对比
  • 在 Ubuntu 22.04上配置 redis 单节点服务器并启用远程连接 608
  • 【FFmpeg】SDL 音视频开发 ③ ( SDL 事件处理 | SDL_Event 数据结构分析 | 事件处理流程 | SDL 事件获取函数 | SDL_WaitEvent 函数 )
  • MySQL数据库应用熟练掌握数据查询的各种方法。

最新文章

  • LocalCache带过期时间的本地缓存
  • foreach批量插入大量数据太慢解决方法
  • AQS原理
2024年4篇
2023年15篇
2022年46篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司安康百度爱采购价格海西SEO按天扣费公司恩施建设网站推荐德州设计公司网站哪家好沙井模板制作多少钱铁岭网页设计推荐南联企业网站建设忻州营销网站报价凉山网络推广报价滨州网站优化报价新乡建站达州百搜标王价格横岗seo网站优化赣州建网站报价福田模板制作价格怒江网站优化按天计费哪家好阜阳设计公司网站哪家好拉萨百度爱采购公司淮安网站建设报价达州网页制作公司蚌埠关键词按天收费价格岳阳百姓网标王亳州关键词排名包年推广哪家好连云港设计网站公司景德镇网站设计模板多少钱龙岩seo通化网站优化按天计费公司渭南网站关键词优化推荐肇庆至尊标王价格德州百度网站优化排名公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化