在JSP中撰写网址(Composing URL in JSP)

2019-08-18 06:41发布

比方说,我目前的网址是: /app.jsp?filter=10&sort=name

我在JSP分页组件,它应该包含类似的链接:
/app.jsp?filter=10&sort=name&page=xxx

如何通过增加新的参数,以当前URL创建JSP有效的网址? 我不想使用JSP的Java代码,也没有与像URL结束:
/app.jsp?filter=10&sort=name&?&page=xxx ,或/app.jsp?&page=xxx

Answer 1:

好吧,我找到答案。 第一个问题是,我必须保持在URL的所有电流参数,并只更改page的参数。 要做到这一点我必须遍历当前所有的参数,并添加那些我不想改变URL。 然后我说我想要么更改或添加参数。 所以我结束了这样的解决方案:

<c:url var="nextUrl" value="">
<c:forEach items="${param}" var="entry">
    <c:if test="${entry.key != 'page'}">
        <c:param name="${entry.key}" value="${entry.value}" />
    </c:if>
</c:forEach>
<c:param name="page" value="${some calculation}" />
</c:url>

这将创建一个非常干净的URL独立的page请求中的参数。 奖金这种方法是URL可以是一切事情。



Answer 2:

<c:url var="myURL" value="/app.jsp">
   <c:param name="filter" value="10"/>
   <c:param name="sort" value="name"/>
</c:url>

要显示的网址,你可以做这样的事情

<a href="${myURL}">Your URL Text</a>


Answer 3:

构建基于当前URL的新URL,你首先需要从获取当前URL request对象 。 访问request对象在JSP使用pageContext 隐式对象由JSP表达式语言定义:

${pageContext.request.requestURL}  

这里是一个JSP页面构建URL的简单的例子:

test.jsp的

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <title>Test Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <h1>Testing URL construction</h1>
    <c:choose>
        <c:when test="${pageContext.request.queryString != null}">
            <a href="${pageContext.request.requestURL}?${pageContext.request.queryString}&page=xxx">Go to page xxx</a>
        </c:when>
        <c:otherwise>
            <a href="${pageContext.request.requestURL}?page=xxx">Go to page xxx</a>
        </c:otherwise>
    </c:choose>
</body>
</html>


该解决方案可以让你构建的URL 根据当前的URL是否已经包含了一些查询字符串或没有 。 所以,你分别要么追加

?${pageContext.request.queryString}&page=xxx

要不就

?page=xxx

当前的URL。

JSTL和表达式语言被用来实施检查查询字符串。 我们使用getRequestURL()方法来获取当前的URL。



文章来源: Composing URL in JSP
标签: java jsp url jstl el