JSP&EL&JSTL

JSP

0. 基础使用:
	1. 概念: 
		* Java Server Pages: java服务器端页面
				* 可以理解为: 一个特殊的页面, 其中既可以直接定义html标签, 有可以定义java代码
				* 用于简化书写!!!
          

    2. 原理
        * JSP本质上就是一个Servlet


    3. JSP的脚本: JSP定义Java代码的方式
        1. <% 代码 %>: 定义的Java代码, 在service方法中. service方法中可以定义什么, 该脚本中就可以定义什么

        2. <%! 代码 %>: 定义的Java代码, 在jsp转换后的java类的成员位置. 类的成员位置可以定义什么, 该脚本就可以定义什么

        3. <%= 代码 %>: 定义的Java代码, 会输出到页面上, 输出语句中可以定义什么, 该脚本就可以定义什么.


    4. JSP的内置对象:
        * 在jsp页面中不需要获取和创建, 可以直接使用的对象.
        * jsp一共有9个内置对象.
        * 其中三个:
            * request
            * response
            * out: 字符输出流对象. 可以将数据输出到页面上. 和response.getWriter()类似
                * response.getWriter()和out.write()的区别:
                    * 在tomcat服务器真正给客户端做出响应之前, 会先找response缓冲区数据, 再找out缓冲区数据.
                    * response.getWriter()数据输出永远在out.write()之前
                    
                    
1. 指令:
	* 作用:用于配置JSP页面,导入资源文件
    * 格式:
        <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
    * 分类:
        1. page: 配置JSP页面的
             * contentType:等同于response.setContentType()
                  1. 设置响应体的mime类型以及字符集
                  2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
             * import:导包
             * errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
             * isErrorPage:标识当前页面是否是错误页面。
                  * true:是,可以使用内置对象exception
                  * false:否。默认值。不可以使用内置对象exception


        2. include: 页面包含的。导入页面的资源文件
            * <%@include file="top.jsp"%>
        3. taglib: 导入资源
            * <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
            * prefix:前缀,自定义的
            
            
2. 注释:
    1. html注释:
        <!-- -->:只能注释html代码片段
    2. jsp注释:推荐使用
        <%-- --%>:可以注释所有
		
		
3. 内置对象:
	* 在jsp页面中不需要创建,直接使用的对象
    * 一共有9个:
            变量名					真实类型						作用
          * pageContext				PageContext					当前页面共享数据,还可以获取其他八个内置对象
          * request					HttpServletRequest			一次请求访问的多个资源(转发)
          * session					HttpSession					一次会话的多个请求间
          * application				ServletContext				所有用户间共享数据
          * response				HttpServletResponse			响应对象
          * page					Object						当前页面(Servlet)的对象  this
          * out						JspWriter					输出对象,数据输出到页面上
          * config					ServletConfig				Servlet的配置对象
          * exception				Throwable					异常对象

MVC: 开发模式

1. jsp演变历史
			1. 早起只有Servlet, 只能使用response输出标签数据, 非常麻烦
			2. 后来又jsp, 简化Servlet的开发, 如果过度使用jsp, 在jsp中即写大量的java代码, 有写html表, 造成难于维护, 难于分工协作
			3. 在后来, java的web开发, 借鉴MVC开发模式, 是的程序的设计更加合理性
			
2. 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
					   5. 演示:
						   算术运算符
			               ${3 + 4}: 7
			               ${3 / 4}: 0.75
			               ${3 div 4}: 0.75
			               ${3 % 4}: 3
			               ${3 mod 4}: 3
			               ${3 * 4}: 12
			               比较运算符
			               ${3 > 4}: false
			               ${3 < 4}: true
			               ${3 >= 4}: false
			               ${3 <= 4}: true
			               ${3 == 4}: false
			               ${3 != 4}: true
			               逻辑运算符
			               ${3 > 4 && 3 < 4}: false
			               ${3 > 4 || 3 < 4}: true
			               ${!(3 > 4)}: true
			               ${3 > 4 and 3 < 4}: false
			               ${3 > 4 or 3 < 4}: true
			               ${not(3 > 4)}: true
		2. 获取值
				1. el表达式只能从域对象中获取指定键的值
				2. 语法:
						1. ${域名称.键名}: 从指定域中获取指定键的值
			            	* 域名称:
									1. pageScope				--> 		pageContext
									2. requestScope 			-->			request
									3. sessionScope 			-->			session
									4. applicationScope 		-->			application(ServletContext)		
			                * 举例: 在request域中存储了name=张三
			                * 获取: ${requestScope.name}	

						2. ${键名}: 表示一次从最小的域中查找是否有该键对应的值, 直到找到为止.
              
			            3. 获取对象、List集合、Map集合的值
			            		1. 对象: ${域名称.键名.属性名}
										* 本质上会去调用对象的getter方法
													
								2. List集合: ${域名称.键名[索引]}
								
								3. Map集合:
										* ${域名称.键名.key名称}
										* ${域名称.键名["key名称"]}
		3. 隐式对象:
				* el表达式中有11个隐式对象
				* pageContext:
						1. 获取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语句
			* c:if标签
		            1. 属性:
		               * test必须属性, 接受boolean表达式
		                    * 如果表达式为true, 则显示if标签体内容, 如果为false, 则不显示标签体内容
		
		                    * 一般情况下, test属性值会结合el表达式一起使用
		                    
		            2. 注意: 
						* c:if标签没有else情况, 想要else情况, 则可以在定义一个c:if标签	
						
					3. 代码:
						<c:if test="${not empty requestScope.list}">
		                    <h1>遍历集合.....</h1>
		                </c:if>
            
    2. choose			: 相当于java代码的switch语句
    	1. 域中存储一数字
        2. 使用choose标签取出数字        相当于switch声明
        3. 使用when标签做数字判断         相当于case
        4. otherwise标签做其他情况的声明  相当于 default
      	5. 代码:
      		<c:choose>
                <c:when test="${number == 1}"> 星期一 </c:when>
                <c:when test="${number == 2}"> 星期二 </c:when>
                <c:when test="${number == 3}"> 星期三 </c:when>
                <c:when test="${number == 4}"> 星期四 </c:when>
                <c:when test="${number == 5}"> 星期五 </c:when>
                <c:when test="${number == 6}"> 星期六 </c:when>
                <c:when test="${number == 7}"> 星期七 </c:when>
                <c:otherwise> 数字输入有误 </c:otherwise>
            </c:choose>
      
    3. 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开始
                        
        3. 代码:
			<c:forEach begin="1" end="10" step="2" var="i" varStatus="s">
                ${i}--${s.index}--${s.count}<br />
            </c:forEach>
            
            <c:forEach var="l" varStatus="s" items="${list}">
                ${l} -- ${s.index} -- ${s.count}<br />
            </c:forEach>
                        
5. 练习:
		* 需求: 在request域中有一个存有user对象的List集合. 需要使用jstl+el将list集合数据展示到jsp页面的表格table中
		
		<table>
	        <c:forEach var="user" varStatus="s" items="${list}">
	            <tr>
	                <td>姓名: ${user.name}</td>
	                <td>年龄: ${user.age}</td>
	                <td>生日: ${user.birStr}</td>
	            </tr>
	        </c:forEach>
	    </table>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只因为你温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值