动态页面技术(JSP/EL/JSTL)

JSP技术

JSP:Java Server Page
在html中嵌入代码
JSP可以接收请求、返回响应,本质就是Servlet

JSP运行原理 --本质 - Servlet

JSP在第一次被访问时会被Web容器翻译成servlet,在执行过程
被翻译后的servlet在Tomcat的work目录中可以找到
XXX.jsp---->XXX_jsp.java:间接继承HttpServlet

JSP脚本和注释

JSP脚本

<%java代码%> -----内部的java代码翻译到service方法的内部
<%=Java变量或表达>-----表达式需要有结果,结果会直接显示在页面上,会被翻译成service方法内部 out.print()
<%!java代码%>-----会被翻译成servlet的成员的内容,成员变量/方法

JSP注释

注释的可见范围:jsp代码、翻译后的Java代码、html页面源码
< !–html注释-- >:jsp代码、翻译后的Java代码、html页面源码
//Java注释:jsp代码、翻译后的Java代码
<%–jsp注释%>:jsp代码

JSP 指令----<%@ %>

page指令 —属性最多的指令(一般指令默认)

<%@ page 属性1="…" 属性2="…" …%>
常用属性:
language:JSP脚本中可以嵌入的语言种类,默认且只能写java
pageEncoding:当前JSP文件本身的编码,内部可以包含conType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否JSP在翻译时自动创建session
import:导入java包
errorPage:当 当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面
buffer=“0kb”: 缓冲区大小

include指令

页面包含指令:包含子页面 - 静态包含
<%@include file=“被包含的文件地址”%>
A1.jsp:
在这里插入图片描述
B1.jsp
在这里插入图片描述
在这里插入图片描述

taglib指令

在JSP页面中引入标签库(jstl标签库、struts2标签库)
格式:< %@taglib uri=“标签库地址” prefix=“前缀”%>

JSP内置对象

在JSP脚本中可以直接使用的对象 --------------9个
request

<%
request.setAttribute("name", "wangwu");
%>

response

<%
response.setAttribute("name", "lisi");
%>

application

<%
application.setAttribute("name", "zhangsan");
%>

session

<%
session.setAttribute("name", "lisi");
%>

pageContext

<%
pageContext.setAttribute("name", "zhaoliu");
%>

config
out:输出流,有自己的缓冲区,和response缓冲区不一样,可以通过设置buffer="0kb"来关闭
page - this servlet
exception ->抓取到的异常 isErrorPage="true"时存在

pageContext:域对象 - 当前页面

pageContext可以操作其他的三个域
可以向指定的其他域中存取数据

setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
pageContext.setAttribute("","",PageContext.APPLICATION_SCOPE);

findAttribute(name)
--------------------------依次从四个域中,寻找name对应的值,直到找到为止,四个都没有返回null
--------------------------寻找次序从范围从小到大
pageContext域,request域,session域,application域
通过pageContext可以获得其他8个内置对象

pageContext.getRequest()
pageContext.getSession()

JSP动态标签:

动态包含:

<jsp:include page =""></jsp:include>

转发:

<jsp:forwad page=""></jsp:forwad>

静态包含和动态包含的区别:
静态包含:<%@ include file=""%>
----------------两个jsp在同一个java文件中被翻译
动态包含:<jsp:include page =""></jsp:include>
----------------两个jsp各自编译各自运行
在这里插入图片描述

EL技术

EL(Express Language)表达式可以嵌入在JSP页面内部,减少JSP脚本的编写,EL出现的目的是要替代JSP页面中脚本的编写。

EL表达式从域中取出数据

JSP脚本:<%=request.getAttribute(name)%>
EL表达式替代上面的脚本:${requestScope.name}//取代get方法

EL最主要的作用是获得四大域中的数据,格式${EL表达式}

EL获得pageContext域中的值:$(pageScope.key);
EL获得request域中的值:$(requestScope.key);
EL获得session域中的值:$(sessionScope.key);
EL获得application域中的值:$(applicationScope.key);
//EL获得Map<String,User>的值
<%
	Map<String,User> map = new HashMap<String,User>();
	map.put("user1", new User("lily",19));
	map.put("user2", new User("lucy",20));
	map.put("user3", new User("tom",21));
	map.put("user4", new User("jhon",22));
	session.setAttribute("userMap", map);
%>
${userMap.user2.age }<br>
//EL获得Map<String, List<User>>的值
<%
Map<String,List<User>> map2 = new HashMap<String,List<User>>();
List<User> list1 = new ArrayList<User>();
list1.add(new User("lily",19));
list1.add(new User("lucy",20));
List<User> list2 = new ArrayList<User>();
list2.add(new User("tom",21));
list2.add(new User("jhon",22));
map2.put("java",list1);
map2.put("c", list2);
session.setAttribute("classMap", map2);
%>
${classMap.c[1].name }

EL的内置对象 11个–了解

域:applicationScope/sessionScope/requestScope/pageScope
applicationScope .name ----- 取代了四个域中的getAttribute方法
${name}–取代了pageContext.findAttribute() --name是键值,与变量名无关

${实体类.属性名} -- 取代get方法,实体类的属性必须有get/set方法
${集合[index]} 
${map.key}
${1+1}---2
	<!--empty 判断依据,值是不是有效值,内容是否为空-->
		<!--为空 = true 不为空 = false
		null一定是空 ""/空集合 -> true-->
	${empty ""}
内置对象:
*${header.user-agent}->"-"非法字符 可以用 ${header['User-Agent']}代替,所有.可以用中括号代替
<!--cookie 相当于Map<name,Cookie>-->

pageContext:
	${pageContext.request.contextPath}获得应用名

JSTL

jstl必须要导库:
<%@taglib uri=""%>
导包:
在这里插入图片描述

JSTL核心库的常用标签

<c:if test=" ">标签

test=判断条件 -只能true或者false

	<c:if test="${empty user}"></c:if>

<c:forEach>标签

var = "i" ->等同于在当前页面定义了一个变量i,并且存入page域中
	<c:foreach begin="0" end="9" step="1" var="i">${i }</c:foreach>
//	for(String str : list){} --集合需要先存到list中
	<c:foreach items="${list }" var="str">${str }</c:foreach>

map迭代:

entrySet entry:键值对集合
<c:foreach var="entry" items="${map}">
	${entry.key} ----${entry.value}------key和value存在同一个entry集合中
</c:foreach>

四大作用域的总结:

page域:当前JSP页面范围
request域:一次请求
session域:一次会话
application域:整个web应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于Java Web开发的问题。EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)是用于在JSP页面中访问和操作JavaBean数据的技术。 首先,需要在JSP页面的头部引入ELJSTL的标签库: ```jsp <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ``` 然后,假设你有一个名为"Student"的JavaBean类,包含学生体质信息的各种属性,例如姓名、身高、体重等等。你需要在JSP页面中显示这些信息,可以使用EL表达式和JSTL标签来完成。 比如,要显示某个学生的姓名和身高,可以这样写: ```jsp <c:out value="${student.name}"/>的身高是<c:out value="${student.height}"/>cm。 ``` 其中,`${student.name}`和`${student.height}`是EL表达式,表示访问名为"student"的JavaBean对象的"name"和"height"属性值。 另外,如果你的页面需要遍历一个学生列表,并显示每个学生的信息,可以使用JSTL的<c:forEach>标签: ```jsp <c:forEach items="${students}" var="student"> <tr> <td><c:out value="${student.name}"/></td> <td><c:out value="${student.height}"/>cm</td> <td><c:out value="${student.weight}"/>kg</td> <!-- 其他属性 --> </tr> </c:forEach> ``` 其中,`${students}`是一个Java List对象,包含多个学生的信息。在循环中,每次迭代会将当前学生对象赋值给变量"student",然后可以使用EL表达式访问该学生的各种属性值。 这样,就可以利用ELJSTL技术实现学生体质信息管理系统页面数据的显示了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值