Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jstl&x27的目的是什么;SC:url标签?_Java_Jstl - Fatal编程技术网

Java jstl&x27的目的是什么;SC:url标签?

Java jstl&x27的目的是什么;SC:url标签?,java,jstl,Java,Jstl,有一个简单的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"/>"&

有一个简单的
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>
<a href="/jsp/index.htm">TEST</a>
<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

标签示例
当使用Chrome的开发者工具查看相应的渲染时,其渲染如下:

<%@ 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>
<a href="/jsp/index.htm">TEST</a>
<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


因此,
c:url
标记似乎是多余的,但我肯定我遗漏了什么?

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

例如,您有:

<a href="<c:url value="/test.html"/>">TEST</a>
答案将是项目的上下文文件夹,加上您输入的URL

context/test.html将作为输出


我认为它的目的是将
上下文
(当前应用程序)已经提供给
URL
,您只需要添加剩余的
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>

名字
姓
电子邮件
行动
${student.firstName}
${student.lastName}
${student.email}
当然,在这种情况下,我可以使用下面的链接,它将是相同的:

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

简而言之,
创建一个普通链接,您可以将其存储在变量中并定义其范围。 使用
标记,您可以设置链接的参数。 此外,有人可能会说使用JSTL看起来更整洁

另外,正如前面所说,
已经有了应用程序的上下文路径。 例如,您可以这样做



而不是那个


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

只有禁用Cookie时,标签才会在URL中包含会话ID;否则,它将返回未更改的URL

见: