`
直线曲线
  • 浏览: 47073 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

jsp2自定义标签(借鉴的)

    博客分类:
  • jsp
 
阅读更多
首先声明:该文来自网络,谢谢作者,感觉看了一遍就非常明白,受益匪浅,转载到此并无抄袭之意,只是日后本人查看方便。

自定义标签库并不是 JSP 2 才出现的,JSP 1.1 版中已经增加了自定义标签库规范,自定义标签库是一种非常优秀的表现层组件技术。通过使用自定义标签库,可以在简单的标签中封装复杂的功能。

为什么要使用自定义标签呢?主要是为了取代丑陋的 JSP 脚本。在 HTML 页面中插入 JSP 脚本有如下几个坏处:

JSP 脚本非常丑陋,难以阅读。
JSP 脚本和 HTML 代码混杂,维护成本高。
HTML 页面中嵌入 JSP 脚本,导致美工人员难以参与开发。
出于以上三点的考虑,我们需要一种可在页面中使用的标签,这种标签具有和 HTML 标签类似的语法,但由可以完成 JSP 脚本的功能——这种标签就是 JSP 自定义标签。

在 JSP1.1 规范中开发自定义标签库比较复杂,JSP 2 规范简化了标签库的开发,在 JSP 2 中开发标签库只需如下几个步骤:

开发自定义标签处理类;
建立一个 *.tld 文件,每个 *.tld 文件对应一个标签库,每个标签库对应多个标签;
在 JSP 文件中使用自定义标签。
开发自定义标签类

标签库和实际开发标签库是非常重要的技术,通常来说,初学者、普通开发人员自己开发标签库的机会很少,但如果希望成为高级程序员,或者希望开发通用框架,就需要大量开发自定义标签了。所有的 MVC 框架,如 Struts 2、SpringMVC、JSF 等都提供了丰富的自定义标签。
当我们在 JSP 页面使用一个简单的标签时,底层实际上由标签处理类提供支持,从而可以使用简单的标签来封装复杂的功能,从而使团队更好地协作开发(能让美工人员更好地参与 JSP 页面的开发)。

早期 JSP 自定义标签类开发过程略微复杂一些,但 JSP 2 已经简化了这个过程,它只要自定义标签类都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,除此之外,JSP 自定义标签类还有如下要求。

如果标签类包含属性,每个属性都有对应的 getter 和 setter 方法。
重写 doTag() 方法,这个方法负责生成页面内容。
下面开发一个最简单的自定义标签,该标签负责在页面上输出 HelloWorld。

// 标签处理类,继承 SimpleTagSupport 父类
public class HelloWorldTag extends SimpleTagSupport
{
    // 重写 doTag 方法,该方法在标签结束生成页面内容
    public void doTag()throws JspException,
        IOException
    {
        // 获取页面输出流,并输出字符串
        getJspContext().getOut().write("Hello World");
    }
}



上面这个标签处理类非常简单,它继承了 SimpleTagSupport 父类,并重写 doTag() 方法,而 doTag() 方法则负责输出页面内容。该标签没有属性,因此无须提供 setter 和 getter 方法。


--------------------------------------------------------------------------------
建立 TLD 文件

TLD 是 Tag Library Definition 的缩写,即标签库定义,文件的后缀是 tld,每个 TLD 文件对应一个标签库,一个标签库中可包含多个标签,TLD 文件也称为标签库定义文件。

标签库定义文件的根元素是 taglib,它可以包含多个 tag 子元素,每个 tag 子元素都定义一个标签。通常我们可以到 Web 容器下复制一个标签库定义文件,并在此基础上进行修改即可。例如 Tomcat6.0,在 webapps\examples\WEB-INF\jsp2 路径下包含了一个 jsp2-example-taglib.tld 文件,这就是示范用的标签库定义文件。

将该文件复制到 Web 应用的 WEB-INF/ 路径,或 WEB-INF 的任意子路径下,并对该文件进行简单修改,修改后的 mytaglib.tld 文件代码如下:


<?xml version="1.0" encoding="GBK"?>
<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 web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>mytaglib</short-name>
    <!-- 定义该标签库的URI -->
    <uri>http://www.crazyit.org/mytaglib</uri>
    <!-- 定义第一个标签 -->
    <tag>
        <!-- 定义标签名 -->
        <name>helloWorld</name>
        <!-- 定义标签处理类 -->
        <tag-class>lee.HelloWorldTag</tag-class>
        <!-- 定义标签体为空 -->
        <body-content>empty</body-content>
    </tag>
</taglib>



上面标签库定义文件也是一个标准的 XML 文件,该 XML 文件的根元素是 taglib 元素,因此我们每次编写标签库定义文件都直接添加该元素即可。

taglib 下有三个子元素:

tlib-version:指定该标签库实现的版本,这是一个作为标识的内部版本号,对程序没有太大的作用。
short-name:该标签库的默认短名,该名称通常也没有太大的用处。
uri:这个属性非常重要,它指定该标签库的 URI,相当于指定该标签库的唯一标识。如上粗体字代码所示,JSP 页面中使用标签库时就是根据该 URI 属性来定位标签库的。
除此之外,taglib 元素下可以包含多个 tag 元素,每个 tag 元素定义一个标签,tag 元素下至少应包含如下三个子元素:

name:该标签库的名称,这个属性很重要,JSP 页面中就是根据该名称来使用此标签的。
tag-class:指定标签的处理类,毋庸置疑,这个属性非常重要,指定了标签由哪个 Java 类来处理。
body-content:这个属性也很重要,它指定标签体内容。该元素的值可以是如下几个:
tagdependent:指定标签处理类自己负责处理标签体。
empty:指定该标签只能作用空标签使用。
scriptless:指定该标签的标签体可以是静态 HTML 元素,表达式语言,但不允许出现 JSP 脚本。
JSP:指定该标签的标签体可以使用 JSP 脚本。
实际上由于 JSP 2 规范不再推荐使用 JSP 脚本,所以 JSP 2 自定义标签的标签体中不能包含 JSP 脚本。所以实际上 body-content 元素的值不可以是 JSP。

定义了上面的标签库定义文件后,将标签库文件放在 Web 应用的 WEB-INF 路径,或任意子路径下,Java Web 规范会自动加载该文件,则该文件定义的标签库也将生效。


--------------------------------------------------------------------------------
使用标签库

在 JSP 页面中确定指定标签需要 2 点:

标签库 URI:确定使用哪个标签库。
标签名:确定使用哪个标签。
使用标签库分成以下两个步骤:

导入标签库:使用 taglib 编译指令导入标签库,就是将标签库和指定前缀关联起来。
使用标签:在 JSP 页面中使用自定义标签。
taglib 的语法格式如下:
<%@ taglib uri="tagliburi" prefix="tagPrefix" %> 
 [/html]


其中 uri 属性确定标签库的 URI,这个 URI 可以确定一个标签库。而 prefix 属性指定标签库前缀,即所有使用该前缀的标签将由此标签库处理。

使用标签的语法格式如下:

<tagPrefix:tagName tagAttribute=”tagValue” … > 
	<tagBody/> 
</tagPrefix:tagName> 
 



如果该标签没有标签体,则可以使用如下语法格式:

<tagPrefix:tagName tagAttribute=”tagValue” … /> 
 



上面使用标签的语法里都包含了设置属性值,前面我们介绍的 HelloWorldTag 标签没有任何属性,所以使用该标签只需用 <mytag:helloWorld/> 即可。其中 mytag 是 taglib 指令为标签库指定的前缀,而 helloWorld 是标签名。

下面是使用 helloWorld 标签的 JSP 页面代码:

<%@ page contentType="text/html; charset=GBK"%>
<!-- 导入标签库,指定mytag前缀的标签,
	由http://www.crazyit.org/mytaglib的标签库处理 -->
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%>
<html>
<head>
<title>自定义标签示范</title>
</head>
<body bgcolor="#ffffc0">
<h2>下面显示的是自定义标签中的内容</h2>
<!-- 使用标签 ,其中mytag是标签前缀,根据taglib的编译指令,
	mytag前缀将由http://www.crazyit.org/mytaglib的标签库处理 -->
<mytag:helloWorld/><BR>
</body>
</html>


上面页面中第一行粗体字代码指定了 http://www.crazyit.org/mytaglib 标签库的前缀为 mytag,第二行粗体字代码表明使用 mytag 前缀对应标签库里的 helloWorld 标签。
结果:页面显示 Hello World

--------------------------------------------------------------------------------
带属性的标签

前面的简单标签既没有属性,也没有标签体,用法、功能都比较简单。实际上还有如下两种常用的标签:

带属性的标签。
带标签体的标签。
正如前面介绍的,带属性标签必须为每个属性提供对应的 setter 和 getter 方法。带属性标签的配置方法与简单标签也略有差别,下面介绍一个带属性标签的示例:

public class QueryTag extends SimpleTagSupport
{
    //标签的属性
    private String driver;
    private String url;
    private String user;
    private String pass;
    private String sql;
    //执行数据库访问的对象 
    private Connection conn = null;
    private Statement stmt = null;
    private ResultSet rs = null;
    private ResultSetMetaData rsmd = null;
    //标签属性driver的setter方法
    public void setDriver(String driver) {
        this.driver = driver; 
    }
        //标签属性url的setter方法
    public void setUrl(String url) {
        this.url = url; 
    }
        //标签属性user的setter方法
    public void setUser(String user) {
        this.user = user; 
    }
        //标签属性pass的setter方法
    public void setPass(String pass) {
        this.pass = pass; 
    }
        //标签属性driver的getter方法
    public String getDriver() {
        return (this.driver); 
    }
        //标签属性url的getter方法
    public String getUrl() {
        return (this.url); 
    }
        //标签属性user的getter方法
    public String getUser() {
        return (this.user); 
    }
        //标签属性pass的getter方法
    public String getPass() {
        return (this.pass); 
    }
        //标签属性sql的getter方法
    public String getSql() {
        return (this.sql); 
    }
        //标签属性sql的setter方法
    public void setSql(String sql) {
        this.sql = sql; 
    }
    public void doTag()throws JspException,
        IOException
    {
           try
        {
            //注册驱动
            Class.forName(driver);
            //获取数据库连接
            conn = DriverManager.getConnection(url,user,pass);
            //创建Statement对象
            stmt = conn.createStatement();
            //执行查询
            rs = stmt.executeQuery(sql);
            rsmd = rs.getMetaData();
            //获取列数目
            int columnCount = rsmd.getColumnCount();
            //获取页面输出流
            Writer out = getJspContext().getOut();
            //在页面输出表格
            out.write("<table border='1' bgColor='9999cc' width='400'>");
            //遍历结果集
            while (rs.next())
            {
                out.write("<tr>");
                //逐列输出查询到的数据
                for (int i = 1 ; i <= columnCount ; i++ )
                {
                    out.write("<td>");
                    out.write(rs.getString(i));
                    out.write("</td>");
                }
                out.write("</tr>");
            }
        }
        catch(ClassNotFoundException cnfe)
        {
            cnfe.printStackTrace();
            throw new JspException("自定义标签错误" + cnfe.getMessage());
        }
        catch (SQLException ex)
        {
            ex.printStackTrace();
            throw new JspException("自定义标签错误" + ex.getMessage());
        }
        finally
        {
            //关闭结果集
            try
            {
                if (rs != null)
                    rs.close();
                if (stmt != null)
                    stmt.close();
                if (conn != null)
                    conn.close();
            }
            catch (SQLException sqle)
            {
                sqle.printStackTrace();
            }
        }
    }
}
 



上面这个标签稍微复杂一点,它包含了 5 个属性,如程序中粗体字代码所示,则程序需要为这 5 个属性提供 setter 和 getter 方法。

该标签输出的内容依然由 doTag() 方法决定,该方法会根据 SQL 语句查询数据库,并将查询结果显示在当前页面中。

对于有属性的标签,需要为 tag 元素增加 attribute 子元素,每个 attribute 子元素定义一个属性,attribue 子元素通常还需要指定如下几个子元素:

name:设置属性名,子元素的值是字符串内容。
required:设置该属性是否为不需属性,该子元素的值是 true 或 false。
fragment:设置该属性是否支持 JSP 脚本、表达式等动态内容,子元素的值是 true 或 false。
为了配置上面的 QueryTag 标签,我们需要在 mytaglib.tld 文件中增加如下配置片段:

<!-- 定义第二个标签 -->
<tag>
    <!-- 定义标签名 -->
    <name>query</name>
    <!-- 定义标签处理类 -->
    <tag-class>lee.QueryTag</tag-class>
    <!-- 定义标签体为空 -->
    <body-content>empty</body-content>
    <!-- 配置标签属性:driver -->
    <attribute>
        <name>driver</name> 
        <required>true</required>
        <fragment>true</fragment>
    </attribute>
    <!-- 配置标签属性:url -->
    <attribute>
        <name>url</name> 
        <required>true</required>
        <fragment>true</fragment>
    </attribute>
    <!-- 配置标签属性:user -->
    <attribute>
        <name>user</name> 
        <required>true</required>
        <fragment>true</fragment>
    </attribute>
    <!-- 配置标签属性:pass -->
    <attribute>
        <name>pass</name> 
        <required>true</required>
        <fragment>true</fragment>
    </attribute>
    <!-- 配置标签属性:sql -->
    <attribute>
        <name>sql</name> 
        <required>true</required>
        <fragment>true</fragment>
    </attribute>
</tag>
 



上面 5 行粗体字代码分别为该标签配置了 driver、url、user、pass 和 sql 等 5 个属性,并指定这 5 个属性都是必填属性、而且属性值支持动态内容。

配置完毕后,就可在页面中使用标签,先导入标签库,然后使用标签。使用标签的 JSP 页面片段如下:

<!-- 导入标签库,指定mytag前缀的标签,
    由http://www.crazyit.org/mytaglib的标签库处理 -->
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%>
...
<!-- 其他HTML内容 -->
<!-- 使用标签 ,其中mytag是标签前缀,根据taglib的编译指令,
    mytag前缀将由http://www.crazyit.org/mytaglib的标签库处理 -->
<mytag:query
    driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/javaee"
    user="root"
    pass="32147"
    sql="select * from newsinf"/>
 



在浏览器中浏览该页面,看到从数据库里查询到 2 条记录,当然这也需要底层 javaee 数据库里包含 newsinf 数据表,且该数据表里包含这两条记录才行。

在 JSP 页面中只需要使用简单的标签,即可完成“复杂”的功能:执行数据库查询,并将查询结果在页面上以表格形式显示。这也正是自定义标签库的目的——以简单的标签,隐藏复杂的逻辑。

当然,并不推荐在标签处理类中访问数据库,因为标签库是表现层组件,它不应该包含任何业务逻辑实现代码,更不应该执行数据库访问,它只应该负责显示逻辑。


--------------------------------------------------------------------------------
带标签体的标签

带标签体的标签,可以在标签内嵌入其他内容(包括静态的 HTML 内容和动态的 JSP 内容),通常用于完成一些逻辑运算,例如判断和循环等。下面以一个迭代器标签为示例,介绍带标签体标签的开发过程。

一样先定义一个标签处理类,该标签处理类的代码如下:

public class IteratorTag extends SimpleTagSupport
{
    //标签属性,用于指定需要被迭代的集合
    private String collection;
    //标签属性,指定迭代集合元素,为集合元素指定的名称
    private String item;
    //collection属性的setter和getter方法
    public void setCollection(String collection)
    {
        this.collection = collection;
    }
    public String getCollection()
    {
        return this.collection;
    }
    //item属性的setter和getter方法
    public void setItem(String item)
    {
        this.item = item;
    }
    public String getItem()
    {
        return this.item;
    }
    //标签的处理方法,简单标签处理类只需要重写doTag方法
    public void doTag() throws JspException, IOException
    {
        //从page scope中获取属性名为collection的集合
        Collection itemList = (Collection)getJspContext().
            getAttribute(collection);
        //遍历集合
        for (Object s : itemList)
        {
            //将集合的元素设置到page 范围
            getJspContext().setAttribute(item, s );
            //输出标签体
            getJspBody().invoke(null);
        }
    }
}
 [\code]


上面标签处理类与前面处理类并没有太大的不同,该处理类包含 2 个属性,并为这两个属性提供了 setter 和 getter 方法。标签处理类的 doTag 方法首先从 page 范围内获取了指定名称的 Collection 对象,然后遍历 Collection 对象的元素,每次遍历都调用了 getJspBody() 方法,如程序中粗体字代码所示,该方法返回该标签所包含的标签体:JspFragment 对象,执行该对象的 invoke() 方法,即可输出标签体内容。该标签的作用是:遍历指定集合,每遍历一个集合元素,即输出标签体一次。

因为该标签的标签体不为空,配置该标签时指定 body-content 为 scriptless,该标签的配置代码片段如下代码所示:

<!-- 定义第三个标签 -->
<tag>
    <!-- 定义标签名 -->
    <name>iterator</name>
    <!-- 定义标签处理类 -->
    <tag-class>lee.IteratorTag</tag-class>
    <!-- 定义标签体支持JSP脚本 -->
    <body-content>scriptless</body-content>
    <!-- 配置标签属性:collection -->
    <attribute>
        <name>collection</name> 
        <required>true</required>
        <fragment>true</fragment>
    </attribute>
    <!-- 配置标签属性:item -->
    <attribute>
        <name>item</name> 
        <required>true</required>
        <fragment>true</fragment>
    </attribute>
</tag>
 



上面配置片段中粗体字代码指定该标签的标签体可以是静态 HTML 内容,也可以是表达式语言。

为了测试在 JSP 页面中使用该标签的效果,我们首先把一个 List 对象设置成 page 范围的属性,然后使用该标签来迭代输出 List 集合的全部元素。

JSP 页面代码如下:

<%@ page import="java.util.*"%>
<%@ page contentType="text/html; charset=GBK"%>
<!-- 导入标签库,指定mytag前缀的标签,
    由http://www.crazyit.org/mytaglib的标签库处理 -->
<%@ taglib uri="http://www.crazyit.org/mytaglib" prefix="mytag"%>
<html>
    <head>
        <title>带标签体的标签-迭代器标签</title>
    </head>
    <body>
        <h2>带标签体的标签-迭代器标签</h2>
        <hr>
        <%
        //创建一个List对象
        List<String> a = new ArrayList<String>();
        a.add("hello");
        a.add("world");
        a.add("java");
        //将List对象放入page范围内
        pageContext.setAttribute("a" , a);
        %>
        <table border="1" bgcolor="aaaadd" width="300">
        <!-- 使用迭代器标签,对a集合进行迭代 -->
        <mytag:iterator collection="a" item="item">
            <tr>
                <td>${pageScope.item}</td>
            <tr>
        </mytag:iterator>
        </table>
    </body>
</html>
 



上面页面代码中粗体字代码即可实现通过 iterator 标签来遍历指定集合,浏览该页面即看到a中的数据展示在了页面中。显示了使用 iterator 标签遍历集合元素的效果,从 iteratorTag.jsp 页面的代码来看,使用 iterator 标签遍历集合元素比使用 JSP 脚本遍历集合元素要优雅得多,这就是自定义标签的魅力。

实际上 JSTL 标签库提供了一套功能非常强大标签,例如普通的输出标签,像我们刚刚介绍的迭代器标签,还有用于分支判断的标签等等,JSTL(JSP 标准标签库)都有非常完善的实现。除此之外,Apache 下还有一套 DisplayTags 的标签库实现,做得也非常不错。


分享到:
评论

相关推荐

    自定义标签实现的分页

    本篇文章将详细讲解如何利用Hibernate框架的自定义标签来实现分页功能,供开发者们参考和借鉴。 首先,我们要了解Hibernate的基本概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发人员使用面向对象...

    Taglib自定义标签分页

    2. **TLD文件**:定义了自定义标签的元数据,包括标签的名字、描述、属性等。例如,分页标签可能有一个`page`属性用于设置当前页码,一个`total`属性用于设定总记录数,以及一个`perPage`属性用于设置每页显示的记录...

    JSP期末考试题借鉴.pdf

    2. JSP自定义标签: - 当JSP执行自定义标签时,遇到结束标签会调用`doEndTag()`方法来执行处理。 3. JSP隐式对象: - `pageContext`、`application`和`out`都是JSP隐式对象,而`context`不是。正确的是`...

    基于JavaScript ECharts的Java自定义标签实现设计源码

    本项目是一个基于JavaScript ECharts和Java技术的自定义标签实现设计源码,包含475个文件,包括167个JavaScript文件、108个PNG图片文件、45个GIF动画文件、35个HTML文件、35个Java源文件、20个CSS样式文件、14个JSP...

    SSH集成+分页抽象类+自定义标签 == 分页数据效果

    这里提到的`PageTag`是Java Servlet JSP自定义标签库(Tag Library)的一部分,用于在视图层展示分页信息。`PageTag`类通常包含处理分页逻辑的方法,如计算总页数、获取当前页数据等。同时,需要创建对应的标签描述...

    自定义web服务器

    自定义Web服务器也借鉴了这种结构,特别是`webapps`目录,作为部署项目的入口。开发者可以根据需要调整其他目录的功能和位置。 其次,IIS(Internet Information Services)是微软提供的一个Web服务器,其首页设置...

    JSP面试题及答案借鉴.pdf

    2. 自定义标签 自定义标签要继承哪个类?这个类可以继承TagSupport或者BodyTagSupport,两者的差别是前者适用于没有主体的标签,而后者适用于有主体的标签。如果选择继承TagSupport,可以实现doStartTag和doEndTag...

    JavaWeb开发(jsp)课程设计借鉴.pdf

    同时,JSP还支持自定义标签库,降低对脚本语言的依赖,增强代码的可重用性。 JDBC是Java语言中与数据库交互的标准接口,提供连接数据库、执行SQL语句和处理结果的能力。无论数据库类型,开发者都可以使用统一的API...

    超级封装的.tag标签分页、超级简化jsp内的分页代码、eclipse源码

    `.tag`文件是JSP标准标签库(JSTL)的一部分,用于创建自定义标签库。开发者可以将复杂的Java代码或业务逻辑封装在.tag文件中,然后在JSP页面上通过标签调用来使用,这样可以提高代码的可读性和复用性,降低JSP页面...

    [其他类别]分页 QQ菜单 jsp标签_noka3.9.zip

    JSP自定义标签库(Tag Library)允许开发者创建自己的标签,用于封装复杂的业务逻辑或视图展示。通过分析项目中的标签,我们可以学习如何创建和使用自定义标签,以及它们如何与JavaBeans和Servlet协作。 4. **Web...

    web应用开发技术,jsp应用开发技术复习要点[借鉴].pdf

    2. **`&lt;%@ taglib %&gt;`**:用于引入自定义标签库,指定标签库的URI和前缀。 - `url="relative tagLibURL"`:标签库的URI。 - `prefix="tagPrefix"`:前缀,用于区分不同的标签库中的相同标签名。 #### 五、JSP注释...

    JSP+mysql毕业设计管理系统

    2. 控制逻辑:通过JSP的脚本元素和自定义标签实现页面跳转、数据验证等功能。 3. 数据访问:通过JavaBeans或Servlet与后台数据库进行交互,实现数据的增删改查。 接着,我们来看看MySQL数据库。MySQL是一种关系型...

    毕业设计用读书笔记(jsp)

    JSP动作是XML标记,如`&lt;jsp:include&gt;`、`&lt;jsp:forward&gt;`等,它们负责在运行时操作资源,如包含其他页面、转发请求、插入用户自定义标签等。 5. **JSP与Servlet的关系** JSP本质上是Servlet的简化版,两者都是Java...

    JSP源码——[整站程序]8优技巧网_8ujq.zip

    页指令用于设置页面全局属性,包含指令用于合并多个文件,标签库指令用于引入自定义标签库。 2. JSP动作:如&lt;jsp:include&gt;、&lt;jsp:forward&gt;、&lt;jsp:params&gt;等,它们负责在运行时动态插入内容或调用其他资源。 3. EL...

    jsp源码 个人博客网站

    标签“jsp”强调了此项目的技术栈,即使用JSP进行服务器端编程。而“源码”意味着我们有机会看到完整的代码结构,了解每个部分如何协同工作,这对于学习和改进现有代码,或者自定义功能非常有价值。 【压缩包子文件...

    《开发者突击:JSP网络开发经典模块实现全集》系统模块源码5

    "公用lib2"可能包含了自定义的JSTL标签,以便在多个页面间共享功能。 5. **MVC模式**:虽然JSP本身并不强制遵循MVC(Model-View-Controller)架构,但许多JSP项目会采用这种模式组织代码。源码中可能有对模型、视图...

    java_web试题[借鉴].pdf

    2. **自定义标签配置文件**:自定义标签的配置文件通常命名为`.tld`(Tag Library Descriptor),需要放在`WEB-INF`目录下,以便Web容器能够找到并解析这些标签库定义。正确答案是D,即`WEB-INF`。 3. **会话跟踪...

    JSP\EasyJF官网全站源码

    JSP的核心概念包括JSP页面、指令、脚本元素、动作和自定义标签等。开发者可以利用JSP来实现业务逻辑,同时通过内置对象如request、response、session等来处理HTTP请求和响应。 EasyJF是一个基于JSP的开源企业级Java...

    JSP网上校友录设计(源代码+论文).zip

    8. **源代码分析**:通过阅读源代码,可以学习到如何使用JSP标签库(JSTL)、EL表达式以及自定义标签,了解如何组织和编写Web应用的各个组件。 9. **部署与运行**:项目可能提供了部署说明,包括服务器配置、数据库...

Global site tag (gtag.js) - Google Analytics