学习目标
一:JavaBean 二:EL表达式
学习内容
1:初识JavaBean
1.1 什么是JavaBean JavaBean是Java开发语言中一个可以重复使用的软件组件,它本质上就是一个Java类。 为了规范JavaBean的开发,Sun公司发布了JavaBean的规范,它要求一个标准的JavaBean组件需要遵循一定的编码规范,具体如下。 (1)它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的默认构造方法 (2)它提供公共的 setter方法和getter方法,让外部程序设置和获取JavaBean的属性。为了让读者对 JavaBean 有一个直观上的认识,接下来编写一个简单的JavaBean。首先在Eclipse 中创建一个名为 chapter07 的 Web 项目,然后在项目的SrC目录下创建名为cn.itcast.chapter07.javabean的包,再在该包下创建Book类,代码如下所示。
package cn.itcast.chapter07;
public class Book {
private double price;
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price =price;
}
}
1.2访问Javabean的属性 在讲解面向对象时,经常会使用类的属性,类的属性指的是类的成员变量。在JavaBean 中同样也有属性,但是它和成员变量不是一个概念,它是以方法定义的形式出现的,这些方法 必须遵循一定的命名规范。 类的成员变量和属性的一个关系: 在普通的java类里面,成员变量可以说成就是属性。 在JavaBean里面,成员变量和属性就有了区别。 在JavaBean 里面什么是成员变量呢? 比如:private String id; 那么id就是成员变量 在JavaBean 里面什么是属性?就是get或者set后面的字段名称(字段名称的首字母小写),就是属性。 比如:
public class Student {
//一下就是javaBean的四个成员变量
private String sid;//目的就是为了接收外界传递过来的值
private String name;
public Student() {
}
//属性由get或者set方法后面的字段首字母小写就是属性,属性就是id
public String getId() {
return sid;
}
public void setId(String id) {//写方法,给student写一个id
this.sid = id;
}
//属性就是name
public void setName(String name) {
this.name = name;
}
}
1.3 BeanUtils 工具 大多数Java程序开发人员过去习惯于创建JavaBean,然后通过调用JavaBean 属性对的getter和setter方法来访问属性。但是,由于各种Java工具和框架层出不穷,并不能保正性对应的getter和seter方法总能被调用,因此,动态访问Java对象的属性是十分必要的。此,Apache软件基金会提供了一套简单、易用的API——BeanUtils工具。掌握它的使用将有助于提高程序的开发效率。本节将针对BeanUtils工具的相关知识进行详细的讲解。 截止到目前,BeanUtils的最新版本为Apache Commons BeanUtils 1.9.x,读者可以根据需要下载相应的版本。BeanUtils 工具包的官网首页地址为“http://commons.apache.org/propercommons-beanutils”,登录到官网首页后,单击左边菜单栏【BEANUTILS】→【Download】选项,即可跳转到BeanUtils的下载页面. 例 (1)在chapter07项目的lib 目录中添加已下载的commons-beanutils- 1.9.2.jar和Logging的JAR包commons -logging-1.2.jar,并将这两个JAR包发布到类路径中。 (2)在项目的src 目录下创建一个名为cn.itcast.chapter07 的包,在包下创建Person类,Person类中定义了name和age两个属性,并提供了对应的getter方法和setter方法供外界访问这两个属性,具体代码如图下所示:
package cn.itcast.chapter07;
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 +"]";
}
}
(3)在cn.itcast.chapter07的包下创建BeanUtilsDemo类,该类使用了BeanUtils类的常用方法,具体如下图所示:
package cn.itcast.chapter07;
import java.util.HashMap;
import java.util.Map;
public class BeanUtilsDemo {
public static void main(String[] args) throws Exception{
Person p = new Person();
Map<String,Object> map= new HashMap<String,Object>();
map.put("name", "yanmin");
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);
}
}
2: 初识EL
2.1 初识 EL 表达式 EL在开发中,通常是用来获取域对象中保存的值,基本语法:${域对象的名称}。 比如说: request.setAttribute(“key”,“value123”): ${key},获取的值就是value123 如果域对象的名称写错了,使用el表达式获取值,获取的是"".
例 (1)在项目的src 目录下创建一个名为cn.itcast.chapter07.servlet 的包,在包下创建一个用于存储用户名和密码的类MyServlet,具体如下图:
package cn.itcast.chapter07.servlet;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.*;
import javax.servlet.http.*;
import cn.itcast.chapter07.Person;
public class MyServlet extends HttpServiet{
private static final long serialVersionUID =1l;
protected void doGet (HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
Person p =new Person();
p.setName("yanmin");
Map<String,String> map =new HashMap<String,String>();
map.put("my-name","map的值");
request.setAttribute("uesr",null);
request.setAttribute("person",p);
request.setAttribute("username","yanmin");
request.setAttribute("password","123") ;
RequestDispatcher dis = request
.getRequestDispatcher("/myjsp.jsp");
dis.forward(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException
{
doGet(request, response);
}
}
2)在WebContent目录下编写一个名为myjsp的JSP文件,使用该文件来输出存储信息,具体如下图所示:
<%@ 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>
<%=(String) request.getAttribute("person")%><br/>
<%=(String) request.getAttribute("username")%><br/>
<%=(String) request.getAttribute("password")%><br/>
<br/>
---------------------------------<br/>
----------${ username}<br/>
-----------$(password)<br/>
</body>
</html>
(3)启动Tomcat服务器,在浏览器地址栏里输入“http://localhost:9999/chapter07/myservlet”地址 访问MyServlet页面,效果如下图所示: 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差不多,比如: " e l 的 字 符 串 常 量 " 4. N u l l 常 量 : {“el的字符串常量”} 4.Null常量: "el的字符串常量"4.Null常量:{null}
2.5 EL中的运算符 1.点运算符:获取域对象中属性的值。 比如:
${person.name }
2.方括号运算符:在域对象里,有的属性包含特殊字符,所以用方括号的方式来获取值 比如:
<%
Map<String,String> map= new HashMap<String,String>();
map.put("my-name","map的值");
request.setAttribute("user",map);
%>
${user["my-name"] }
3.算术运算符:+ - * / 在myjsp.jsp文件中编写 启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/myservlet”访问MyServlet页面 4.比较运算符: > < >= <= == !=
在myjsp.jsp文件中编写 启动Tomcat服务器,在浏览器地址栏里输入“http://localhost:9999/chapter07/myservlet”地址 访问MyServlet页面 效果 5.逻辑运算符: &&(and) ||(or) !(not) 6.empty 运算符:用来判断域对象中的值是否存在,不存在返回为true,否则返回的结果是false. 在myjsp.jsp文件中编写 启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/myservlet”访问MyServlet页面 EL 隐式对象 1.pageContext对象:为了获取jsp中的隐式对象。 比如:
获取项目的路径:${pageContext.request.contextPath }<br/>
获取请求的URL:${pageContext.request.requestURI }
在WebContent目录下编写一个名为pageContext.jsp的JSP文件, 代码如下图:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
获取项目路径YANMIN:$(pageContext.request.contextPath }<br/>
$(pageContext.request.contextPath <br/>
$(pageContext.servletContext.servletNames <br/>
</body>
</html>
启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/pageContext.jsp”访问pageContext页面,效果如下图所示: 2.web域相关的对象 域作用范围从小到大:pageContext—>request—>session—>application(servletContext) el表达式获取域对象中的值:如果域对象的名称相同,获取的是域作用范围最小的值。和pageContext对象的findAttribute方法的效果是一样的。
例 (1)在WebContent目录下编写一个名为scopes.jsp的JSP文件, 代码如下图:
<%@ 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("request", "REQUEST");
session. setAttribute("session" ,"SESSION");
application. setAttribute("appl","APPLICATION");
%>
$[pageScope.page )=== $(page <br/>
$(requestScope.YANMIN)=== ${YANMIN}<br/>
<%
pageContext.setAttribute("aa1","PAGE");
request. setAttribute("aa2" ,"REQUEST") ;
session. setAttribute("aa" ,"SESSION" );
application. setAttribute("aa" ,"APPLICATION");
%>
------------------------------------<br/>
${aa}<br/>
$(sessionScope.aa <br/>
</body>
</html>
(2)启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/scopes.jsp”访问scopes页面,效果如下图所示:
3.param 和 paramValues 对象 获取表单提交的数据。 比如:
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="提交" /> <input type="reset" value="重填" />
<hr/>
num1:${param.num1 }<br/>
num2:${paramValues.num[0] }<br/>
num3:${paramValues.num[1] }
例 (1)在WebContent目录下编写一个名为param.jsp的JSP文件,代码如下图:
<%@ 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>
<form 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="提交"/> <inputtype="reset" value="重填"/><hr/>
num1:${param.num1} <br/>
num2:${ paramValues.num[0] }<br/>
num3:${paramValues.num[1]}<br/>
</body>
</html>
(2)启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/scopes.jsp”访问param页面,效果如下图所示: 4. Cookie 对象 获取cookie的名称,获取cookie的值 比如:
<% response.addCookie(new Cookie("userName","itcast")); %>
获取cookie对象:${cookie.userName }<br/>
获取cookie的名称:${cookie.userName.name }<br/>
获取cookie的值:${cookie.userName.value }<br/>
例 (1)在WebContent目录下编写一个名为cookie.jsp的JSP文件,代码如下图:
<%@ 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","YANMIN")); %>
获取cookie对象:${cookie.username} <br/>
获取cookie对象名字:$ {cookie.username.name} <br/>
获取cookie对象值:${cookie.username.value} <br/>
</body>
</html>
(2)启动Tomcat服务器,在浏览器地址栏里输入地址 “http://localhost:9999/chapter07/cookie.jsp”访问cookie页面,效果如下图所示: 2020080605041
|