您可以对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
请提供更多的信息。什么是允许的,什么不是?什么可以改变,什么不可以? –