商品信息的显示的案例、EL表达式、JSTL标准标签库、MVC开发模式模式(高内聚低耦合)、面向对象设计的六大基本原则

版权声明:非经本人允许,禁止转载 https://blog.csdn.net/Kfie66/article/details/83022381

 

案例一,商品信息的显示的案例

一,需求

​ 连接数据库 ,从数据库中获得商品的信息,并且显示到页面上.

二,技术分析

在jsp中使用Java代码,的第一大目的:获取域对象中的数据

1,EL表达式

1.1.El概述

​ Expression Language:表达式语言,jsp2.0之后内置在jsp里面

​ 目的:为了使JSP写起来更加简单。(代替脚本 <% %>)

1.2.EL语法

​ ${EL表达式 }

1.3.EL表达式的用途

​ 1.获取数据. 获取的是域对象中存储的数据

​ 2.EL执行运算(了解)

​ 3.获得常用WEB开发的11个对象.(重要)

1.4.El获取域对象中的数据(最重要的作用)

1.4.1获取简单数据类型数据

​ 语法:${pageScope|requestScope|sessionScope|applicationScope.属性名};

​ 快捷写法:${属性名 }

1.4.2获取数组

​ 语法:${数组属性名[index]};数组属性名就是存入域对象里面的key

1.4.3获取list

​ 语法:${list属性名[index]};list属性名就是存入域对象里面的key

1.4.4获取Map

​ 语法:${属性名.键},map属性名就是存入域对象里面的key

1.4.5 获取bean

​ 语法:${bean的属性名(也就是存入的key值).javabean属性}

[ ] 和 . 方式的区别

​ 只要是能用.的地方都可以使用 [ ]

​ 带下标(数组,list)必须要用 [ ]

​ 有特殊字符的要用 [ ]

  • 获取的是四个域范围的值,存入四个域中

  • 能获取到则获取,获取不到返回" "字符串 ,不是返回null

  • ${属性名 }:依次从pageScope,requestScope|sessionScope|applicationScope中查找指定的属性

    ​ 若找到,立即返回,且结束该次查找

    ​ 若找不到返回""

特殊情况:

<%
	request.setAttribute("aa.bb", "ccc");

	Map map = new HashMap();
	map.put("a.b", "c");
	
	request.setAttribute("m", map);
%>
<!--获取不到  -->
${aa.bb }
<!--使用如下方式  -->
${requestScope["aa.bb"] }
  <!--获取不到  -->
  ${m.a.b }

  <!--使用如下方式  -->

  ${m["a.b"] }

1.4.EL执行运算(了解)

1.4.1算数运算

​         + , - , * , / 

  • + 不能拼接字符串.

1.4.2逻辑运算(掌握)

​ <   >  =   <=   !=   ==

1.4.3关系运算

​ &&    ||    !

1.4.4非空判断(重要)

​ empty,判断集合长度是否为0,判断一个对象是否为null, 判断一个字符串是否为""

​ not empty

​ 语法: ${empyt 属性名};属性名 就是域对象里面的key值

<body>
	<%
	request.setAttribute("a", "1");
	request.setAttribute("b", 2);
	
	Product product = null;
	Product product1 = new Product();
	request.setAttribute("p", product);
	request.setAttribute("p1", product1);
	
	%>

	${10+5 }//结果15
	${a+b }//结果3,el里面+只能作加法,不能进行字符串拼接
	
	${empty p}//true
	
	${empty p1}//false

</body>

注意:

​ + 只能做加法运算,不能拼接字符串

1.5.EL获取WEB开发的对象 11个

  • 四个Scope(了解),可以使用便捷获取域对象中存放数据的方法代替

pageScope,requestScope,sessionScope,applicationScope
  • 获取请求参数参数相关的 (重点掌握)

    param.参数名 , 作用相当于request.getParameter() name=zs&age=18

    paramValues,作用相当于request.getParameterValues(name)

  • 获取请求头信息相关的(了解)

    header

    headerValues

  • 全局初始化参数相关 (了解),相当于servletContext.getInitParameter()

    initParam;

  • cookie (重点掌握)

    ​ 获取的也是一个map集合

    ​ map<String cookie的名称,Cookie 对象>

    ​ Cookie c = new Cookie("lastTime","1231");

    ​ response.addCookie(c);

    ​ 相当于将c放入了map中

    ​ map.put("lastTime",c);

    ​ 获取值:​

    ​ ${cookie.lastTime.value}

  • pageContext:相当于jsp里面的pageContext对象. (重点掌握)

    ​ jsp里面: pageContext.getRequest(); //获得request对象

    ​ request.getContextPath(); //动态获得项目名

    ${pageContext.request.contextPath}  // 在JSP页面动态获得项目名
    

    ${pageContext.request.contextPath}:在jsp页面中动态的获取项目路径

2,JSTL标签库

2.1.JSTL概述

​ JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的

2.2.JSTL五大标签库

2.3使用步骤:

​ 导入jar包

​ 在页面上导入标签库,<%@taglib prefix="" uri=""%>

2.4.核心库 core

  • 条件标签if  choose

    if标签语法

    <c:if test="el表达式${..}" [var="给之前的表达式的结果起个名字"] [scope="将结果保存在那个域中 默认pageContext"]>
    </c:if>
    

    eg:

    	<%request.setAttribute("a", 3); %>
    
    	<c:if test="${a>1}" var="i" scope="page">
    		a大于1
    	</c:if>
    	
    	<c:if test="${a<=1}">
    		a不大于1
    	</c:if>
    	
    	${i }

choose标签:

​ eg:

	<%
		request.setAttribute("a", "前端");
	%>

	<c:choose> 
		<c:when test="${a == 'java' }">
			java
		</c:when>

		<c:when test="${a == 'Android' }">
			Android
		</c:when>


		<c:when test="${a == 'IOS' }">
			IOS
		</c:when>
		
		<c:otherwise>
			其它
		</c:otherwise>
	</c:choose>
  • foreach(重点)

    ​ 普通的循环:

    ​ 迭代器:

     c:forEach中的varStatus属性。

         指向一个字符串,该字符串引用一个对象。  map.put("vs",一个对象);

        这个对象记录着当前遍历的元素的一些信息:

           index:返回索引。从0开始

             count:返回计数。从1开始

           last:是否是最后一个元素

             first:是否是第一个元素

三,思路分析

1.拷贝jar包,工具类,准备好数据库表。

2.在index.jsp添加一个a标签,点击 跳转到ProductsServlet

3.写一个ProductsServlet,里面调用ProductService中的查找所有商品信息的方法

4.写一个ProductService,里面定义一个findAllProducts方法。在该方法中调用ProductDao中的方法去数据库中查询所有商品信息

5.写一个ProductDao类,里面定义一个方法,查找并返回所有商品信息

6.在ProductServlet中获取到商品集合,并将商品集合存放到session中,重定向到list.jsp来进行展示

7.写一个list.jsp文件,在list.jsp中使用EL表达式获取商品集合并且使用JSTL中的foreach标签遍历展示商品信息

四,代码实现

  • product_list.jsp

	<center>
		<h1>商品列表</h1>
		<table border="1px" width="500px">

			<tr>
				<td>商品Id</td>
				<td>商品名称</td>
				<td>商品价格</td>
				<td>商品描述</td>

			</tr>

			<c:forEach items="${li }" var="p">
				<tr>
					<td>${p.pid }</td>
					<td>${p.pname }</td>
					<td>${p.price }</td>
					<td>${p.pdesc }</td>
				</tr>
			</c:forEach>
		</table>


	</center>

五,开发模式(MVC)

1.JSP的开发模式一(了解)

​ JSP + JavaBean

​ javaBean:实体类。特点:私有化的属性、公共的getter setter方法、无参的构造。

2.JSP的开发模式二

​ JSP + Servlet + JavaBean 称为MVC的开发模式.

​ MVC:开发模式、

​ M:model 模型 (javaBean:封装数据)

​ V:View 视图  (JSP:展示数据)

​ C:controller 控制器 (Servlet:处理逻辑代码,做为控制器)

3.三层思想:高内聚,低耦合

三层架构包名:

简单:

​ com.itheima.web.servlet

​ com.itheima.service

​ com.itheima.dao

​ com.itheima.domain/bean

​ com.itheima.utils

​ ....

复杂: 复杂项目

​ com.itheima.项目名.模块名.web.servlet

​ com.it.项目名.模块名.service

​ com.it.项目名.模块名.dao

高内聚和低耦合

  • 内聚性:模块内的各部分代码之间的关联性。

  • 耦合性:各个模块之间的代码的关联性。

写项目目标

  • 1.可插入性强。

  • 2.可扩展性强。

  • 3.健壮性

面向对象设计的六大基本原则

  • 1.单一职责原则

  • 2.开放封闭原则:对扩展开放,对修改封闭

  • 3.依赖倒置原则:依赖抽象不依赖具体

  • 4.接口隔离原则,"接口适配器模式"

  • 5.里氏替换原则

  • 6.迪米特法则:与一个类相关联的类要越少越好。也叫做最少知道原则。

猜你喜欢

转载自blog.csdn.net/Kfie66/article/details/83022381
今日推荐