컨텍스트 루트 이름을 포함하지 않고 상대 경로를 사용하는 방법은 무엇입니까?


78

내 정적 파일 (CSS, JS)을 작업하려면 /AppName/templates/style/main.css. 상대 경로를 작성할 수있는 해결책이 style/main.css있습니까?


2
전체 경로를 작성해야하는 이유와 위치 는 무엇입니까? 내가 생각할 수있는 거의 모든 곳에서 style/main.css작동해야합니다. 그렇지 않은 곳이있을 수 있지만, 실제로하려는 일을 사람들에게 알리지 않으면 사람들이 당신을 도울 수 있는지 여부는 매우 타락하거나 놓칠 것입니다.
TJ Crowder

CSS 파일을 내 jsp 페이지에 연결하고 싶습니다. 설명을 쓰지 않았습니다. 가장 간단하고 이미지 만 사용할 수 있기 때문에 모두가 추측 할 수 있습니다. 그래도 : 미안 해요. 내 실수 ...
kspacja

답변:


168

실제 우려 사항이 웹앱 컨텍스트 ( "AppName"부분)의 동적 성인 경우 HttpServletRequest#getContextPath().

<head>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/templates/style/main.css" />
    <script src="${pageContext.request.contextPath}/templates/js/main.js"></script>
    <script>var base = "${pageContext.request.contextPath}";</script>
</head>
<body>
    <a href="${pageContext.request.contextPath}/pages/foo.jsp">link</a>
</body>

당신은 당신이 반복 할 필요가 없습니다 있도록 모든 상대 링크에 대한 기본 경로를 설정하려는 경우 ${pageContext.request.contextPath}모든 상대 링크를 사용하는 <base>태그를. 다음은 JSTL 함수의 도움을받은 예입니다 .

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<head>
    <c:set var="url">${pageContext.request.requestURL}</c:set>
    <base href="${fn:substring(url, 0, fn:length(url) - fn:length(pageContext.request.requestURI))}${pageContext.request.contextPath}/" />
    <link rel="stylesheet" href="templates/style/main.css" />
    <script src="templates/js/main.js"></script>
    <script>var base = document.getElementsByTagName("base")[0].href;</script>
</head>
<body>
    <a href="pages/foo.jsp">link</a>
</body>

이렇게하면 모든 상대 링크 (예 : 또는 구성표로 시작 하지 않음/ )가 <base>.

이것은 어떤 식 으로든 Tomcat과 특별히 관련이 없습니다. HTTP / HTML 기본과 관련이 있습니다. 다른 모든 웹 서버에서 동일한 문제가 발생합니다.

또한보십시오:


내가 pageContext.request.contextPath를 사용 해달라고 난 정말 당신이 더 많은 설명 할 수 내가 컨텍스트 넷빈즈에서 프로젝트 속성을 변경할 수 있습니다 그것을 필요로 할 때 내가보고 해달라고
샤리프를

1
$ {pageContext ... 나를 위해 작동하지 않습니다. 그냥 로컬 호스트 같은 것을 생성 : 8080 / 프로필 / $ % 7BpageContext.request.context % 7D / CSS / 프로필 /
MegaMatt

5
@Matt : 최소한 JSP 2.0으로 업그레이드하십시오 (10 년 전에 출시됨). 또는 <c:out>. 완전히 무지하고 레거시 소프트웨어를 갖는 것은 반대 투표를 할 정당한 이유가 아닙니다.
BalusC 2013

1
@Vnge : JSP가 JS 변수로 인쇄하게 하시겠습니까?
BalusC

1
@Natix : 휴식? 그것은 것 들이 의도 하는 모든 상대 URL의 기본 URL로. ao stackoverflow.com/a/1889957 도 참조하십시오 . 기술 구현에 맞지 않으면 사용하지 마십시오.
BalusC

21

응용 프로그램 컨텍스트 상대 경로와 함께 <c:url>-tag 를 사용하십시오 .

value매개 변수가로 시작 /, 다음 태그는 응용 프로그램 상대 URL로 취급하고 URL로 응용 프로그램 이름을 추가합니다. 예:

jsp :

<c:url value="/templates/style/main.css" var="mainCssUrl" />`
<link rel="stylesheet" href="${mainCssUrl}" />
...
<c:url value="/home" var="homeUrl" />`
<a href="${homeUrl}">home link</a>

도메인 상대 URL이있는이 html이됩니다.

<link rel="stylesheet" href="/AppName/templates/style/main.css" />
...
<a href="/AppName/home">home link</a>

2

Tomcat의 $ cwd 인 일부 디렉토리에서 tomcat을 시작합니다. 이 $ cwd에 상대적인 경로를 지정할 수 있습니다.

당신이 가지고 있다고 가정

home
- tomcat
 |_bin
- cssStore
 |_file.css

그리고 "bin / startup.sh"명령을 사용하여 ~ / tomcat에서 tomcat을 시작한다고 가정합니다.

~ / tomcat은 tomcat의 홈 디렉토리 ($ cwd)가됩니다.

이제 서블릿의 클래스 파일에서 "../cssStore/file.css"에 액세스 할 수 있습니다.

도움이되는 희망-MS


2

대신 전체 링크를 사용하여 아래와 같이 만들 수 있습니다 (해결 방법은 jsp 파일과 관련됨).

JSTL을 사용하여 다음과 같이 만들 수 있습니다. css, js와 같은 리소스를 연결하려면 :

     <link rel="stylesheet" href="${pageContext.request.contextPath}/style/sample.css" />
     <script src="${pageContext.request.contextPath}/js/sample.js"></script>   

간단히 링크를 만들려면 :

     <a id=".." class=".." href="${pageContext.request.contextPath}/jsp/sample.jsp">....</a>

태그에 익숙해 질 가치가 있습니다.

   <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

아래와 같이 할 수있는 jsp 메서드도 있지만 위와 같이 더 좋은 방법이 있습니다.

   <link rel="stylesheet" href="<%=request.getContextPath()%>/style/sample.css" />
   <script type="text/javascript" src="<%=request.getContextPath()%>/js/sample.js"></script>

간단히 링크를 만들려면 :

   <a id=".." class=".." href="<%=request.getContextPath()%>/jsp/sample.jsp">....</a>

2

이것은 더 간단하게 할 수 있습니다.

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

모든 URL은 불필요 domain:port하지만 애플리케이션 컨텍스트로 구성됩니다.


-1

이것은 내가 사용해온 @Ralph 제안의 파생물입니다. c:urlJSP의 맨 위에을 추가하십시오 .

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url value="/" var="root" />

그런 다음 페이지에서 루트 변수를 참조하십시오.

<link rel="stylesheet" href="${root}templates/style/main.css">
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.