IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Javaweb—— EL表达式和JSTL -> 正文阅读

[Java知识库]Javaweb—— EL表达式和JSTL

一、什么是Javabean

JavaBean是一种Java类,而且是一种特殊的、可重用的类。必须具有无参数的构造器,所有的属性都是private的,通过提供setter和getter方法来实现对成员属性的访问。
  JavaBean的种类按照功能可以划分为可视化和不可视化两类。可视化的JavaBean就是拥有GUI图形用户界面的,对最终用户是可见的。不可视化的JavaBean不要求继承,它更多的被使用在JSP中,通常情况下用来封装业务逻辑、数据分页逻辑、数据库操作和事物逻辑等,这样可以实现业务逻辑和前台程序的分离,提高了代码的可读性和易维护性,使系统更健壮和灵活。随着JSP的发展,JavaBean更多的应用在非可视化领域,并且在服务器端应用方面表现出了越来越强的生命力。

二、BeanUtils 工具

BeanUtils是Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。

访问 JavaBean的属性
在讲解面向对象时,经常会使用类的属性,类的属性指的是类的成员变量。在JavaBean中同样也有属性,但是它和成员变量不是一一个概念,它是以方法定义的形式出现的,这些方法必须遵循一定的命名规范。例如,在JavaBean中包含-一个String类型的属性name,那么在JavaBean中必须至少包含getName()和setName()方法中的一个,这两个方法的声明如下所示。

public String getName(){…}
public void setName (String name) { . . . }

需要注意的是, 对于JavaBean属性的命名方式有一个例外情况。如果属性的类型为boolean,它的命名方式应该使用is/set,而不是get/set。 例如,有-一个boolean类型的属性maried,该属性所对应的方法声明如下所示。

public boolean isMarried(){…}
public void setMarried (boolean married){…}

从上面的代码可以看出,married 属性的setter方法命名方式没有变化,而getter方法变成了isMarried()方法。当然,如果一定要写成getMarried()也是可以的,只不过isarried()更符合命名规范。
通过上面的学习,读者对JavaBean 组件有了一个初步的了解,为了更加深刻地理解JavaBean 属性的定义,接下来通过具体的案例来实现一个JavaBean程序。

package cn. itcast . chapter07. javabean;

	public class Student {
	private String sid;
	private String name;
	private int age;
	private boolean married;
	pub1ic int getAge() {
	return age;
	pub1ic void setAge(int age) {
	this . age=age;
	public boolean isMarried() {
	return married;
	public void setMarried(boolean married) {
	this . married=married ;
	}
	public String getSid() {
	return sid;
	}
	pub1ic void setName(String name) {
	this . name=name;
	}
	pub1ic void getInfo() {
	System. out . println( "我是2020080605003Ljj");
}

BeanUtils 工具
BeanUtils 类的常用方法及其功能的描述,掌握这些方法对灵活运用BeanUtis工具尤为重要。为了让读者熟悉BeanUtils 类的常用方法,接下来通过一个案例来演示使用setProperty()、getProperty()和 populate()方法访问JavaBean的属性。
(1) 在项目的lib 目录中添加已下载的commons-beanutils- 1.9.2.jar 和Logging的JAR包commons-logging-1.2.jar,并将这两个JAR包发布到类路径中。

(2) 在项目的src 目录下创建一个名为cn.itcast.chapter06.beanutils 的包,在包下创建Person类,Person 类中定义了name和age两个属性,并提供了对应的getter方法和setter方法供外界访问这两个属性。

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() {J
		return age;
	}
	public void getAge(int age) {
		this. age=age;
	}
	public Person() {
		super();
	}
	public String toString() {
		return "Person [name="+name+" ,age="+age+"]";
	}
}

(3) 在cn.itcast.chapter09. beanutils 包下创建一个BeanUtilsDemo 类, 该类中使用了BeanUtils类的常用方法,具体代码如下

package cn. itcast. chapter07. beanutils;

import java . util. HashMap;

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""dashuju2005");
	map.put("age" ,2);
	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);
	}
}

二、初识EL
由于EL可以简化JSP页面的书写,因此,在JSP的学习中,掌握EL是相当重要的。要使用EL表达式,首先要学习它的语法。EL表达式的语法非常简单,都是以“$("开始,以“]”结束的,具体格式如下。

${表达式}

需要注意的是,“${表达式}”中的表达式必须符合EL语法要求。关于EL语法的相关知识,将在下面的小节进行详细讲解。

为了证明EL表达式可以简化JSP页面,接下来通过一个案例来对比使用Java代码与EL表达式获取信息的不同。
首先,
在项目的src目录下创建包cn.itcast chapter07.servlet,在包中创建一个用于 存储用户名和密码的类MyServlet,代码如下

package cn. itcast. chapter07.servlet;

import java. io. IOException;

import javax . servlet . RequestDispatcher; .
import javax. servlet . ServletException;
import javax. servlet . annotat ion . WebServlet;
import javax . servlet . http . HttpServlet ;
import javax. servlet . http . HttpServletRequest;
import javax. servlet. http . HttpServletResponse;

/**
* Serylet implementation class oxserxlet
**/
@WebServlet(" /myservlet")
public c1ass myservlet extends HttpServ1et {
private static final 1ong serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
     **/
	public myserv1et() {
		super();
// TODO Auto- generated constructor stub

/**
 * @see HttpServlet#doGet (HttpServletRequest request, HttpServletResponse response)
 * */
protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// TODO Auto-generated method stub
	//response. getWriter(). append("Served at: ") . append(request . getContextPath());
	request . setAttribute("username", "Ljj");
	request. setAttribute("passward"," qwer" );
	RequestDispatcher dispatcher. =request . getRequestDispatcher(" /myjsp,jsp");
	dispatcher . forward(request, response);
	}
	
/**
 * @see HttpServlet#doPost (HttpServletRequest request, HttpServletResponse response)
 * */
protected void doPost (HttpServletRequest request, HttpServ1etResponse response) throws ServletException, IOException {
	// TODO Auto- generated method stub
	doGet ( request, response);
	}
}

EL隐式对象
pageContext对象
为了获取JSP页面的隐式对象,可以使用EL表达式中的pageContext 隐式对象。pageContext 隐式对象的示例代码如下。

${pageContext . response . characterEncoding}

在上述示例中,pageContext对象用于获取response对象中的characterEncoding属性。接下来,通过一个案例来演示pageContext隐式对象的具体用法。

在项目的WebContent目录下创建-名为pageContext.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 . request . contextPath}<br/>
	${pageContext. response . contentType}<br/>
	${pageContext. servletContext. servletNames}<br/>
</body>
< /html>

Web域相关对象
在Web开发中,PageContext、 HttpServletRequest、 HttpSession 和ServletContext这4个对象之所以可以存储数据,是因为它们内部都定义了一个Map集合,这些Map集合是有一定作用范围的,例如,HttpServletRequest 对象存储的数据只在当前请求中可以获取到。我们习惯把这些Map集合称为域,这些Map集合所在的对象称为域对象。在EL表达式中,为了获取指定域中的数据,提供了pageScope、 requestScope、sessionScope 和applicationScope4个隐式对象,示例代码如下。

${pageScope.userName)
${ request Scope .userName )
${sesslon. cope. use rName )
${applicationScope. userName)
需要注意的是,EL 表达式只能在这4个作用域中获取数据。为了让读者更好地学习这4个隐式对象,接下来通过一个案例来演示这4个隐式对象如何访问JSP域对象中的属性。

在项目的WebContent目录下,新建名为scopes.jisp的文件。

<%@ 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( " zhengzhidan" , "REQUEST");
session. setAttribute("session", "AESSION"); .
application. setAttribute( "app1", "APPLICATION");
%>
${pageScope.page } ===${page }<br/>
${requestScope. zhengzhidan }===${zhengzhidan }<br/>

<%
pageContext . setAttribute("aa", "PAGE");
request . setAttribute("aa", "REQUEST");
session. setAttribute("aa""AESSION") ;
application. setAttribute("aa","APPLICATION");
%>
-------<br/> .
${aa }<br/>
${seaaionScope.aa }<br/>
</body>
</html>

param和paramValues对象
param对象用于获取请求参数的某个值,它是Map类型,与request getParameter()方法相同,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。param对象的语法格式比较简单,具体示例如下。

$ {param. num }

如果一个请求参数有多个值, 可以使用paramValues对象来获取请求参数的所有值,该对象用于返回请求参数所有值组成的数组。如果要获取某个请求参数的第1个值,可以使用如下代码。
${paramValues .nums[0]}
在项目的WebContent目录下,新建一个名为param.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>
	<sform action= "${pageContentext. request. contextPath }/param. isp." 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="提交/ >&nbsp ;&nbsp;<input type="reset" value= "重填/>
	<hr/>
	unm1 :${parm. num1 }<br/>
	unm2 :${parmValues. num[0]}<br/>
	unm3:${parmvalues . num[1]}<br/>
</body>
</html>

Cookie 对象
在JSP开发中,经常需要获取客户端的Cookie信息,为此,在EL表达式中,提供了Cookie隐式对象.该对象是一个代表所有Cookie信息的Map集合,Map集合中元素的键为各个Cookie的名称,值则为对应的Cookie对象,具体示例如下。

获取cookie对象的信息: sicookie.userName)
获取cookie对象的名称: Slcookie.userName. name}
获取cookie对象的值: $lcookie. userName . value}

为了让读者更好地学习Cokie隐式对象,接下来通过一个案例来演示如何获取Coile对象中的信息。
在项目的WbComen目录下,新建一个cookie.jsp的文件.
启动Tomcat 服务器,在浏览器地址栏中输入地址http:/localhost:.9999/chapter07/cookie.jsp”访问cookie.jsp页面,由于是浏览器第1次访问cookie.jsp页面,此时,服务器还没有接收到名为userName的Cookie信息,因此,浏览器窗口中不会显示。接下来刷新浏览器,第2次访问cookie.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" , "dashuju"));%>
	获取cookie对象: ${ cookie . username }<br>
	获取cookie对象名字: ${cookie . username. name}<br/>
	获取cookie对象值: ${ cookie . username.value}<br/>
</body>
< /html>

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:12:16  更:2021-11-22 12:12:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:32:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码