2011-03-30 1 views
0

В моем приложении я использую Struts2, и создать базу для действий SLOVE проблемы пути:BasePath в JSP

class BaseAction{ 
    private String path; 
    static{ 
    HttpServletRequest request = ServletActionContext.getRequest(); path=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();+"/"; 
    } 
} 

Тогда все другие действия продлить этот baseaction.

В моей странице JSP, я добавить путь в качестве основы:

xx.jsp:

.... 
<head> 
    <base href="<s:property value='path'/>"> 
    <script ... src="res/test.js" /> 
</head> 

Он хорошо работает в моей собственной машине.

http://localhost:8080/app В test.js canbe найдены "HTTP: // локальный: 8080/приложение/RES/test.js"

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

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

сейчас, браузер все еще пытаются загрузить test.js по "HTTP: // локальный: 8080/приложение/RES/test.js"

Конечно, он не может получить его. Реальный путь должен быть: http://192.168.x.x:8080/app/res/test.js

SInce, «путь» - это жесткий код в действии, любая идея исправить это?

+0

Вы можете убедиться, что база HREF правильно в HTML эти другие люди видят? И доступ к контексту сервлета или запросу от статического инициализатора, кажется, требует неприятностей. – Thilo

+0

... как и установка переменной экземпляра из статического инициализатора. Как это вообще компилируется? – Thilo

+0

На странице html, которую другие люди видят, базовый href является «http: // localhost: 8080/app» – hguser

ответ

2

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

<base href="${request.contextPath}" /> 
+0

@hguser - мой ответ по-прежнему применяется, я думаю. – Bozho

+0

Спасибо, я попробую завтра. – hguser

+0

Вы правы, я не должен устанавливать путь в статическом блоке, он должен быть получен в каждом запросе. – hguser

0

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

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

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

Вы имеете в виду, что я не могу использовать статический блок, и я должен создать путь по каждому запросу? – hguser

+0

Я этого не говорил, и я понятия не имею, поскольку я не занимаюсь Struts2, но вы хотя бы сказали, что он работает локально, а не удаленно, это поведение действительно подтверждается неправильным способом извлечения базового пути (вы вместо локального адреса вместо локального адреса). Вы все равно попробовали мое предложение? – BalusC

+0

Теперь, я дома, я попробую вас предложить завтра. :) – hguser

 Смежные вопросы

  • Нет связанных вопросов^_^