サーブレット内のURLの処理をいくつか行い、埋め込み式を解決できます。
デモンストレーションのためだけにJSPを使用しました。 これは一般的な解決策ではありません。このケースのみを扱います。他の方法で複数のEL /プレースホルダでは機能しません。コードは、基本的に
- は、区切り文字によって部品にURLを分割
${
と}
されない何 、
- 埋め込ま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またはプロパティ・ファイル
で唯一のベースパスを保存
特典は、
です。
- 少ない繰り返し、以下DB /ディスクストレージが無駄になります
- 、
- ベースURLに
を変更することが