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域对象
pageContext pageScope
request requestScope
session sessionScope
application applicationScope

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


<%
	// 模拟Servlet操作
	request.setAttribute("name", "zs");

	// 转发到EL.jsp页面
	session.setAttribute("name", "ww");
%>

<%
	String name = (String)request.getAttribute("name");
%>
<%=name %>


${requestScope.name }
${name }
${sessionScope.name }
${name }
10.1.2EL隐式对象
隐式对象 说明
param ${param.key}等价与request.getParameter(“key”);
pageContext 可以获取到其他的JSP对象信息
cookie 获取cookie中的值,${cookie.username}

说明:隐式对象不能省略


<%
	String username = request.getParameter("username");
	String password = request.getParameter("password");
%>
<%=username %>
<%=password %>

${param.username }
${param.password }

${username }
${password }


${pageContext.request }

${pageContext.request.contextPath }


10.1.3EL运算符
      • /(div) %(mod) ==(eq) !=(ne) >(gt) <(lt) >=(ge) <=(le) &&(and) ||(or) !(not) empty(判断为空)

${1 + 1 }
${1 div 1 } ${1 / 1 }

${5 mod 2 }

${1 == 1 }
${1 eq 1 }

${true and false }
${true && false }

${empty name }

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:choose

<% request.setAttribute("score", 71); %>

	
		A
	
	
		B
	
	
		C
	
	
		D
	
	
		E
	

c:foreach


<% 
	// 模拟C层操作
	ArrayList dogs = new ArrayList();
	dogs.add(new Dog(1,"小白","男"));
	dogs.add(new Dog(2,"小黑","男"));
	dogs.add(new Dog(3,"小花","男"));
	dogs.add(new Dog(4,"小华","女"));
	request.setAttribute("dogs", dogs);
%>

<%ArrayList list = (ArrayList) request.getAttribute("dogs"); %>
<%for(Dog d : list) { %>
	
<%=d.getDogid() %>
<%=d.getDogname() %>
<%=d.getDoggender() %>
<%} %>
${d.dogid }---${d.dogname }---${d.doggender }
10.2.2JSTL fmt库

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


<%
	Date d = new Date(System.currentTimeMillis());
	request.setAttribute("d", d);
%>






你可能感兴趣的:(JavaEE,java-ee,笔记,设计模式)