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.比较运算符
5.逻辑运算符
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>