jstl的c:url标记的目的是什么?

disho6za  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(390)

tutorialpoint有一个简单的 c:url 如下所示的标记:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:url> Tag Example</title>
</head>
<body>
<a href="<c:url value="/jsp/index.htm"/>">TEST</a>
</body>
</html>

当使用chrome的开发者工具查看相应的渲染时,它呈现如下:

<a href="/jsp/index.htm">TEST</a>

所以 c:url 标签似乎多余,但我肯定我遗漏了什么?

fgw7neuy

fgw7neuy1#

下面是我使用的培训应用程序的一个小片段 <c:url> 标签:

<table>
    <tr>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
        <th>Action</th>
    </tr>

    <c:forEach var="student" items="${student_list}">

        <c:url var="loadStudentLink" value="StudentControllerServlet">
            <c:param name="command" value="load"/>
            <c:param name="id" value="${student.id}"/>
        </c:url>

        <tr>
            <td> ${student.firstName} </td>
            <td> ${student.lastName} </td>
            <td> ${student.email} </td>
            <td> 
                <a href="${loadStudentLink}">Update</a>
            </td>
        </tr>   

    </c:forEach>                
</table>

当然,在这种情况下,我可以使用下面的链接,它将是相同的:

<a href="StudentControllerServlet?command=load&id=${student.id}">Update</a>

简而言之, <c:url> 创建一个普通链接,可以将其存储在变量中并定义其范围。与 <c:param> 可以为链接设置参数的标记。此外,有些人可能会说,使用jstl看起来更整洁。
而且,正如之前所说, <c:url> 已经有应用程序的上下文路径。例如,你可以这样做 <link rel="stylesheet" href="<c:url value="/resources/css/test.css"/>" /> 而不是那样 <link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/test.css" />

erhoui1w

erhoui1w2#

正如教程所说,它是为了格式化您输入的url,并且可以存储在一个变量中。
例如:

<a href="<c:url value="/test.html"/>">TEST</a>

如果单击“测试”,它将转到第页 test.html . 就这么简单。但问题是,什么是价值 <c:url value="/test.html"/> ?
你认为价值只是 /test.html ?
试着测试一下,像这样:

<a href="<c:url value="/test.html" var="testvar" />">TEST</a> // testvar is where you put the url formatted by c:url
<c:out value="${testvar}"/> // you print what is the formatted url

答案将是项目的上下文文件夹加上您输入的url。
context/test.html将是输出。
我认为它的目的是 context (当前应用)已提供给 URL ,只需添加剩余的 URL 部分。

6psbrbz9

6psbrbz93#

除了在其他答案中已经提到的目的之外,还有一个 c:url 标记是重写从jsp页面返回的url。例如会话跟踪。如果用户代理不支持(或已禁用)cookies,jsessionid将附加到url。
只有当cookies被禁用时,标签才会在url中包含会话id;否则,它将返回不变的url。
请参见:https://docs.oracle.com/javaee/5/tutorial/doc/bnakh.html#bnakn

相关问题