您可以對servlet中的url進行一些處理,然後解析嵌入的表達式。
我只是爲了演示而使用了一個JSP。 這不是一個通用的解決方案。它只服務於這種情況。它不能以其他方式與多個或級聯的EL /佔位符一起工作。
代碼做什麼,基本上是
- 分裂由分隔符零件鏈接
${
和}
,
- 解決嵌入式EL /佔位
- 產生通過串聯新的URL
該代碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP EL resolver</title>
</head>
<body>
<%
session.setAttribute("user.userId", "myuser");
pageContext.setAttribute("url", "https://test.com/myapp.action?userid=${user.userId}");
%>
url before preparation: <a href="${url}">${url}</a><br>
<%
String url = (String) pageContext.getAttribute("url");
String[] parts = url.split("\\$\\{|\\}");
String newUrl = parts[0];
String userEL = parts[1];
String sessionUser = session.getAttribute(userEL).toString();
pageContext.setAttribute("url", newUrl + sessionUser);
%>
url after preparation: <a href="${url}">${url}</a><br>
</body>
</html>
輸出:
url before preparation: https://test.com/myapp.action?userid=${user.userId}
url after preparation: https://test.com/myapp.action?userid=myuser
這是一個解決方案,但髒一個。
更好的解決方案將是:
- 存儲在數據庫或僅基本路徑屬性,文件
- 創建一些類,其追加的參數(名稱和值)
好處是:
- 少重複,
- 少DB /磁盤存儲將被浪費,
- 易於維護
- 容易改變的基礎URL
請提供更多的信息。什麼是允許的,什麼不是?什麼可以改變,什麼不可以? –