EL表达式
传统获取JavaBean属性必须实例化,且需要强制类型转换; EL即表达式语言,可以通过EL的功能替代传统的复杂流程
EL的语法
${ EL 表达式 }
${ bean.属性 }
EL的运算符
${ bean.属性 }
${ bean[属性] }
变量属性范围名称
pageScope : 整个page页面
requestScope : request对象
sessionScope : session对象
applicationScope : application对象
注册页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>注册页面</title>
</head>
<body>
<form action="submit.jsp" method="post">
编号:<input type="text" name="stuno" /><br /><br />
姓名:<input type="text" name="sname" /><br /><br />
年龄:<input type="text" name="age" /><br /><br />
<input type="submit" />
</form>
</body>
</html>
JavaBean
package com.entity;
/*
* JavaBean实体类:封装数据
*/
public class Student {
// 私有属性
private int stuno ;
private String sname;
private int age ;
// 有参构造方法
public Student(int stuno, String sname, int age) {
this.stuno = stuno;
this.sname = sname;
this.age = age;
}
// 公有的方法
public int getStuno() {
return stuno;
}
public void setStuno(int stuno) {
this.stuno = stuno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
服务器处理页面和响应页面
<%@ page language="java" import="java.util.*,com.entity.Student" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>服务端处理</title>
</head>
<body>
<%
// 通过请求对象获取注册页面的数据
int stuno = Integer.parseInt(request.getParameter("stuno"));
String sname = request.getParameter("sname");
int age = Integer.parseInt(request.getParameter("age"));
// 将获取到的数据存入对象中
Student stu = new Student(stuno, sname, age);
// 将stu对象存入session会话对象中---名字为key,存入的内容的stu对象
session.setAttribute("key", stu);
// 进行响应重定向页面
response.sendRedirect("response.jsp");
%>
</body>
</html>
<%@ page language="java" import="java.util.*,com.entity.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>服务端响应的页面</title>
</head>
<body>
<%
// 获取服务端存入session会话对象中的stu对象
/*
传统获取stu对象,需要使用session会话的方法,
获取到Object类型的stu,并进行类型转换
以及调用对象的公有方法获取属性值
*/
%>
<!--使用EL表达式简化了传统的流程-->
<!--EL表达式只能获取pageContext,request,session,application作用域中的对象,并且是通过作用域中的name名字来获取的-->
<h1>欢迎编号为${key.stuno}的同学注册成功</h1>
<h2>姓名:${sessionScope.key.sname}</h2>
<h2>年龄:${sessionScope.key.age}</h2>
</body>
</html>
EL表达式的简单应用
<%@ page language="java" import="java.util.*,com.entity.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<%
// 设置字符串,存入session会话
String str = "墨渐生微";
session.setAttribute("str_key", str);
// 设置对象 存入request对象
Student stu1 = new Student(10 ,"Micro",20);
Student stu2 = new Student(11 ,"Peter",19);
request.setAttribute("stu_key", stu1);
// 设置list集合,存入页面
List<Student> list = new ArrayList<Student>();
list.add(stu1);
list.add(stu2);
pageContext.setAttribute("list_key", list);
// 设置map 存入application对象
Map<String ,Student> map = new HashMap<String ,Student>();
map.put("1", stu1);
map.put("2", stu2);
application.setAttribute("map_key", map);
%>
<!--获取字符串-->
${str_key}
<hr />
<!--获取对象-->
${stu_key.sname}
<hr />
<!--获取集合-->
${list_key[1].sname}
<hr />
<!--获取Map集合元素-->
${map_key["1"].sname}
<hr />
</body>
</html>
JSTL核心标签库
JSTL标签包含了基本标签, 迭代标签, 条件标签 ;在使用时需要在JSP页面使用taglib指令导入标签库
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!--taglib指令:用来导入所需要的标签库 prefix是指定标签的前置-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JSTL核心标签库</title>
</head>
<body>
<!--c:set标签用于某空间中(pageContext request session application)声明变量并赋值-->
<!--定义了一个名字为name的变量,值为Micro 作用于为session对话-->
<c:set var="name" value="Micro" scope="session"></c:set>
<!--定义名字为sex的变量 值为男-->
<c:set var="sex" >男</c:set>
<!--set标签也可以通过target对象 property属性 value值 改变对象的属性值-->
<!--输出值-->
${name}
${sex}
<br /><hr />
<!--移除名字为sex的变量 : 输出为空-->
<c:remove var="sex"/>
${sex}
<br /><hr />
<!--if标签--><!--如果name不等于null则输出name-->
<c:if test="${name!=null}">
<h1>${name}</h1>
</c:if>
<br /><hr />
<!--choose选择标签:通过when标签的判断,eq判断等值,out输出,otherwise否则(when中不成立)-->
<c:choose>
<c:when test="${name eq 'micro'}">
<c:out value="${name}"></c:out>
</c:when>
<c:when test="${name eq 'Micro'}">
<c:out value="${name}"></c:out>
</c:when>
<c:otherwise>
<c:out value="否则"></c:out>
</c:otherwise>
</c:choose>
<%
int[] nums={12,56,78,45,45};
session.setAttribute("arr", nums);
%>
<!--foreach:循环遍历,通过自动获取items中对象赋给var-->
<c:forEach var="num" items="${arr}">
<h5>${num}</h5>
</c:forEach>
</body>
</html>
formatNumber
formatDate
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!--taglib指令:用来导入所需要的标签库 prefix是指定标签的前置-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>格式化</title>
</head>
<body>
<c:set var="number" value="8668.8866"></c:set>
<!--formatNumber:对数字进行格式化-->
<!--默认为number-->
<fmt:formatNumber type="number" value="${number}"></fmt:formatNumber><br />
<!--货币类型-->
<fmt:formatNumber type="currency" value="${number}"></fmt:formatNumber><br />
<!--百分比类型-->
<fmt:formatNumber type="percent" value="${number}"></fmt:formatNumber><br />
<!--对整数位与小数位截取-->
<fmt:formatNumber type="number" value="${number}" maxIntegerDigits="3" minFractionDigits="6"></fmt:formatNumber><br />
<!--自定义格式化数字-->
<fmt:formatNumber type="number" value="${number}" pattern="###.##E0"></fmt:formatNumber>
<hr /><br />
<%
Date date = new Date();
session.setAttribute("time", date);
%>
<!--formatDate:对日期进行格式化-->
<!--时分秒-->
<fmt:formatDate type="time" value="${time}"/><br />
<!--年月日-->
<fmt:formatDate type="date" value="${time}"/><br />
<!--年月日时分秒-->
<fmt:formatDate type="both" value="${time}"/><br />
<hr />
<fmt:formatDate value="${time}" dateStyle="short" timeStyle="short" type="both"/><br />
<fmt:formatDate value="${time}" dateStyle="long" timeStyle="long" type="both"/><br />
<fmt:formatDate value="${time}" dateStyle="medium" timeStyle="medium" type="both"/><br />
<!--自定义时间格式-->
<fmt:formatDate value="${time}" pattern="时间:yyyy-MM-dd HH:mm:ss"/>
</body>
</html>