java web学习之EL表达式和JSTL

1.初识JavaBean

1.1 什么是javaBean

它是java开发中常用的组件,其实就是一个java类,作用是封装数据。

书写JavaBean需要满足五个规范

1.这个java类,被public修饰

2.这个类要提供公共的无参数构造方法

3.提供私有的属性

4.要给私有的属性提供公共的set或者get方法

5.要实现serializable接口

比如:

//被public修饰,实现serializable接口(不实现第五点也可称为javabean)
public class Book implements serializable{

	private String id;//私有属性	
	private String name;//私有属性
	public book(){};//公共的无参数构造方法
	//公共的set或者get方法
	public void set ----
	public String get----

}

1.2 访问JavaBean的属性:

类的成员变量和属性的关系:

在普通的java类里面,成员变量就可以说成是属性。

在JavaBean里,private String id,private String name是成员变量,get或者set后面的字段名称的(字段名称的首字母小写),就是属性。

例:

import java.util.List;

public class Department extends DepartmentKey {
    private Integer parentid;
	private Integer deptId;//此为成员变量,目的是为了接受外界传递过来的值
    public Integer getDeptId() {
		return deptId;
	}
    //deptId就是属性
	public void setDeptId(Integer deptId) {
		this.deptId = deptId;
	}
    
	//parentid就是属性
    public Integer getParentid() {
        return parentid;
    }

    public void setParentid(Integer parentid) {
        this.parentid = parentid;
    }


}

1.3 BeanUtils 工具

BeanUtils 工具是由apache软件基金会提供的一套封装数据到JavaBean的工具类

常用的api:

1.向javaBean的属性设置值:

setPropetry(javaBean对象,javaBean的属性,javaBean属性的值)

2.获取javaBean属性的值

getPropetry(javaBean对象,javaBean的属性)

3.向javaBean的属性设置值:

populate(javaBean对象,map对象);

注:map对象的key,也就是javaBean的属性名称,必须和javaBean的属性名称一致,才能给javaBean的属性设置值。

BeanUtils是第三方工具,所以需要导入jar包

import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
public class BeanUtilsDemo {
	public static void main(String[] args) throws Exception {
		Person p = new Person();
		// 使用BeanUtils为属性赋值
		BeanUtils.setProperty(p, "name", "Jack");
		BeanUtils.setProperty(p, "age", 10);
		// 使用BeanUtils获取属性值
		String name = BeanUtils.getProperty(p, "name");
		String age = BeanUtils.getProperty(p, "age");
		System.out.println("我的名字是" + name + ",我今年" + age + "岁了!");
		// 创建map集合,用于存放属性及其属性值
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "张三");
		map.put("age", 10);
		// 使用populate()方法为对象的属性赋值
		BeanUtils.populate(p, map);
		// 打印赋值后对象的信息
		System.out.println("姓名:" + p.getName() + ", 年龄:" + p.getAge());
	}
}

此方法多用于封装表单提交到服务器的值,通过BeanUtils.populate(p, request.getParameterMap());一键封装,提交的表单数据想封装到javaBean对象里面,要求表单name属性值,必须和javaBean属性名称一

2.EL 表达式

2.1 初识EL表达式

EL在开发中,通常是用来获取域对象中保存的值,基本语法:${域对象的名称}。

比如说:request.setAttribute(“key”,“value222”);${“key”},获取的值是value222.

例:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, 
      HttpServletResponse  response) throws ServletException, IOException {
		//使用request域对象存值
		request.setAttribute("username", "itcast");
		request.setAttribute("password", "123");
		//把当前的请求转发到myjsp.jsp
         RequestDispatcher dispatcher = request.getRequestDispatcher("/myjsp.jsp");
		dispatcher.forward(request, response);
	}
	public void doPost(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<html>
<head></head>
<body>
    <!--第一种方式:传统方式获取值 -->
	用户名:<%=request.getAttribute("username")%><br /> 
	密 码:<%=request.getAttribute("password")%><br />	
	<hr>
	使用EL表达式:<br />
	用户名:${username}<br />
 	密 码:${password}<br />
	
</body>
</html>

如果域对象的名称写错了,使用el表达式获取值,获取的是“”,而request.getAttribute如果写错了会返回null

2.2 EL 表达式中的标识符

在el书写过程中,会用一些符号来标记变量、函数名等,这些符号称为标识符

书写规范:
1.不能以数字开头

2.不能包含el中的关键字:and,or等

3.不能使用el表达式的隐式对象。

4.不能包含特殊符号,比如“/”等

2.3 EL 中的变量

基本格式:${域对象的名称},这个域对象的名称可以理解为EL中的变量,那这个变量就不需要定义了,可以直接使用。

2.4 EL 中的常量

1.布尔常量:true或false

2.数字常量:整型、浮点常量,使用方式与java类似

3.字符串常量:使用方式和java差不多,比如:${“el的字符串常量”}

4.Null常量:${null}

2.5 EL 中的运算符

1.点运算符

比如:${persion.name}

2.方括号运算符:在域对象,有的属性包含特殊字符,所以用方括号方式获取

3.算术运算符:+ - * /

4.比较运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nyYe7nOo-1587024578154)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200416144638208.png)]

5.逻辑运算符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VpULbRBH-1587024578160)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200416144858622.png)]

6.empty运算符:用来判断域对象中的值是否存在,不存在返回为true,否则返回false

7.三目运算符:与java用法相同

2.6 EL 中的隐式对象

1.PageContext对象:为了获取jsp中的隐式对象

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<html>
<head></head>
<body>
	请求URI为:${pageContext.request.requestURI} <br />
	Content-Type响应头:${pageContext.response.contentType} <br /> 
	服务器信息为:${pageContext.servletContext.serverInfo} <br /> 
	Servlet注册名为:${pageContext.servletConfig.servletName} <br />
</body>
</html>

2.web域相关对象

域作用范围从小到大:pageContext–>request—>session —>application(servletContext)

el表达式获取域对象中的值:如果对象的名称相同,获取的是与作用范围最小的值

3.param和paramValues对象:获取表单提交的数据。

4.cookie 对象:获取cookie的名称,获取cookie的值

3.JSTL

3.1 什么是JSTL

JSTL:JavaServer Pages Standard Tag Libary,java服务器端页面的标准标签库,其实就是在jsp页面上使用的标签库。

JSTL标签库有五个组成,通常使用核心标签库。

在JSP页面上引入标签库:<%@ taglib uri=“标签库的url地址” prefix=“标签的前缀”%>

3.2 JSTL的下载和使用

步骤:

1.在jsp页面使用taglib指令引入标签库

2.导入响应的jar包

3.3 JSTL 中的Core标签

1.< c:out >标签:向网页输出内容

基本语法:

第一种:< c:out value=“EL表达式获取值” default=“值” escapeXml=“true或者false”>< /c:out >

第二种:第一种:< c:out value=“EL表达式获取值” escapeXml=“true或者false”>默认值< /c:out >

default属性:如果value属性获取到了值,就输出这个值,如果没有获取到就输出default属性对应的值。

escapeXml(默认值true):如果值为true,就会把html标记当成普通的字符串输出,如果为false就正常输出。

2.< c:if >标签:进行条件判断,和java中的if很相似

基本语法:

第一种:< c:if test=“条件表达式” var = “变量每次” scope=“域的范围”>< /c:if >

第二种:第一种:< c:if test=“条件表达式” var = “变量每次” scope=“域的范围”>标签体内容< /c:if >

通常使用第二种

test属性:如果返回值为true,就输出标签体内容,否则就不输出。

3.< c:choose >标签:进行条件判断,和java中的if,else if(),else if()----else很相似

基本语法:

< c:choose >

​ <c:when test=“条件表达式”>标签体内容</ c:when>-------->else if()

​ <c:when test=“条件表达式”>标签体内容</ c:when>

​ ---------

​ < c:otherwise >标签体内容</ c:otherwise>---------->else

4.<c:forEach >标签:遍历循环域对象中数组和集合,和java中for类似

基本语法

第一种: <c:forEach var=“yuansu” items=“数组或集合中的值” begin=“开始下标” end =“结束的下标” step=“遍历的增量”>< /c:forEach >

第二种:<c:forEach var=“yuansu” items=“数组或集合中的值” >< /c:forEach >

和增强型for类似

varStatus属性:count 表示序号,index表示索引(下标),first判断是否是第一个元素,last判断是否是最后一个元素

5.< c:param >标签和< c:url >:设置路径和传递参数。

基本语法:

< c:url var=“变量名称” url=“路径值”>

​ < c:param name=“属性名称” value=“属性值” >< /c:param >

​ -------------

< c:url >

例:

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head></head>
<body>
	使用绝对路径构造URL:<br />
	<c:url var="myURL" 
     value="http://localhost:8080/chapter07/register.jsp">
		<c:param name="username" value="张三" />
		<c:param name="country" value="中国" />
	</c:url>
	<a href="${myURL}">register.jsp</a><br />
	使用相对路径构造URL:<br />
	<c:url var="myURL" 
     value="register.jsp?username=Tom&country=France" />
	<a href="${ myURL}">register.jsp</a>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值