Базовый путь в 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"

Но когда другие люди пытаются посетить мое приложение, они используют:

http://192.168.x.x:8080/app.

теперь браузер все еще пытается загрузить 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}" />

Как насчет

<base href="${pageContext.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)}/" />
Другие вопросы по тегам