Struts 1 学习笔记-3-4(JSTL函数标签库的使用与自定义标签库)

这篇博客详细介绍了如何在Struts 1中使用JSTL函数库,包括在struts-config.xml的配置、JSTLFnAction的编写以及在jstlfn.jsp中的应用。同时,博主还分享了创建自定义函数库的步骤,从定义公共静态方法到编写myFunctions.tld文件,再到在jsp页面中调用这些自定义函数。测试结果显示,自定义函数库成功运行。

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

一.JSTL函数库的使用:

1.先来struts-config.xml:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"
>

<struts-config>
    
<action-mappings>        
        
<action path="/jstlfn" type="com.codedestiny.struts.JSTLFnAction" scope="request">
            
<forward name="success" path="/jstlfn.jsp"></forward>
        
</action>
    
</action-mappings>
    
<message-resources parameter="MessageResources" />
</struts-config>

 2.再上JSTLFnAction.java:

package com.codedestiny.struts;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class JSTLFnAction extends Action {

    
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        request.setAttribute(
"hello""Hello World");
        
        List
<String> list = new ArrayList<String>();
        
for(int i=0; i<10; i++{
            list.add(
"value" + i);
        }

        request.setAttribute(
"list", list);
        
        
return mapping.findForward("success");
    }


}

 

3.显示界面jstlfn.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
  
</head>
  
<body>
    
<h1>测试JSTL函数标签库</h1>
    
    
<hr>
    hello.length(jsp) : 
<%=((String)request.getAttribute("hello")).length()%><br>
    hello.length(用JSTL函数库取得,函数库调用在EL表达式中采用前缀+冒号+函数名,例如:fn:length) : ${fn:length(hello)}
<br>
    list.size(用JSTL函数库取得) : ${fn:length(list)}
<br>
   
</body>
</html>

 

4.测试截图:

 

二.自定义函数库:

1.定义类和方法(方法必须是public以及静态的)

本人定义了一个MyFunctions.java,其中包括一个静态方法sayHello( ):

package com.codedestiny.struts;

public class MyFunctions {
    
    
    
//注意:自定义函数,方法必须是静态以及public的
    public static String sayHello(String name) {
        
return "Hello, " + name;
    }

    
}
    

 

2.编写自定义的tld文件,并将该文件放到 web-inf 下或其子目录下:

本人编写的myFunctions.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>My Functions</description>
  
<display-name>My functions </display-name>
  
<tlib-version>1.0</tlib-version>
  
<short-name>my</short-name>
  
<uri>http://blog.youkuaiyun.com/CodeDestiny/functions</uri>
  
  
<function>
      
<name>sayHello</name>
      
<function-class>com.codedestiny.struts.MyFunctions</function-class>
      
<function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
  
</function>
  
</taglib>  

 

3.在jsp中通过taglib指令,引入自定义函数库,并调用:

我就在之前的jstlfn.jsp上继续编写:

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="my" uri="http://blog.youkuaiyun.com/CodeDestiny/functions" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
  
</head>
  
<body>
    
<h1>测试JSTL函数标签库</h1>
    
    
<hr>
    hello.length(jsp) : 
<%=((String)request.getAttribute("hello")).length()%><br>
    hello.length(用JSTL函数库取得,函数库调用在EL表达式中采用前缀+冒号+函数名,例如:fn:length) : ${fn:length(hello)}
<br>
    list.size(用JSTL函数库取得) : ${fn:length(list)}
<br>
    sayHello : ${my:sayHello("Jack")}
<br>
  
</body>
</html>

 

4.测试截图:

stl的配置方法:<br>1、将jstl.jar和standard.jar拷贝到web-inf/lib下即可(如只使用EL表达式,无需引用这两个包)<br><br>2、在jsp页面头部引入taglib方法如下:<br> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core " %><br> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt " %> <br> <%@ taglib prefix="my" uri="http://www.bjsxt.com/functions " %><br> <br> 注意:JSTL必须在能够支持J2ee1.4/servlet2.4/jsp2.0版本以上的容器才能运行,这个环境配置<br> 是目前最常用的版本<br> <br>3JSTL重点<br> * EL表达式的用法 <br> * c:out标签<br> * c:if/c:choose/c:when/c:otherwise标签<br> * c:forEach标签<br> * fmt:formatDate标签<br> * fmt:formatNumber标签<br> * 函数库的使用<br> * 自定义函数库<br> * 定义类和方法(必须定义为public static)<br> * 编写tld文件,并且将tld文件放到WEB-INF下<br> * 在jsp中使用taglib指令引入自定义标签库<br> * 直接使用即可<br><br> <br><br> <br><br><h1>测试JSTL核心标签库</h1><br> <hr><br> <li>测试c:out</li><br><br> a(default)=<c:out value="${a}"/><br><br> a(el)=${a }<br><br> b(defalt)=<c:out value="${b}" default="b value"/><br><br> bj(default)=<c:out value="${bj}"/><br><br> bj(escapeXml=true)=<c:out value="${bj}" escapeXml="true"/><br><br> bj(escapeXml=false)=<c:out value="${bj}" escapeXml="false"/><br><br> <p><br> <li>条件控制标签c:if</li><br><br> <c:if test="${v1 lt v2}" var="v"><br> boolean value=${v } &nbsp&nbsp v1 小于 v2<br> </c:if><br> <c:if test="${v1 gt v2}" var="v"><br> boolean value=${v } &nbsp&nbsp v1 大于 v2<br> </c:if><br> <li>条件控制标签c:choose,c:when,c:otherwise</li><br><br> <c:choose><br> <c:when test="${v1 gt v2}"><br> v1 大于 v2<br> </c:when><br> <c:otherwise><br> v1 小于 v2<br> </c:otherwise><br> </c:choose><br> <br><br> <c:choose><br> <c:when test="${empty valuelist}"><br> valuelist为空<br> </c:when><br> <c:otherwise><br> valuelist不为空<br> </c:otherwise><br> </c:choose><br> <p><br> <li>循环控制标签:c:foreach</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}"><br> <tr><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:foreach varstatus的用法</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}" varStatus="vs"><br> <c:choose><br> <c:when test="${ vs.count % 2 == 0}"><br> <tr bgcolor="red"><br> </c:when><br> <c:otherwise><br> <tr><br> </c:otherwise><br> </c:choose><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:foreach</li><br><br> <table border="1"><br> <tr><br> <td>姓名</td><br> <td>年龄</td><br> <td>所属组</td><br> </tr><br> <c:forEach var="user" items="${userlist}" begin="2" end="8" step="2"><br> <tr><br> <td><c:out value="${user.username}"/></td><br> <td><c:out value="${user.age}"/></td><br> <td><c:out value="${user.relatedGroup.name}"/></td><br> </tr><br> </c:forEach><br> </table><br> <p><br> <li>循环控制标签:c:fortoken</li><br><br> <c:forTokens items="${tokenstr}" delims="," var="v"><br> <c:out value="${v}"/><br> </c:forTokens> <br> <p><br> <li>循环控制标签:c:foreach-map</li><br><br> <c:forEach items="${map}" var="v"><br> ${v}<br><br> ${v.key}=${v.value }<br><br> </c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值