JavaEE学习笔记 2024-1-17 --请求转发和重定向、MVC设计模式

« 上一篇

个人整理非商业用途,欢迎探讨与指正!!


文章目录

    • 7.请求转发和重定向
      • 7.1重定向
      • 7.2请求转发
      • 7.3注意
    • 8.项目的地址
    • 9.MVC设计模式
      • 9.1MVC设计模式和三层架构的区别
        • 9.1.1MVC的三层
        • 9.1.2三层架构的三层
      • 9.2JavaWEB的两个时期
        • 9.2.1JSP Model1
        • 9.2.2JSP Model2
      • 9.3程序设计的六大原则
    • 10.EL表达式和JSTL脚本库
      • 10.1EL表达式
        • 10.1.1域对象
        • 10.1.2EL隐式对象
        • 10.1.3EL运算符
      • 10.2JSTL
        • 10.2.1JSTL C库
        • 10.2.2JSTL fmt库


7.请求转发和重定向

可以完成servlet向页面的跳转

7.1重定向

普通的页面跳转,发起者是response
response.sendRedirect(路径);
路径:可以是html,jsp,servlet等
重定向的应用:增删改

重定向是两次请求,url停留在最后一次请求

response.sendRedirect("MyServlet");

7.2请求转发

转发是服务器端行为
将第一个请求转发给第二次请求,将两个请求转换为一次
地址栏是第一次请求的位置

请求转发的应用:查询

//		请求转发 RequestDispatcher转发对象
request.getRequestDispatcher("MyServlet").forward(request, response);

7.3注意

servlet的页面跳转不用同时使用多次,一个Servlet中的页面跳转只有一次
关于传值:
 请求转发时使用request域
 重定向时使用session域

8.项目的地址

web项目有两个地址
 1.物理地址,源码存放的位置
 2.服务器地址,项目打包后的运行地址
  组成是由:项目名+WebContent下的代码组成的
  服务器下是在WEB-INF下的classes存放java的字节码

9.MVC设计模式

一种软件工程模式,把系统分为三层:Model(模型层) View(视图层) Controller(控制层)
MVC设计模式不是Java独有的
MVC设计模式被广泛的应用到Java框架中,例如:SpringMVC框架(基于Servlet),Structs2框架(基本Filter)等框架都是MVC设计模式的思想体现

9.1MVC设计模式和三层架构的区别

9.1.1MVC的三层

M:主要是负责数据交互和业务逻辑的,项目中的体现是DAO层和Service层;
 POJO实体类,在M层负责数据交互的载体(查询的结果,添加和修改的参数)
V:主要负责显示数据(给用户),和数据提交(给数据库),项目中的体现:WEB层(html,jsp)
C:捕获请求和控制请求的转发,调用Model层,与View进行交互,项目中的体现:Servlet,Controller

9.1.2三层架构的三层

架构思想
UI:页面层
BLL:业务逻辑层
DAL:数据访问层
三层架构是基于业务逻辑的,MVC设计模式是一种复合的设计模式,是写代码时要遵守的

9.2JavaWEB的两个时期

9.2.1JSP Model1

JSP刚发布的时间,服务器只有JSP页面,所有的内容都在JSP中完成(包括JDBC操作),将所有的内容都混在一起,对后期的维护和扩展非常不利
例如:JSP页面中有一个jsp:javaBean的标签,创建pojo类

9.2.2JSP Model2

清晰了MVC设计模式,我们可以快速的编写事务/业务,例如:转账,买书,购物车等功能

9.3程序设计的六大原则

单一职责原则 一个类或者一个接口或一个方法只完成一项功能
开闭原则 扩展开放,修改关闭
里氏替换原则 多态,子类可以扩展父类的功能,但不能改变原有父类的功能
依赖倒置原则 面向接口编写
接口隔离原则 将接口尽可能的细化,每个接口的功能尽量不要太多
迪米特原则 最少知道原则,降低类和类之间的耦合度

10.EL表达式和JSTL脚本库

10.1EL表达式

<% %>的替代品,简化JSP开发

语法:${}

10.1.1域对象
JSP域对象EL域对象
pageContextpageScope
requestrequestScope
sessionsessionScope
applicationapplicationScope

说明:EL中使用域对象时,可以省略域名,若在域中重名了,则从最小的域中获取数据

<body>
<%// 模拟Servlet操作request.setAttribute("name", "zs");// 转发到EL.jsp页面session.setAttribute("name", "ww");
%><%String name = (String)request.getAttribute("name");
%>
<%=name %><br>
${requestScope.name }
<!-- 表示域时,域对象可以省略 -->
<br>
${name }
<br>
${sessionScope.name }
<br><!-- 域中数据重名时,省略写法从小域中找 -->
${name }
</body>
10.1.2EL隐式对象
隐式对象说明
param${param.key}等价与request.getParameter(“key”);
pageContext可以获取到其他的JSP对象信息
cookie获取cookie中的值,${cookie.username}

说明:隐式对象不能省略

<body>
<%String username = request.getParameter("username");String password = request.getParameter("password");
%>
<%=username %>
<%=password %>
<!-- 请求参数中 -->
${param.username }
${param.password }
<!-- 这是在域中获取对象 -->
${username }
${password }<!-- 获取request对象 EL中的requestScope是域并不完全的等于request对象 -->
${pageContext.request }
<!-- 获取项目名 -->
${pageContext.request.contextPath }</body>
10.1.3EL运算符
      • /(div) %(mod) ==(eq) !=(ne) >(gt) <(lt) >=(ge) <=(le) &&(and) ||(or) !(not) empty(判断为空)
<body>
${1 + 1 }
${1 div 1 } ${1 / 1 }${5 mod 2 }${1 == 1 }
${1 eq 1 }${true and false }
${true && false }
<!-- 判断域中的name是否为null -->
${empty name }
</body>

10.2JSTL

配合EL一起使用,简化JSP页面的
在JSP1.0时代,EL是JSTL的一部分,随着MVC的出现,EL独立了
需要引入第三方jar包(JSTL标签库)

10.2.1JSTL C库

c库
 c:if 分支结构
 c:choose 多重分支结构
 c:foreach 循环结构

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

c:if

<% request.setAttribute("score", 70); %>
<c:if test="${score >= 60 }"><label>通过</label>
</c:if>
<c:if test="${score < 60 }"><label>不通过</label>
</c:if>

c:choose

<% request.setAttribute("score", 71); %>
<c:choose><c:when test="${score > 90 }">A</c:when><c:when test="${score > 80 }">B</c:when><c:when test="${score > 70 }">C</c:when><c:when test="${score > 60 }">D</c:when><c:otherwise>E</c:otherwise>
</c:choose>

c:foreach

<body>
<% // 模拟C层操作ArrayList<Dog> dogs = new ArrayList<Dog>();dogs.add(new Dog(1,"小白","男"));dogs.add(new Dog(2,"小黑","男"));dogs.add(new Dog(3,"小花","男"));dogs.add(new Dog(4,"小华","女"));request.setAttribute("dogs", dogs);
%>
<!-- v中 -->
<%ArrayList<Dog> list = (ArrayList<Dog>) request.getAttribute("dogs"); %>
<%for(Dog d : list) { %><div><%=d.getDogid() %></div><div><%=d.getDogname() %></div><div><%=d.getDoggender() %></div>
<%} %><hr>
<!-- items是在域中直接过去对应的数组或者集合  var将集合或者数组中的数据赋值给var的变量帮助遍历begin指定开始end指定结尾step步长
-->
<c:forEach items="${dogs }" var="d" begin="1" end="3" step="2">${d.dogid }---${d.dogname }---${d.doggender }<br>
</c:forEach>
</body>
10.2.2JSTL fmt库

主要使用的是日期格式转换
< !-- 引入fmt库 – >
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

<body>
<%Date d = new Date(System.currentTimeMillis());request.setAttribute("d", d);
%><fmt:formatDate value="${d }"/>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd"/>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd hh:mm:ss"/>
<fmt:formatDate value="${d }" pattern="hh:mm:ss"/>
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue中的插槽

在vue中&#xff0c;有的名词听着高大上&#xff0c;挺怪异的&#xff0c;比如插槽&#xff0c;就是slot&#xff0c;它的作用是为了解决组件之间写的内容在组件中的使用问题。 一、插槽的作用 <!DOCTYPE html> <html> <head><title>Vue中的插槽</…

接口测试-Mock测试方法

一、关于Mock测试 1、什么是Mock测试&#xff1f; Mock 测试就是在测试过程中&#xff0c;对于某些不容易构造&#xff08;如 HttpServletRequest 必须在Servlet 容器中才能构造出来&#xff09;或者不容易获取的比较复杂的对象&#xff08;如 JDBC 中的ResultSet 对象&#…

EHS管理系统为何需要物联网的加持?

EHS是Environment、Health、Safety的缩写&#xff0c;是从欧美企业引进的管理体系&#xff0c;在国外也被称为HSE。EHS是指健康、安全与环境一体化的管理。 而在国内&#xff0c;整个EHS市场一共被分成三类&#xff1b; 一类是EHS管培体系&#xff0c;由专门的EHS机构去为公司…

flume案例

在构建数仓时&#xff0c;经常会用到flume接收日志数据&#xff0c;通常涉及到的组件为kafka&#xff0c;hdfs等。下面以一个flume接收指定topic数据&#xff0c;并存入hdfs的案例&#xff0c;大致了解下flume相关使用规则。 版本&#xff1a;1.9 Source Kafka Source就是一…

有色金属市场分析:预计2023年产量增幅在3.5%左右

上周各有色金属品种走势接近&#xff0c;均呈现出周初持续走弱、最后两个交易日反弹的走势。影响有色金属行情的主线逻辑一个是美国债务上限谈判的进展情况&#xff0c;另一个是全球经济衰退的预期。上周四和上周五市场整体反弹&#xff0c;主要由于美国债务上限谈判出现进展&a…

【FAQ】NPM 引入本地依赖包

背景 npm 本地依赖包分为 本地文件夹类型 本地文件夹类型的依赖包适用于在编写插件的 dome 示例项目时使用&#xff0c;在无需将包发布到 npm 仓库的情况&#xff0c;做到实时编译&#xff0c;修改 本地压缩包类型 压缩包类型的依赖包适用于没有外网和没有 npm 私有仓库&…

day27 组合总和 组合总和Ⅱ 分割回文串

题目1&#xff1a;39 组合总和 题目链接&#xff1a;39 组合总和 题意 找出无重复元素的正整数数组candidates中元素和为目标数target的所有不同组合&#xff0c;同一个数字可重复选取 回溯 回溯三部曲&#xff1a; 1&#xff09;参数和返回值 2&#xff09;终止条件 3…

php基础学习之常量

php常量的基本概念 常量是在程序运行中的一种不可改变的量&#xff08;数据&#xff09;&#xff0c;常量一旦定义&#xff0c;通常不可改变&#xff08;用户级别&#xff09;。 php常量的定义形式 使用define函数&#xff1a;define("常量名字", 常量值);使用cons…

对有状态组件和无状态组件的理解及使用场景

&#xff08;1&#xff09;有状态组件 特点&#xff1a; ● 是类组件 ● 有继承 ● 可以使用this ● 可以使用react的生命周期 ● 使用较多&#xff0c;容易频繁触发生命周期钩子函数&#xff0c;影响性能 ● 内部使用 state&#xff0c;维护自身状态的变化&#xff0c;有状态组…

【C++】函数重载

C 中的函数重载&#xff08;Function Overloading&#xff09;是指在同一个作用域内&#xff0c;可以定义多个名称相同但参数列表不同的函数。通过函数重载&#xff0c;可以根据传递给函数的参数类型或数量的不同&#xff0c;选择适当的函数来执行。 函数重载的条件 C 函数重…

EasyDarwin计划新增将各种流协议(RTSP、RTMP、HTTP、TCP、UDP)、文件转推RTMP到其他视频直播平台,支持转码H.264、文件直播推送

之前我们尝试做过EasyRTSPLive&#xff08;将RTSP流转推RTMP&#xff09;和EasyRTMPLive&#xff08;将各种RTSP/RTMP/HTTP/UDP流转推RTMP&#xff0c;这两个服务在市场上都得到了比较多的好评&#xff0c;其中&#xff1a; 1、EasyRTSPLive用的是EasyRTSPClient取流&#xff…

信号量、互斥锁并发机制

区分&#xff1a; 信号&#xff1a;通讯机制 信号量&#xff1a;并发控制 一、信号量&#xff1a;基于阻塞的并发控制机制 a.定义信号量 struct semaphore sem; b.初始化信号量 void sema_init(struct semaphore *sem, int val); c.获得信号量P操作 int down(struct semap…

内网穿透的应用-如何使用Docker部署Redis数据库并结合内网穿透工具实现公网远程访问

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…

QT中QApplication对象有且只有一个

QT中QApplication对象有且只有一个 QApplication对象 QApplication对象 QApplication是应用程序对象 #include <QApplication> int main(int argc,char* argv[]); {//a对象在一个程序中有且只有一个&#xff0c;QT中要求必须有一个QApplication a&#xff08;argc,argv…

RT-Thread 17. 中断发送信号量后线程去处理信号量

1. 代码 //sem.c #include <rtthread.h> #include <rtdevice.h> #include "drv_gpio.h"#define THREAD_PRIORITY 25 #define THREAD_TIMESLICE 5#define LED3_PIN GET_PIN(B, 3) ALIGN(RT_ALIGN_SIZE) static char thread3_stack[1024]; static struct…

【Spring 篇】MyBatis多表操作:编织数据的交响乐

欢迎来到MyBatis的多表操作世界&#xff01;在这个充满交响乐的舞台上&#xff0c;我们将探索如何巧妙地编织多个数据表的数据&#xff0c;创造出一场旋律动听的数据交响曲。无需繁琐的SQL拼接&#xff0c;MyBatis让多表操作变得优雅而简单。让我们一起进入这个音乐殿堂&#x…

司铭宇老师:房地产电话营销培训:房地产电话销售话术与销售技巧:打造高转化率的电话营销策略

房地产电话营销培训&#xff1a;房地产电话销售话术与销售技巧&#xff1a;打造高转化率的电话营销策略 在房地产销售中&#xff0c;电话销售是一种常见且有效的营销手段。它不仅可以快速触达潜在客户&#xff0c;还能够建立起销售人员与客户之间的初步信任关系。然而&#xff…

大模型学习之书生·浦语大模型6——基于OpenCompass大模型评测

基于OpenCompass大模型评测 关于评测的三个问题Why/What/How Why What 有许多任务评测&#xff0c;包括垂直领域 How 包含客观评测和主观评测&#xff0c;其中主观评测分人工和模型来评估。 提示词工程 主流评测框架 OpenCompass 能力框架 模型层能力层方法层工具层 支持丰富…

C++从小白到初级工程师【个人学习笔记】

目录 1.背景2.基础二维数组概念二维数组定义方式 二维数组数组名称概念例子 函数的分文件编写概念示例 指针指针的基本概念指针变量的定义和使用 空指针和野指针空指针实例野指针实例 const修饰指针概念const修饰指针 --- 常量指针 指针和数组作用示例 指针和函数作用示例 指针…

项目解决方案:某城区(区县)社会面视频监控资源接入汇聚解决方案

目 录 一、概述 二、建设目标及需求 1.建设目标 2.需求分析 2.1 总体需求 2.2 需求细化 三、方案设计 1.设计依据 2.设计原则 3.设计方案 3.1.方案描述 3.2.组网说明 四、产品介绍 1.视频监控综合资源管理平台介绍 2.视频录像服务器和存储 2.1…