900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 尚硅谷最新版JavaWeb全套教程 java web零基础入门完整版(三)

尚硅谷最新版JavaWeb全套教程 java web零基础入门完整版(三)

时间:2022-08-07 14:31:27

相关推荐

尚硅谷最新版JavaWeb全套教程 java web零基础入门完整版(三)

EL表达式

什么是EL表达式

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%request.setAttribute("key", "值");%>表达式脚本输出key的值是:<%=request.getAttribute("key")%> <br>EL表达式输出key的值是:${key}</body></html>

这样输出的结果相同EL表达式在输出null值(比如key1)的时候,输出的是空串;jsp表达式脚本输出null值的时候,输出的是null字符串

EL表达式搜索四个域的顺序

EL表达式主要是在jsp页面中输出数据

主要是输出域对象中的数据

session中的数据浏览器关闭后才会消失,所以哪怕注释session后然后刷新页面,还是会输出session当四个域中都有相同的key的数据的时候,EL表达式会根据四个域的从小到大的顺序去进行搜索,找到就输出

EL表达式输出复杂的Bean对象

package com.atguigu.pojo;import java.util.Arrays;import java.util.List;import java.util.Map;public class Person {private String name;private String[] phones;private List<String> cities;private Map<String, Object> map;@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", phones=" + Arrays.toString(phones) +", cities=" + cities +", map=" + map +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public String[] getPhones() {return phones;}public void setPhones(String[] phones) {this.phones = phones;}public List<String> getCities() {return cities;}public void setCities(List<String> cities) {this.cities = cities;}public Map<String, Object> getMap() {return map;}public void setMap(Map<String, Object> map) {this.map = map;}public Person(String name, String[] phones, List<String> cities, Map<String, Object> map) {this.name = name;this.phones = phones;this.cities = cities;this.map = map;}public Person() {}}

<%@ page import="com.atguigu.pojo.Person" %><%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%Person person = new Person();person.setName("name111");person.setPhones(new String[]{"123", "456", "789"});List<String> cities = new ArrayList<String>();cities.add("beijin");cities.add("shanghai");cities.add("shenzheng");person.setCities(cities);Map<String, Object> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");person.setMap(map);pageContext.setAttribute("key_person", person);%>${key_person }</body></html>

<%@ page import="com.atguigu.pojo.Person" %><%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%Person person = new Person();person.setName("name111");person.setPhones(new String[]{"123", "456", "789"});List<String> cities = new ArrayList<String>();cities.add("beijin");cities.add("shanghai");cities.add("shenzheng");person.setCities(cities);Map<String, Object> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");person.setMap(map);pageContext.setAttribute("key_person", person);%>${key_person } <br>${key_person.name } <br>${key_person.phones } <br>${key_person.phones[1] } <br>${key_person.cities } <br>${key_person.cities[1] } <br>${key_person.map } <br>${key_person.map[key2]} <br></body></html>

注意EL表达式是不需要引入jstl.jar的注意到输出map是输出花括号包裹的键值对;输出List得到的是由[]包裹起来的;输出数组得到的是首地址通过实验,我们注意到 :EL表达式中,找的不是这个属性,而是找这个属性所对应的get方法

关系运算

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${12 == 12} 或 ${12 eq 12} <br></body></html>

逻辑运算

算术运算

empty运算

<%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%// 1、值为null值的时候,为空request.setAttribute("key1", null); // truerequest.setAttribute("key2", new Object()); // false ,非空!// 2、值为空串的时候,为空request.setAttribute("key3", ""); // truerequest.setAttribute("key4", " "); // false// 3、值是Object类型数组,长度为零时为空request.setAttribute("key5", new Object[]{}); // truerequest.setAttribute("key6", new Object[]{"12"}); // false// 4、list集合,元素个数为零List<String> list = new ArrayList<>();request.setAttribute("key7", list); // true// 5、map集合,元素个数为零Map<String, Object> map = new HashMap<String, Object>();request.setAttribute("key8", , map); // true%>${empty key1 }</body></html>

三元运算

${ 12 == 12 ? "123" : "456" }

点运算和中括号运算

.点运算,可以输出bean对象中某个属性的值

[]中括号运算,可以输出有序集合中某个元素的值

并且中括号运算还可以输出map集合中 key 里含有特殊字符的key的值(比如. 和 逻辑运算符)

不要忘了引号,单引号或者双引号都可以

11个EL隐含对象

pageScope、requestScope、sessionScope、applicationScope演示

要先在某个域中setAttribute之前直接${ key1 }是按四个域从小到大的顺序去搜索的如果使用比如${ applicationScope.key1 }我们就可以选择性地去搜索了

pageContext演示

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${pageContext } <br>1、协议<%--request.getScheme() 可以获取请求的协议--%><%=request.getScheme()%> <br> <%-- http --%>${pageContext.request.scheme } <br> <%-- 因为在el表达式中默认会找点后面内容所对应的"get"方法 --%> <%-- http --%>2、请求的服务器ip或域名<%=request.getServerName()%> <br> <%-- localhost --%>${pageContext.request.serverName } <br>3、服务器端口<%=request.getServerPort()%> <br>${pageContext.request.serverPort } <br>4、获取当前的工程路径<%=request.getContextPath()%> <br>${pageContext.request.contextPath } <br>5、获取请求方法<%=request.getMethod()%> <br>${pageContext.request.method } <br>6、获取客户端ip地址<%=request.getRemoteHost()%> <br>${pageContext.request.remoteHost } <br>7、获取会话的id编号<%=session.getId()%> <br>${pageContext.session.id } <br></body></html>

有同学就要问啦,不是说好的el表达式比表达式脚本简介嘛?有一个小技巧 :

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%pageContext.setAttribute("req", request);%>${req.scheme }</body></html>

其他EL隐含对象的示例

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${param }</body></html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>输出请求参数username的值 :${param.username }</body></html>

当一个参数有多个值时,用param只能得到其中一个,要得到全部的,应该用paramValues

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${paramValues } <br>${paramValues.username[0] } <br>${paramValues.hobby[0] } <br>${paramValues.hobby[1] } <br></body></html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${header } <br>${header['User-Agent'] } <br> <%-- 注意不能用header.User-Agent --%></body></html>

如果有多个值的时候用headerValues,但是直接得到的是数组,还要配合下标使用

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${headerValues['User-Agent'] } <br> <%-- 这样直接得到的是个数组,而不是具体内容 --%>${headerValues['User-Agent'][0] } <br></body></html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${cookie } <br>获取cookie的名称 :${cookie.JSESSIONID.name } <br> <%-- 调用getName()方法 --%></body></html>

要先在web.xml中配置参数,用initParam才有值

JSTL标签库

JSTL标签库的介绍

标签库的使用步骤

在web-inf目录下创建一个lib目录用来放jar包

还要 Add as Library,记得选 模块库,不是项目库

set标签

其中,page是默认值

<%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>保存之前:${requestScope.abc } <br><c:set scope="request" var="abc" value="abcValue" />保存之后:${requestScope.abc } <br></body></html>

if标签

<%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><c:if test="${ 12 == 12 }"><h1>12 == 12</h1></c:if></body></html>

choose,when,otherwise标签

<%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%request.setAttribute("height", 180);%><c:choose><c:when test="${ requestScope.height > 190 }"><h2>小巨人</h2></c:when><c:when test="${ requestScope.height > 180 }"><h2>很高</h2></c:when><c:when test="${ requestScope.height > 170 }"><h2>还可以</h2></c:when><c:otherwise><h2>剩下小于170的情况</h2></c:otherwise></c:choose></body></html>

使用foreach遍历1-10输出

<%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><c:forEach begin="1" end="10" var="i"><h1> ${i } </h1></c:forEach></body></html>

<%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><table><c:forEach begin="1" end="10" var="i"><tr><td>第${i }</td></tr></c:forEach></table></body></html>

使用foreach遍历Object数组

<%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%request.setAttribute("arr", new String[]{"123", "456", "789"});%><c:forEach items="${ requestScope.arr }" var="item">${item } <br></c:forEach></body></html>

使用foreach遍历map集合

<%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%Map<String, Object> map = new HashMap<String, Object>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");request.setAttribute("map", map);%><%-- for ( Map.Entry<String, Object> entry : map.entrySet()) --%><c:forEach items="${ requestScope.map }" var="entry"><h1>${entry } : ${entry.key } = ${entry.value }</h1></c:forEach></body></html>

使用foreach遍历list集合

<%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page import="java.util.List" %><%@ page import="com.atguigu.pojo.Student" %><%@ page import="java.util.ArrayList" %><%@ taglib prefix="c" uri="/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><%List<Student> studentList = new ArrayList<Student>();for (int i = 1; i <= 10; i ++ )studentList.add(new Student(i, "username" + i, "pass" + i, 18 + i, "phone" + i));request.setAttribute("stus", studentList);%><table><tr><th>编号</th><th>用户名</th><th>密码</th><th>年龄</th><th>电话</th><th>操作</th></tr><c:forEach items="${ requestScope.stus }" var="stu"><tr><td>${stu.id }</td><td>${stu.username }</td><td>${stu.password }</td><td>${stu.age }</td><td>${stu.phone }</td><td> 删除、修改 </td></tr></c:forEach></table></body></html>

foreach标签所有属性组合使用介绍

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。