Базовый путь в JSP - PullRequest
       11

Базовый путь в JSP

0 голосов
/ 30 марта 2011

В своем приложении я использую 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 ]

2 голосов
/ 30 марта 2011

В блоке инициализации static я бы не ожидал, что у вас будет доступный запрос.Я бы сделал:

<base href="${request.contextPath}" />
0 голосов
/ 30 марта 2011

Вы устанавливаете локальный хост и порт в базовом пути вместо удаленного хоста и порта.

В конце концов, это не очень хорошая конструкция для создания базового пути. Я бы предложил создать его следующим образом:

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)}/" />
...