कई दृष्टिकोण कहां हैं।
1) आम टुकड़ा में चर से आबद्ध आधार:
common.jspf
:
<%@tag language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:url value="/" var="base"/>
या की तरह:
<c:set var="base" value="${pageContext.request.contextPath}"/>
और प्रत्येक पृष्ठ में टुकड़ा में शामिल हैं:
<%@include file="base.jspf"%>
<script src="${base}/js/jquery.js"></script>
<link href="${base}/css/bootstrap.css" rel="stylesheet" type="text/css">
<a href="${base}/index.html">Home</a>
2)${pageContext.request.contextPath}
हर जगह का उपयोग करें:
<script src="${pageContext.request.contextPath}/js/jquery.js"></script>
<link href="${pageContext.request.contextPath}/css/bootstrap.css" rel="stylesheet" type="text/css">
<a href="${pageContext.request.contextPath}/index.html">Home</a>
3) मेरी पसंदीदा है:
/src/java/company/project/web/filter/BaseFilter.java
import java.io.IOException;
import javax.servlet.*;
/**
* Make sane JSP, instead of:
* <pre><a href="<c:url value='/my/path/${id}.html'/>">Title</a></pre>
* allow to use:
* <pre><a href="${ctx}/my/path/${id}.html">Title</a></pre>
*/
public class BaseFilter implements Filter {
@Override
public void init(FilterConfig fc) {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setAttribute("base", request.getServletContext().getContextPath());
chain.doFilter(request, response);
}
@Override
public void destroy() { }
}
: फिल्टर उस विशेषता के लिए आधार में शामिल जोड़ने तथा web.xml
में है कि फिल्टर रजिस्टर:
<filter>
<filter-name>BaseFilter</filter-name>
<filter-class>company.project.web.filter.BaseFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>BaseFilter</filter-name>
<url-pattern>*.htm</url-pattern>
<url-pattern>*.json</url-pattern>
</filter-mapping>
और (ऊपर लेकिन आवश्यकता के बिना की तरह बॉयलरप्लेट टुकड़े शामिल करने के लिए) स्वच्छ सिंटैक्स का उपयोग करें:
<script src="${base}/js/jquery.js"></script>
<link href="${base}/css/bootstrap.css" rel="stylesheet" type="text/css">
<a href="${base}/index.html">Home</a>
नोट मुझे लगता है कि फिल्टर में अतिरिक्त विशेषताएं निर्धारित करते हैं, के लिए सीएसएस/जेएस के विकास और minified संस्करण के बीच स्विच करने के लिए उदाहरण:
private String min;
@Override
public void init(FilterConfig fc) {
min = fc.getServletContext().getInitParameter("min");
if (min == null)
min = fc.getInitParameter("min");
if (min == null)
min = "min";
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setAttribute("ctx", request.getServletContext().getContextPath());
request.setAttribute("min", min);
chain.doFilter(request, response);
}
और इसी JSP कोड:
<script src="${base}/js/jquery.${min}.js"></script>
<link href="${base}/css/bootstrap.${min}.css" rel="stylesheet" type="text/css">
प्रारंभिक पैरामीटर min
minified संस्करण के लिए फॉल-बैक के साथ contex तैनाती डिस्क्रिप्टर में युद्ध फाइल करने के लिए बाहर से में dev
या min
करने के लिए सेट जब सेट नहीं कर सकता है।
4) एक scriplets का उपयोग करें:
<a href="<%=request.getContextPath()%>/index.html">Home</a>
'$ {pageContext.request.contextPath}/nextPage.jsp'? आउटबाउंड के लिए काम नहीं करेगा, लेकिन यह एप्लिकेशन * के भीतर लिंक * साफ बनाता है। –
हालांकि लक्ष्य को हल नहीं करता है। बिंदु पूरे आउटबाउंड लिंक स्वरूपण तर्क के माध्यम से यूआरएल चलाने के लिए है, टोमकैट प्रदान करता है, और आपके द्वारा इंस्टॉल किए गए किसी भी फ़िल्टर, जैसे urlrewrite। इस मामले में हम केवल पूर्ण पथों की तुलना में कुछ अधिक जटिल कर रहे हैं, हम कैश बस्टिंग के लिए बिल्ड संस्करण को शामिल करने के लिए जेएस फाइलों को फिर से लिख रहे थे। – JBCP