struts2标签库主要使用的是OGNL语言,类似于El表达式,但是强大得多,它是一种操作对象属性的表达式语言,OGNL有自己的优点:
使用OGNL:
public class Test { public static void main(String[] args) throws OgnlException { //原则:数据分为两类--常用的和不常用的--常用的数据直接取,不常用的数据加#获取 Map<String, Object> map=new HashMap<String, Object>(); map.put("name", "zhangsan"); map.put("age", 22); User user=new User(); user.setName("lisi"); Object object = Ognl.getValue("name", map, user); System.out.println(object);//输出结果为lisi Object object1 = Ognl.getValue("#name", map, user); System.out.println(object1);//输出结果为zhangSan } }
在jsp页面中使用struts2标签库:
1:导入标签库 <%@ taglib prefix="s" uri="/struts-tags" %>
注意: 要使用struts2标签,那么要通过struts2过滤器来启用.如果过滤器的配置为<url-pattern>为*.action时,是不能直接通过url访问jsp页面的,需要通过action跳转.如果配置为<url-pattern>为/*时,是可以直接访问jsp页面的.struts2不推荐直接访问jsp页面,为了安全,推荐使用action来控制 .
下面是一个简单登录案例的LoginAction的代码(实体类user有两个属性name,pwd,代码省略,login.jsp代码也省略):
package com.wang.action; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.wang.entity.User; public class LoginAction extends ActionSupport{ private User user; public String login(){ System.out.println(user.getName()+":::"+user.getPwd()); if("wang".equals(user.getName())&&"123".equals(user.getPwd())){ ActionContext.getContext().getSession().put("user", user.getName()); return SUCCESS; }else{ return LOGIN; } } public String exit(){ ActionContext.getContext().getSession().remove("user"); System.out.println("tuichu"); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
当登录成功时会跳转到succ.jsp页面,假设我们要在该页面获取到登录的用户名,并在浏览器显示出来,succ.jsp代码应该这样写(只保留body部分核心代码):
<body> <h1>欢迎用户${sessionScope.user }---------------<a href="user/exit.action">退出</a></h1> <h1>欢迎用户<s:property value="user.name"/>---------------</h1> <h1>欢迎用户<s:property value="#session.user"/></h1> </body>
这三种方式都能把用户名wang给显示出来,第一种使用的el表达式,这里不再多说, 第二种取得是user对象里的一个属性,而User本身是LoginAction的一个属性,用ognl表达式取值时可以直接取到,但我们希望取得是我们存入session里的user,当在session,request,application域中取数据时,应当在在前面加上#,如上.上述第三种方式相当于:session.getAttribute("user");