Базовый путь в JSP
В своем приложении я использую struts2 и создаю базовое действие для решения проблемы пути:
class BaseAction{
private String path;
static{
HttpServletRequest request = ServletActionContext.getRequest(); path=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();+"/";
}
}
Тогда все другие действия продлевают эту базовую операцию.
На моей странице JSP я добавляю путь в качестве базы:
xx.jsp:
....
<head>
<base href="<s:property value='path'/>">
<script ... src="res/test.js" />
</head>
Хорошо работает на моей собственной машине.
http://localhost:8080/app test.js можно найти по адресу "http://localhost:8080/app/res/test.js"
Но когда другие люди пытаются посетить мое приложение, они используют:
теперь браузер все еще пытается загрузить test.js по адресу "http://localhost:8080/app/res/test.js"
Конечно, это не может получить это. Реальный путь должен быть: http://192.168.x.x:8080/app/res/test.js
Так как "путь" - это жесткий код в действии, есть идеи, чтобы это исправить?
2 ответа
В static
блок инициализации Я не ожидал, что у вас будет доступный запрос. Я бы сделал:
<base href="${request.contextPath}" />
Вы устанавливаете локальный хост и порт в базовом пути вместо удаленного хоста и порта.
В конце концов, это не очень хорошая конструкция для создания базового пути. Я бы предложил создать его следующим образом:
path = request.getRequestURL().toString().replace(request.getRequestURI(), request.getContextPath()) + "/";
Или просто красиво в JSTL/EL
<c:set var="r" value="${pageContext.request}" />
<base href="${fn:replace(r.requestURL, r.requestURI, r.contextPath)}/" />