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

时间:2017-01-04 05:13:40

标签: java jstl

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标签看似多余,但我确定我错过了什么?

3 个答案:

答案 0 :(得分:8)

正如教程要点所说,它是用于格式化目的的 URL ,它可以存储在变量中。< / p>

示例你有:

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

如果您点击 TEST ,则会转到第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

答案将是您项目的上下文文件夹以及您输入的网址

context /test.html将是输出。

我认为其目的是让context(当前申请)已经提供给URL,您只需要添加剩余的URL部分。

答案 1 :(得分:1)

这是我的训练应用中的一小段代码,其中我使用了<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" />

我希望你明白我的意思:)

答案 2 :(得分:0)

除了其他答案中已经提到的目的之外,c:url标记的另一个目的是重写从JSP页面返回的URL。例如会话跟踪。如果用户代理不支持(或已禁用)cookie,则将jsessionid附加到URL。

  

仅在禁用cookie的情况下,标记才会在URL中包含会话ID;否则,它将返回不变的URL。

请参阅:https://docs.oracle.com/javaee/5/tutorial/doc/bnakh.html#bnakn