JSP标签案例----开发If-else和单独的if标签

本文介绍如何通过Java开发自定义的JSP标签,包括if条件标签和嵌套的if-else逻辑标签。通过示例代码展示了标签的实现方式及在JSP页面中的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先是开发一个if标签,先是实现类

package com.bird.web.tag.example; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class IfTag extends SimpleTagSupport{ private boolean test; public void setTest(boolean test) { this.test = test; } @Override public void doTag() throws JspException, IOException { if(test){ this.getJspBody().invoke(null); } } }
然后是TLD描述文件

<?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>A tag library exercising SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>Bird</short-name> <uri>/example</uri> <tag> <name>referer</name> <tag-class>com.bird.web.tag.example.RefererTag</tag-class> <body-content>empty</body-content> <attribute> <name>site</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>page</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>if</name> <tag-class>com.bird.web.tag.example.IfTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>chose</name> <tag-class>com.bird.web.tag.example.ChoseTag</tag-class> <body-content>scriptless</body-content> </tag> <tag> <name>when</name> <tag-class>com.bird.web.tag.example.WhenTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>otherwise</name> <tag-class>com.bird.web.tag.example.OtherWiseTag</tag-class> <body-content>scriptless</body-content> </tag> </taglib>
然后使用

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <%@taglib uri="/example" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>开发IF标签</title> </head> <body> <% request.setAttribute("user","aaaa"); %> <c:if test="${user==null }"> aaaaaa </c:if> <c:if test="${user!=null }"> bbbbb </c:if> </body> </html>
下面是开发嵌套标签,if--else 标签

首先还是三个实现类

package com.bird.web.tag.example; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class ChoseTag extends SimpleTagSupport { private boolean isDo; public boolean isDo() { return isDo; } public void setDo(boolean isDo) { this.isDo = isDo; } @Override public void doTag() throws JspException, IOException { this.getJspBody().invoke(null); } }
然后是when标签

package com.bird.web.tag.example; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class WhenTag extends SimpleTagSupport{ private boolean test; public void setTest(boolean test) { this.test = test; } @Override public void doTag() throws JspException, IOException { ChoseTag parent = (ChoseTag) this.getParent(); if(test && parent.isDo()==false){ this.getJspBody().invoke(null); parent.setDo(true); } } }
然后是else

package com.bird.web.tag.example; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.SimpleTagSupport; public class OtherWiseTag extends SimpleTagSupport{ @Override public void doTag() throws JspException, IOException { ChoseTag parent = (ChoseTag) this.getParent(); if(parent.isDo() == false){ this.getJspBody().invoke(null); parent.setDo(true); } } }最后是使用<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <%@taglib uri="/example" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>开发嵌套标签,if-else</title> </head> <body> <%session.setAttribute("user","aaa"); %> <c:chose> <c:when test="${user==null }">aaaaaaaaaaaa</c:when> <c:otherwise>bbbbbbbbbbbb</c:otherwise> </c:chose> </body> </html>

### 关于《Java Web应用开发技术与案例教程》课后习题 对于《Java Web应用开发技术与案例教程》,由张继军所著一书中的课后习题,具体到第三章有关网页访问计数器的设计实现可以如下所示[^1]: #### 实现网页访问计数器 `count1.jsp` 此文件用于记录页面被独立访客浏览次数。每当有新的会话创建时,服务器端将会增加计数。 ```jsp <%@ page import="java.util.*" %> <html> <head><title>Page Visit Counter</title></head> <body> <% Integer count = (Integer)application.getAttribute("pageCount"); if(count==null){ count= new Integer(0); } application.setAttribute("pageCount", ++count); %> This Page has been visited <%= count %> times. </body> </html> ``` #### 创建会话级访问计数器 `count2.jsp` 该脚本负责追踪每个用户的单独会话期间对特定资源的请求总数,在每次加载页面时更新并显示当前会话内的点击量。 ```jsp <%@ page session="true"%> <html> <head><title>Session Visit Counter</title></head> <body> <% HttpSession sess=request.getSession(); int visitCount; String headerVal=sess.getHeader("User-Agent"); if(sess.isNew()){ out.println("<h3>Welcome First Time Visitor!</h3>"); sess.setAttribute("visitCounter",new Integer(1)); }else{ visitCount=((Integer)sess.getAttribute("visitCounter")).intValue()+1; sess.setAttribute("visitCounter",new Integer(visitCount)); } visitCount=((Integer)sess.getAttribute("visitCounter")).intValue(); %> You have Visited this site : <%= visitCount%> Times. </body> </html> ``` #### 构建站点总访问统计功能 `count3.jsp` 这段代码实现了整个应用程序级别的全局访问者数量跟踪机制,无论何时任何地方发生新会话建立事件都会触发计数值的增长操作。 ```jsp <%@ page import="javax.servlet.*, javax.servlet.http.*" %> <%! public void jspInit(){ ServletContext context=getServletContext(); synchronized(context){ Integer hitCount=(Integer)context.getAttribute("hitCount"); if(hitCount==null){ hitCount=new Integer(0); } context.setAttribute("hitCount",hitCount); } }%> <html> <head><title>Total Site Visitors Count</title></head> <body> <% ServletContext app=getServletConfig().getServletContext(); synchronized(app){ Integer totalHits=(Integer)app.getAttribute("hitCount"); if(totalHits!=null && !session.isNew())totalHits++; else totalHits=new Integer(1); app.setAttribute("hitCount",totalHits); } %> Total number of visitors to the website is: <%= ((Integer)getServletContext().getAttribute("hitCount")) %> . </body> </html> ``` 上述三个 JSP 文件展示了如何利用不同的作用域对象来构建不同层次上的访问计数逻辑,包括但不限于页面级别、会话级别以及整个Web应用层面的整体流量监控解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值