结束了为期两个星期的小项目,总结一下。
首先说一下项目需求,本项目是一个类似于知乎一样的系统,用户登录以后需要从数据库中获取用户信息,例如头像。如何获取呢?
登录成功后将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表达式调用自定义函数