EL表达式和JSTL概述
java Bean规范
java中成员变量使用类Integer
private Integer count;
java Bean的创建
创建java Bean: BookTest.java
package com.example.elandjstl.bean;public class BookTest {//java中成员变量使用类Integerprivate Integer count;private Boolean isBuy;//无参构造方法public BookTest() {}public BookTest(Integer count, Boolean isBuy) {this.count = count;this.isBuy = isBuy;}public Integer getCount() {return count;}public void setCount(Integer count) {this.count = count;}public Boolean getIsBuy() {return isBuy;}public void setBuy(Boolean buy) {isBuy = buy;}}
在jsp中简单使用Java Bean
1.java代码
2.jsp:useBean方式:只赋值常量值:整型,小数,字符串等,如果是java的数组之类的直接使用java代码
总代码:
<%@ page import="com.example.elandjstl.bean.BookTest" %><%--Created by IntelliJ IDEA.User: DQDate: 2021/11/1Time: 14:18To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%//使用java bean创建//1.java代码,但尽量在jsp中不使用java代码BookTest book1=new BookTest();book1.setBuy(true);book1.setCount(10);out.println(book1.getIsBuy());//输出out.println(book1.getCount());//输出
%><br>
<%--2.jsp:useBean--%>
<%--实例化--%>
<%--id:对象,class:类--%>
<jsp:useBean id="book2" class="com.example.elandjstl.bean.BookTest"/>
<%--为对象属性赋值--%>
<%--name:对象名 property:属性 value:赋值--%>
<jsp:setProperty name="book2" property="count" value="888"/>
<%--获取属性,直接就输出在浏览器了--%>
<jsp:getProperty name="book2" property="count"/></body>
</html>
jsp中定义java bean
1.java 代码
2.jsp:useBean
代码:
<%--定义--%>
<%//使用java bean创建//1.java代码,但尽量在jsp中不使用java代码BookTest book1 = new BookTest();book1.setCount(10);%>
<%--2.jsp:useBean--%>
<%--实例化--%>
<%--id:对象,class:类--%>
<jsp:useBean id="book2" class="com.example.elandjstl.bean.BookTest"/>
<%--为对象属性赋值--%>
<%--name:对象名 property:属性 value:赋值--%>
<jsp:setProperty name="book2" property="count" value="888"/>
jsp中获取java bean
1.java代码
2.jsp表达式
3.jsp动作标签
不能获取java中定义的对象book1,并且会报错
4.EL表达式
不能获取java中定义的对象book1,但显示时,不会出现任何内容,不会轻易报错
访问代码:
<%--访问--%>
<%out.print("java代码方式:<br>");out.print("book1-count:" + book1.getCount() + "<br>");//输出out.print("book2-count:" + book2.getCount() + "<br>");//输出
%>jsp表达式方式:<br>
book1.getCount()=<%=book1.getCount()%><br>
book2.getCount()=<%=book2.getCount()%><br>jsp:getProperty动作元素:<br>
<%--获取属性,直接就输出在浏览器了--%>
<%--<jsp:getProperty name="book1" property="count"/>报错,动作标签不能访问java中定义的对象--%>
<br>
<jsp:getProperty name="book2" property="count"/>EL表达式:<br>
book1-count:${book1.count}<br>
book2-count:${book2.count}<br>
jsp中java bean定义和获取总代码
<%@ page import="com.example.elandjstl.bean.BookTest" %><%--Created by IntelliJ IDEA.User: DQDate: 2021/11/1Time: 14:18To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--定义--%>
<%//使用java bean创建//1.java代码,但尽量在jsp中不使用java代码BookTest book1 = new BookTest();book1.setCount(10);%>
<%--2.jsp:useBean--%>
<%--实例化--%>
<%--id:对象,class:类--%>
<jsp:useBean id="book2" class="com.example.elandjstl.bean.BookTest"/>
<%--为对象属性赋值--%>
<%--name:对象名 property:属性 value:赋值--%>
<jsp:setProperty name="book2" property="count" value="888"/><%--访问--%>
<%out.print("java代码方式:<br>");out.print("book1-count:" + book1.getCount() + "<br>");//输出out.print("book2-count:" + book2.getCount() + "<br>");//输出
%>jsp表达式方式:<br>
book1.getCount()=<%=book1.getCount()%><br>
book2.getCount()=<%=book2.getCount()%><br>jsp:getProperty动作元素:<br>
<%--获取属性,直接就输出在浏览器了--%>
<%--<jsp:getProperty name="book1" property="count"/>报错,动作标签不能访问java中定义的对象--%>
<br>
<jsp:getProperty name="book2" property="count"/>EL表达式:<br>
book1-count:${book1.count}<br>
book2-count:${book2.count}<br></body>
</html>
EL表达式
获取Seervlet域对象
在jsp代码中书写:
不会轻易报错,只是显示时不会出现任何内容
如:
不能获取java中定义的对象book1,但显示时,不会出现任何内容
EL表达式的book2.count实际上是调用java bean的getter方法
EL表达式的请求转发案例
ElServlet1.java代码:
@WebServlet(name = "ElServlet1", value = "/ElServlet1")
public class ElServlet1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setAttribute("username", "dq");request.setAttribute("password", "password");//请求转发RequestDispatcher requestDispatcher = request.getRequestDispatcher("/elServlet1.jsp");requestDispatcher.forward(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
elServlet1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
1、第一种方式获取:<br>
username=<%=request.getAttribute("username")%><br>
password=<%=request.getAttribute("password")%><br>
<hr>2、El表达式获取域对象:<br>
<%--字符串--%>
<%--输出结果:
El表达式获取域对象:
username=username
password=password
--%>
username=${"username"}<br>
password=${"password"}<br><%--输出结果:
username=dq
password=password
--%>
username=${username}<br>
password=${password}<br>等效于:
<%--输出
username=dq
password=password
--%>
username=${requestScope.username}<br>
password=${requestScope.password}<br>
</body>
</html>
EL表达式的标识符
所有自己命名的地方
命名规则:
1.不能以数字开头;
2.不能是EL中的保留字,如and、or、gt;
3.不能是EL隐式对象,如pageContext;
4.不能包含单引号(’)、双引号(")、减号(-)和正斜线等特殊字符。
EL表达式的保留字/关键字
保留字就是编程语言里事先定义好并赋予了特殊含义的单词,和其他语言一样,EL表达式中也定义了许多保留字,如false、not等:
and,or,not:与或非
ne不等于,eq等于
le小于 ge大于
lt小于等于 gt大于等于
EL表达式的常量
说明:
EL表达式的运算符
点运算符
取对象的属性,使用.而不是get
方括号运算符
.运算符不能访问具有特殊字符的属性
方括号访问数组对象的元素
使用案例1:
定义:
输出:
使用案例2:
算术运算符
比较运算符
逻辑运算符
empty运算符
案例:返回结果为true或false
条件运算符
注意
EL表达式运算符总结
代码案例:
<jsp:useBean id="book" class="com.example.elandjstl.bean.BookTest"/>
<jsp:setProperty name="book" property="count" value="77"/>el点运算符:${book.count}<br>
el方括号运算符:${book["count"]}<br>
el算术运算符:-3/1=${-3/1}<br>
el比较运算符:-3>1=${-3>1}<br>
el逻辑运算符:${(3-2==1)&&(8+5==13)}<br>
el empty:${empty book.count}<br>
el三目运算符:${("if"=="IF")?"great":"bad"}<br><%--输出
el点运算符:77
el方括号运算符:77
el算术运算符:-3/1=-3.0
el比较运算符:-3>1=false
el逻辑运算符:true
el empty:false
el三目运算符:bad
--%>
EL表达式的隐式对象
pageContext对象
案例:
代码:
el隐式对象:pageContext
获取当前项目的路径:${pageContext.request.contextPath}<br>
获取请求的URL:${pageContext.request.requestURI}<br/><%--输出:
el隐式对象:pageContext 获取当前项目的路径:/ELAndJSTL_war_exploded
获取请求的URL:/ELAndJSTL_war_exploded/elTest3.jsp
--%>
web域对象
案例:
代码:
el隐式对象:web域相关的对象:<br/>
<%//设置不同web域下的属性pageContext.setAttribute("page","pageContext");request.setAttribute("request","request");session.setAttribute("session","session");application.setAttribute("application","application");
%>
<%--通过Scope获取域对象的属性--%>
<%--${page}:可以直接这样,从范围小的开始搜索;
pageScope这样的web域对象是为了避免有重名的,因为不同域下的有重名的就会先获取最小范围的--%>
pageScope.page=${pageScope.page}=====${page}<br/>
requestScope.request=${requestScope.request}=====${request}<br/>
sessionScope.session=${sessionScope.session}=====${session}<br/>
applicationScope.application=${applicationScope.application}====${application}<br/><%--输出:
el隐式对象:web域相关的对象:
pageScope.page=pageContext=====pageContext
requestScope.request=request=====request
sessionScope.session=session=====session
applicationScope.application=application====application
--%>
param和paramValues
param案例:获取表单的提交的数据并显示
浏览器显示:
jsp代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%--自己跳转到自己--%>
<form action="elTest4.jsp" method="get"><br/>name:<input type="text" name="name"><br/>age:<input type="text" name="age"><br/>age:<input type="text" name="age"><br/>love:<input type="text" name="love"><br/><%-- 空格--%><input type="submit" value="提交"/> <input type="reset" value="重填"><hr/><%--通过param.name:获取表单提交的值--%>name:${param.name}<br/><%--paramValues.age[0]:获取name名称相同的不同对象--%>age1:${paramValues.age[0]}<br/>age2:${paramValues.age[1]}<br/>love:${param.love}<br/></form></body>
</html>
cookie对象
Cookie案例:
代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--el表达式:Cookie--%>
<%//添加Cookieresponse.addCookie(new Cookie("username","dq"));
%>
<%--等同于: request.getCookies()--%>
获取Cookie对象:${cookie.username}<br/><%--等同于:cookie.getName()--%>
获取Cookie对象的名称:${cookie.username.name}<br/><%--等同于: cookie.getValue()--%>
获取Cookie对象的值:${cookie.username.value}<br/><%--输出:
获取Cookie对象:javax.servlet.http.Cookie@7a01e62a
获取Cookie对象的名称:username
获取Cookie对象的值:dq
--%>
</body>
</html>