学科分类
目录
Java Web

控制是否执行JSP页面的内容

我们在使用标签时,经常需要控制是否执行标签体内容。例如,判断用户的登录状态,如果用户登录,则执行标签体,否则就不显示。简单标签使用doTag()方法完成判断,如果用户登录,则显示用户名称,如果用户没有登录,则可以抛出javax.servlet.jsp.SkipPageException异常,用于通知JSP容器不再执行标签体内容,这等效于在传统标签的doEndTag()方法中返回SKIP_PAGE常量。

接下来通过显示用户姓名的案例,学习如何使用invoke(Writer out)方法控制标签体内容的执行,具体步骤如下:

(1)编写标签处理器类Welcome.java。Welcome.java的具体实现代码如例1所示。

例1 Welcome.java

 1  package cn.itcast.chapter09.simpletag;

 2  import java.io.IOException;

 3  import javax.servlet.jsp.JspException;

 4  import javax.servlet.jsp.PageContext;

 5  import javax.servlet.jsp.tagext.SimpleTagSupport;

 6  public class Welcome extends SimpleTagSupport {

 7    public void doTag() throws JspException, IOException {

 8      //获取pageContext对象

 9      PageContext pageContext = (PageContext) this.getJspContext();

 10      //获取session中名称为user的属性

 11      String name = (String)pageContext .getSession()

 12         .getAttribute("user");

 13      //判断name是否为空,不为空则执行标签体内容

 14     if (name != null) {

 15       this.getJspBody().invoke(null);

 16     } 

 17   }

 18 }

例1的doTag()方法中,检查Session域中是否存在名称为“user”的属性,以此来判断用户是否登录,如果登陆则执行标签体,反之则忽略标签体。

(2)在tld文件中注册标签处理器类。在simpletag.tld文件中增加一个Tag元素,对标签处理器类Welcome进行注册,注册信息如下所示:

 <tag>
    <name>welcome</name>
    <tag-class>cn.itcast.chapter09.simpletag.Welcome</tag-class>
    <body-content>scriptless</body-content>
  </tag>

由于在<itcast:welcome />标签体中不能包含JSP脚本元素,因此注册信息中将<body-content>元素的值设置为简单标签标签体的默认值scriptless。

(3)编写JSP页面welcome.jsp,用于模拟用户登陆和显示用户信息。welcome.jsp文件如例2所示。

例2 welcome.jsp

 1  <%@ page language="java" pageEncoding="GBK"%>

 2  <%@taglib uri="/simpleTag" prefix="itcast"%>

 3  <html>

 4  <head>

 5  <title>Welcome Tag</title>

 6  </head>

 7  <body>

 8    <%

 9      String username = request.getParameter("username");

 10     if (username != null) {

 11       session.setAttribute("user", username);

 12     }

 13   %>

 14   欢迎光临本站!

 15   <itcast:welcome>

 16   亲,您的昵称为:${user }

 17   </itcast:welcome>

 18 </body>

 19 </html>

在例2中,第15~17行代码使用了自定义标签<itcast:welcome>,标签会根据session域中是否有“user”属性来判断第16行的标签体内容是否执行。

(4)启动Tomcat服务器,在浏览器中输入http://localhost:8080/chapter09/welcome.jsp?username=Lee来访问welcome.jsp页面,浏览器显示的结果如图1所示。

图1 运行结果

从图1中可以看到,由于在URL地址中传入了username参数,<itcast:welcome>标签检测到用户已经登陆,因此显示出了标签体的内容。

(5)重新打开一个浏览器窗口,在地址栏中输入http://localhost:8080/chapter09/welcome.jsp,这时,浏览器显示的结果如图2所示。

图2 运行结果

从图2可以看到,由于这次访问的URL地址没有传递username参数,<itcast:welcome>标签检测到用户没有登陆,所以没有显示出标签体的内容。

点击此处
隐藏目录