如何实现利用EL表达式去获取用户头像

时间:2021-04-11 20:58:28

结束了为期两个星期的小项目,总结一下。

首先说一下项目需求,本项目是一个类似于知乎一样的系统,用户登录以后需要从数据库中获取用户信息,例如头像。如何获取呢?

登录成功后将User user存入session,这个user中的信息是从tb_user中读取的,tb_user中存有用户名、密码、手机、邮箱等信息,用户还有一些其他信息,为了防止一张表过于复杂,我将头像、等级等一些信息放在tb_user_info这张表中。

解决方案一、

将user存入session中的同时,从数据库中读取对应得userinfo信息,也将其封装成一个对象存入session,用的时候就取session就好了,但是感觉这个方法有点low,呵呵呵.....


解决方案二、

先贴出bean吧:

public class UserInfo {
	private String id;
	private String username;
	private String nickname;
	private String photo;
	private String signature;
	private int rate;
}

public class User {
	private String id;
	private String username;
	private String password;
	private String mobile;
	private String email;
	private boolean validation;
	private boolean forbid;
}

下面就利用EL表达式去调用java代码了:

1.首先写一个java类,其中有个静态方法:

public static UserInfo getUserInfo(User user){
	UserInfoDao dao = new UserInfoDaoImpl();
	UserInfo info = null;
	if(user!=null)
	<span style="white-space:pre">	</span>info= dao.findByUser(user);//此方法传入user,获取userinfo对象
	return info;
}
注意这个方法必须为静态的。

2.在WEB-INF下新建一个tld文件

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    
  <description>自定义函数,让EL表达式调用</description>
  <display-name>custom fn</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>fn</short-name>
  <uri>/niit</uri>

  <function>
  	<name>getUserInfo</name>
  	<function-class>com.niit.utils.utils</function-class>
  	<function-signature>com.niit.bean.UserInfo getUserInfo(com.niit.bean.User){</function-signature>
  </function>

</taglib>
3.在页面中调用自定义函数:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="/niit" prefix="fn"%>  <!-- 注意此处一定要引入自定义标签 -->
<!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>你好,${user.username}</title>
</head>
<body>
	<img src="${fn:getUserInfo(user).photo}">
</body>
</html>
基本就这样,其实不只是为了这个项目,也为了去练习一下EL表达式吧,即EL表达式调用自定义函数