JavaBean 和EL入门

使用这两个工具包commons-beanutils-1.8.3 commons-logging-1.1.1

Person类

package cn.itcast.domain;

/*
 * javaBean 必须为成员提供get或set方法
 * 必须要有一个默认构造器(没参的)
 * 一般对于具有get/set方法的成员变量 称之为属性
 * 
 * 其实就算一个属性没有对应的成员变量,只有get/set方法也可以
 * 属性的名称就是get/set方法去除get/set后 ,再把首字母小写
 * boolean的方法可以是is开头
 */
public class Person {
	private int age;
	private String name;
	private String gender;
	private boolean bool;
	
	public boolean isBool() {
		return bool;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	@Override
	public String toString() {
		return "Person [age=" + age + ", name=" + name + ", gender=" + gender
				+ "]";
	}
	
	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Person(int age, String name, String gender) {
		super();
		this.age = age;
		this.name = name;
		this.gender = gender;
	}
	
}

demo1

package cn.itcast.domain;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;

import cn.itcast.utils.CommonUtils;

public class Demo1 {
	@Test
	public void fun() throws InstantiationException, IllegalAccessException, ClassNotFoundException, InvocationTargetException, NoSuchMethodException{
		String className = "cn.itcast.domain.Person";
		Class clazz = Class.forName(className);
		Object bean = clazz.newInstance();
		
		BeanUtils.setProperty(bean, "name", "张三");
		BeanUtils.setProperty(bean, "age", "23");
		BeanUtils.setProperty(bean, "gender", "男");
		BeanUtils.setProperty(bean, "xxx", "xxx");	//因为person类没有xxx属性 所以会自动忽略
		
		String ageString=BeanUtils.getProperty(bean,"age");
		
		System.out.println(ageString);
		System.out.println(bean);
	}
	
	/*
	 * fun2和fun3一样 fun3自己写了一个工具类
	 * 把map中的属性直接封装到一个bean中
	 * Map:("username":"zhangSan","password","123")
	 * 我们要把map的数据封装到一个javaBean中 要求map的key与bean的属性名相同
	 */
	@Test
	public void fun2() throws IllegalAccessException, InvocationTargetException{
		Map<String,String> map = new HashMap<String,String>();
		map.put("username","name");
		map.put("password", "123");
		User user = new User();
		BeanUtils.populate(user,map);
		System.out.println(user);
	}
	
	@Test
	public void fun3(){
		Map<String,String> map = new HashMap<String,String>();
		map.put("username","name");
		map.put("password", "123");
		//使用自己写的工具类
		User user = CommonUtils.toBean(map, User.class);
		System.out.println(user);
		// request.getParameter("username");
		// request.getParamterMap();
		
	}
}


fun1结果


fun2结果


顺手丢个工具类在这里

package cn.itcast.utils;

import java.util.Map;
import java.util.UUID;

import org.apache.commons.beanutils.BeanUtils;

public class CommonUtils {

	// ALT + SHIFT + J 自动会生成上述方法注释的格式

	/**
	 * 生成不重复的32位长的大写字符串
	 * @return
	 */
	public static String uuid() {
		return UUID.randomUUID().toString().toUpperCase();
	}
	
	/**
	 * 把map转换成指定类型的javaBean对象
	 * @param map
	 * @param clazz
	 * @return
	 */
	public static <T>T toBean(Map map,Class<T> clazz) {
		try {
			
			//  1.创建指定类型的javaBean对象 
			T bean = clazz.newInstance();
			
			//把数据封装到javaBean中
			BeanUtils.populate(bean, map);
			
			//3.返回javaBean对象
			return bean;
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
}
jsp中与javaBean相关的标签!

* <jsp:useBean> --> 创建或查询bean
  * <jsp:useBean id="user1" class="cn.itcast.domain.User" scope="session"/> 在session域中查找名为user1的bean,如果不存在,创建之
  * <jsp:useBean id="user1" class="cn.itcast.domain.User" scope="session"/>
* <jsp:setProperty>
  * <jsp:setProperty property="username" name="user1" value="admin"/> 设置名为user1的这个javabean的username属性值为admin
* <jsp:getProperty>
  * <jsp:getProperty property="username" name="user1"/> 获取名为user1的javabean的名为username属性值

EL表达式

 EL替代的是<%= ... %>,也就是说,EL只能做输出!

EL表达式来读取四大域
  * ${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null。
  * ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域获取属性!

<body>

	<%
		//依次序注释会输出pageContext,request,然后是session,然后如果不关闭浏览器 就继续session咯
		pageContext.setAttribute("xxx", "pageContext_XXXX");
		request.setAttribute("xxx", "request_XXX");
		session.setAttribute("xxx","session_XXX");
		application.setAttribute("xxx", "application_XXX");
	%>
	<!-- EL只能做输出跟%=一样 -->
	<!-- 全域查找名为xxx的属性 不存在就输出空字符串"" 而不是null -->
	${ xxx }<br/>
	<!-- 指定域查找 -->
	${pageScope.xxx}	<br/>
	${requestScope.xxx}<br/>
	${sessionScope.xxx}	<br/>
	${applicationScope.xxx }<br/>

</body>

javaBean导航

  
<%
	Address address = new Address();
	address.setCity("北京");
	address.setStreet("西三旗");
	
	Employee emp = new Employee();
	emp.setName("李小四");
	emp.setSalary(123456);
	emp.setAddress(address);
	
	request.setAttribute("emp", emp);
  %>
 <body>
    <%-- map.key这是el的语法!
    map['key']也可以操作map
     --%>
    ${param.username }<br/>
    ${paramValues.hobby[0] }
    ${paramValues.hobby[1] }
  </body>

EL函数库(由JSTL提供的)

  * 导入标签库:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
	String toUpperCase(String input):把参数转换成大写
	String toLowerCase(String input):把参数转换成小写
	int indexOf(String input, String substring):从大串,输出小串的位置!
	boolean contains(String input, String substring):查看大串中是否包含小串
	boolean containsIgnoreCase(String input, String substring):忽略大小写的,是否包含
	boolean startsWith(String input, String substring):是否以小串为前缀
	boolean endsWith(String input, String substring):是否以小串为后缀
	String substring(String input, int beginIndex, int endIndex):截取子串
	String substringAfter(String input, String substring):获取大串中,小串所在位置后面的字符串
	substringBefore(String input, String substring):获取大串中,小串所在位置前面的字符串
	String escapeXml(String input):把input中“<”、">"、"&"、"'"、""",进行转义
	String trim(String input):去除前后空格
	String replace(String input, String substringBefore, String substringAfter):替换
	String[] split(String input, String delimiters):分割字符串,得到字符串数组
	int length(Object obj):可以获取字符串、数组、各种集合的长度!
	String join(String array[], String separator):联合字符串数组!

DEMO

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
…
String[] strs = {"a", "b","c"};
List list = new ArrayList();
list.add("a");
pageContext.setAttribute("arr", strs);
pageContext.setAttribute("list", list);
%>
${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- hello -->
${fn:toUpperCase("Hello") }<br/> <!-- HELLO -->
${fn:contains("abc", "a")}<br/><!-- true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->

${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim("     a b c     ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> -->

自定义函数库

 * 写一个java类,类中可以定义0~N个方法,但必须是static,而且有返回值的!
 * 在WEB-INF目录下创建一个tld文件
   <function>
    <name>fun</name>
    <function-class>cn.itcast.fn.MyFunction</function-class>
    <function-signature>java.lang.String fun()</function-signature>

  </function>

***itcast.tld(开头这里可以去tomcat目录WEB-INF/libs/jstl-impl-1.2.2.jar借,用zip打开看到fn.tld 然后<taglib>到<uri>最后自己补一个</taglib>)

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">
    
  <description>itcast</description>
  <display-name>itcast-functions</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>it</short-name>
  <uri>http://itcast.cn/el/functions</uri>

<function>
 
    <name>fun</name>
    <function-class>cn.itcast.fn.MyFunction</function-class>
    <function-signature>java.lang.String fun()</function-signature>
   
  </function>

	

  </taglib>
 *然后在在jsp页面中导入标签库
   <%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast.tld" %>

 * 在jsp页面中使用自定义的函数:${it:fun() }

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast.tld" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'b.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>${it:fun()}</h1>
  </body>
</html>






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值