EL表达式和JSTL
什么是javabean
JavaBean 是 Java 开发语言中一个可以重复使用的软件组件,它本质上就是一个 Java类。为了规范,JavaBean的开发,Sun 公司发布了 JavaBean 的规范,它要求一个标准的 JavaBean组件需要遵循一定的编码规范,具体如下。
(1)它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的默认构造方法。
(2)它提供公共的 setter 方法和 getter 方法,让外部程序设置和获取 JavaBean 的属性。
为了让读者对JavaBean 有一个直观上的认识,接下来编写一个简单的 JavaBean。首先在Eclipse中创建一个名为 chapter07 的 Web 项目,然后在项目的 src 目录下创建名为
cn.itcast.chapter07 javabean 的包
访问Javabean的属性
在讲解面向对象时,经常会使用类的属性,类的属性指的是类的成员变量。在 JavaBean 中同样也有属性,但是它和成员变量不是一个概念,它是以方法定义的形式出现的,这些方法必须遵循一定的命名规范。例如,在 JavaBean 中包含一个 String 类型的属性 name,那么在JavaBean中必须至少包含 getName()和 setName()方法中的一个,这两个方法的声明如下所示。
public String getName(){…}
public void set Name(String name){…}
• getName()方法:称为 getter 方法或者属性访问器,该方法以小写的 get 前缀开始,后跟属性名,属性名的第 1 个字母要大写,例如,nickName 属性的 setter 方法为 setNickName()。
•setName()方法:称为 setter 方法或者属性修改器,该方法必须以小写的 set 前缀开始,后跟属性名,属性名的第一个字母要大写,例如nickName属性的setter方法为setNickName()。
如果一个属性只有 getter 方法,则该属性为只读属性。如果一个属性只有 setter 方法,则该属性为只写属性。如果一个属性既有 getter 方法,又有 setter 方法,则该属性为读写属性。通常来说,在开发 JavaBean 时,其属性都定义为读写属性。
需要注意的是,对于 JavaBean 属性的命名方式有一个例外情况。如果属性的类型为boolean,它的命名方式应该使用 is/set,而不是 get/set。例如,有一个 boolean 类型的属性
married,该属性所对应的方法声明如下所示。
public boolean isMarried(){…}
public void setMarried(boolean married){…}
从上面的代码可以看出,married 属性的 setter 方法命名方式没有变化,而 getter 方法变成
了 isMarried()方法。当然,如果一定要写成 getMarried()也是可以的,只不过 isMarried()更符合命名规范。
beanUtils工具
大多数java程序开发人员过去习惯于创建javabean属性对应的getter和setter的方法来访问属性,但是由于各种java工具和框架层出不穷,并不能保证属性对应的getter和setter方法总能被调用,因此动态访问java对象的属性是十分必要的。
##EL表达式
再见,jsp开发中为了获取servlet域对象中存储的数据,经常需要书写很多java代码,这样的做法会使jsp页面混乱,难以维护,为此在jsp2.0规范中提供了el表达式,el是expression language的缩写,它是一种简单的数据访问语言。
初识EL
由于el可以简化jsp页面的书写,因此在jsp的学习中掌握l是相当重要的,要是用el表达式,首先要学会它的语法,el表达式的语法非常简单,都是以“${”开始,以“{”结束的
el中的标识符
在el表达式中,经常需要使用一些符号来标记一些名称,如变量名,自定义函数名等这些符号被称为标识符。EL表达式中的标识符可以由任意的大小写字母、数字和下划线组成。为了避免出现非法的标识符,在定义标识符时还需要遵循以下规范。
1.不能以数字开头。
2.不能是 EL 中的保留字,如 and、or、gt。
3.不能是 EL 隐式对象,如pageContext。
4.不能包含单引号,双引号,减号和正斜杠等特殊字符。
EL隐式对象
1.pagecontact对象
为了获取jsp页面的隐式对象,可以使用el表达式中的page隐式对象pagecontact隐式对象的示例代码如下。
${pagecontext. response. characterencoding}
##web域相关对象
在web开发中,pagecontact 、httpservletrequest、httpsession和servletcontact的四个对象之所以可以存储数据,是因为他们内部都定义了一个map集合,这些map集合是有一定作用范围的。
3. param 和 paramValues 对象
在jsp页面中,经常需要获取客户端传递的请求参数。为此,el表达式提供了param和paramvalues 两个隐式对象,这两个影视对象专门用于获取客户端访问jsp页面时传递的请求参数。接下来针对这两个对象进行讲解,具体如下。
param 对象用于获取请求参数的某个值,它是 Map 类型,与 request.getParameter()方法
相同,在使用 EL 获取参数时,如果参数不存在,返回的是空字符串,而不是 null。 param 对象
的语法格式比较简单,具体示例如下。
${param.num}
如果一个请求参数有多个值,可以使用 paramValues 对象来获取请求参数的所有值,该对象用于返回请求参数所有值组成的数组。如果要获取某个请求参数的第 1 个值,可以使用如下代码。
${paramValues.nums[0]}
cookie对象
在jsp开发中,经常需要获取客户端的cookie消息,为此在el表达式中提供了cookie影视对象,该对象是一个代表所有cookie信息的map集合,map集合中元素的渐为各个cookie的名称。值则为对应的cookie对象。
代码及成果展示
package cn.itcast.chapter07.beanutils;
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.setProperty(p,"name","yuanxuehua");
*BeanUtils.setProperty(p,"age","19");
*String name =BeanUtils.getProperty(p,"name");
*age=Integer.parseInt(BeanUtlis.getproperty(p,"age"));
*System.out.println(name);
*System.out.println(age);
*/
Map<String,Object>map=new HashMap<String,Object>();
map.put("name", "袁雪华");
map.put("age", 19);
BeanUtils.populate(p,map);
String name=BeanUtils.getProperty(p,"name");
int age=Integer.parseInt(BeanUtils.getProperty(p,"age"));
System.out.println(name);
System.out.println(age);
}
}
package cn.itcast.chapter07.beanutils;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
/**
* Servlet implementation class BeanUtilsServlet
*/
@WebServlet("/beanutils")
public class BeanUtilsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//String name=request.getParameter("name");
//String agefrom=request.getParameter("age");
//int age =Integer.parseInt(agefrom);
Person p=new Person();
//p.setName(Name);
//p.setAge("AGE");
try {
BeanUtils.populate(p,request.getParameterMap());
}catch(Exception e) {
e.printStackTrace();
}
response.getWriter().print(p);
System.out.println(p);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
package cn.itcast.chapter07.beanutils;
public class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age=age;
}
public Person() {
super();
}
public String toString() {
return "Person[name=" + name + ",age=" + age + "}";
}
}
package cn.itcast.chapter07.javabean;
public class Student {
private String id;
private String name;
private int age;
private boolean married;
public Student() {
}
public int getAge() {
return age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id=id;
}
public void setAge(int age) {
this.age=age;
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married=married;
}
public String getSid() {
return id;
}
public void setName(String name) {
this.name=name;
}
public void getInfo() {
System.out.println("我是袁雪华");
}
}
package cn.itcast.chapter07.servlet;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MyServlet
*/
@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Person p=new Person();
p.setName("yuanxuehua");
Map<String,String>map=new HashMap<String,String>();
map.put("my-name","map的值");
request.setAttribute("user",null);
request.setAttribute("person", p);
request.setAttribute("username", "袁雪华");
request.setAttribute("password", "123456");
RequestDispatcher dis=request.getRequestDispatcher("myjsp.jsp");
dis.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
package cn.itcast.chapter07.servlet;
public class Person{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age=age;
}
public Person() {
super();
}
public String toString() {
return "Person[name=" + name + ",age=" + age + "}";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%response.addCookie(new Cookie("username","yuanxuehua"));%>
获取cookie对象:${cookie.username }<br/>
获取cookie对象名字:${cookie.username.name }<br/>
获取cookie对象值:${cookie.username.value }<br/>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="reg" action="/chapter07/BeanUtilsServlet" method="post">
用户名: <input name="name" type="text" /><br/>
年龄: <input name="age" type="text" /><br/>
<input type="submit" value="提交" id="bt" />
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
袁雪华 2020080605045<br/>
${empty person}<br/>
${empty user}<br/>
---------------------------------------------------------------<br/>
1>3吗? ${1>3}<br/>
---------------------------------------------------------------<br/>
1+3=${1+3}<br/>
---------------------------------------------------------------<br/>
${person.name}<br/>
---------------------------------------------------------------<br/>
${user.my-name }<br/>
${user["my-name"] }<br/>
---------------------------------------------------------------<br/>
<%=(String) request.getAttribute("username") %><br/>
<%= (String) request.getAttribute("username") %><br/>
---------------------------------------------------------------<br/>
-----${username }-----<br/>
${password }<br/>
</body>
</html>
<%@ page language="java" contentType="text/heml; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
获取项目路径:${pageContext.request.contextPath }<br/>
${pageContext.response.contentType }<br/>
${pageContext.servletContext.servletNames }<br/>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<from action="${pageContext.request.contextPath }/param.jsp" method="get">
num1:<input type="text" name="num1" /><br/>
num2:<input type="text" name="num" /><br/>
num3:<input type="text" name="num" /><br/>
<input type="submit" value="提交"/>&nhsp; <input type="rest" value="重填"/><hr/>
num1:${param.num1 }<br/>
num2:${paramValues.num[0] }<br/>
num3:${paramValues.num[1] }<br/>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% pageContext.setAttribute("page","PAGE");
request.setAttribute("dashuju","REQUEST");
session.setAttribute("session","SESSION");
application.setAttribute("appl","APPLICATION");%>
${pageScope.page }====${page }<br/>
${requestScope.dashuju }====${dashuju }<br/>
<%
pageContext.setAttribute("aa1","PAGE");
request.setAttribute("aa2","REQUEST");
session.setAttribute("aa3","SESSION");
application.setAttribute("aa","APPLICATION");%>
</body>
</html>