同一Java包中Javascript的图像src
我已经在Java包中放置了一个.js文件以及一个.css文件和所需的图像。目录结构为:同一Java包中Javascript的图像src,java,javascript,html,image,Java,Javascript,Html,Image,我已经在Java包中放置了一个.js文件以及一个.css文件和所需的图像。目录结构为: info.release.wicket.custom.ajax.link AjaxLoadingLink.java AjaxLoadingLink.css AjaxLoadingLink.js indicator.gif 现在从.css文件中,indicator.gif可以作为background image:url(indicator.gif)访问。但是在.js文件spinner.innerHTML
- info.release.wicket.custom.ajax.link
- AjaxLoadingLink.java
- AjaxLoadingLink.css
- AjaxLoadingLink.js
- indicator.gif
background image:url(indicator.gif)访问代码>。但是在.js文件spinner.innerHTML=“”代码>不工作
在这种情况下,Javascript中的图像路径是什么
如果我将图像放在WAR的resources文件夹中,并以spinner.innerHTML=“”的身份访问它代码>它正在工作。但我需要通过上述方式来实现这一点,即放入包中
谢谢和问候 indicator.gif的路径将相对于调用js文件的实际HTML文档。如果.gif与html文档位于同一文件夹中(或者在您的情况下是.java文件?),那么您可以从那里调用它。指向indicator.gif的路径将与调用js文件的实际html文档相对应。如果.gif与html文档(或者我猜您的例子中是.java文件?)在同一个文件夹中,那么您可以从那里调用它。为什么要将JS放在java包中?如果您将所有文件放在一个目录中,例如/ajaxloading/应该可以工作。包中的Java资源放在WEB-INF\类中,您不能从那里通过相关url寻址资源
另一种可能是编写一个servlet,将所有文件服务于一个包,然后将该servlet映射到web.xml中的url和servlet映射
我也在一个项目中使用它。以下是消息来源:
public class StyleProviderServlet extends HttpServlet {
private static final long serialVersionUID = 7156462313946659366L;
/**
* read buffer.
*/
private static final int BUFFER_SIZE = 102400;
private final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(StyleProviderServlet.class);
/**
* Package
*/
private static final String PACKAGE = "com/mycompany/mypackage/style";
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.handleRequest(req, resp);
}
protected void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String pathInfo = req.getPathInfo();
logger.debug("pathInfo = {}", pathInfo);
StringBuilder resourcePathBuilder = new StringBuilder(100);
resourcePathBuilder.append("/");
resourcePathBuilder.append(PACKAGE);
resourcePathBuilder.append(pathInfo);
String resourcePath = resourcePathBuilder.toString();
logger.debug("resourcePath: {}", resourcePath);
InputStream inputStream = this.getClass().getResourceAsStream(resourcePath);
if (inputStream != null) {
String mimeType = getMimeType(pathInfo);
if (mimeType != null) {
resp.setContentType(mimeType);
}
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
try {
logger.debug("at least {} bytes are ready to be read", bufferedInputStream.available());
ServletOutputStream outputStream = resp.getOutputStream();
int index = -1;
byte[] buffer = new byte[BUFFER_SIZE];
while ((index = bufferedInputStream.read(buffer)) != (-1)) {
outputStream.write(buffer, 0, index);
}
} finally {
bufferedInputStream.close();
}
} else {
logger.debug("no resource found for resourcePath '{}'", resourcePath);
}
}
protected String getMimeType(String pathinfo) {
if (pathinfo != null) {
ServletContext servletContext = getServletContext();
String mimeType = servletContext.getMimeType(pathinfo);
logger.debug("pathInfo :{}, mimeType={}", pathinfo, mimeType);
return mimeType;
} else {
return null;
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.handleRequest(req, resp);
}
}
下面是web.xml中的映射:
<servlet-mapping>
<servlet-name>StyleProviderServlet</servlet-name>
<url-pattern>/style/*</url-pattern>
</servlet-mapping>
StyleProviderServlet
/风格/*
现在,您可以通过url/style/e.g./style/AjaxLoadingLink.css访问com/mycompany/mypackage/style包中的所有文件
您还可以通过这种方式将所有文件放在一个JAR中,并将这个JAR放入WEB-INF/lib为什么要将JS放在java包中?如果您将所有文件放在一个目录中,例如/ajaxloading/应该可以工作。包中的Java资源放在WEB-INF\类中,您不能从那里通过相关url寻址资源
另一种可能是编写一个servlet,将所有文件服务于一个包,然后将该servlet映射到web.xml中的url和servlet映射
我也在一个项目中使用它。以下是消息来源:
public class StyleProviderServlet extends HttpServlet {
private static final long serialVersionUID = 7156462313946659366L;
/**
* read buffer.
*/
private static final int BUFFER_SIZE = 102400;
private final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(StyleProviderServlet.class);
/**
* Package
*/
private static final String PACKAGE = "com/mycompany/mypackage/style";
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.handleRequest(req, resp);
}
protected void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String pathInfo = req.getPathInfo();
logger.debug("pathInfo = {}", pathInfo);
StringBuilder resourcePathBuilder = new StringBuilder(100);
resourcePathBuilder.append("/");
resourcePathBuilder.append(PACKAGE);
resourcePathBuilder.append(pathInfo);
String resourcePath = resourcePathBuilder.toString();
logger.debug("resourcePath: {}", resourcePath);
InputStream inputStream = this.getClass().getResourceAsStream(resourcePath);
if (inputStream != null) {
String mimeType = getMimeType(pathInfo);
if (mimeType != null) {
resp.setContentType(mimeType);
}
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
try {
logger.debug("at least {} bytes are ready to be read", bufferedInputStream.available());
ServletOutputStream outputStream = resp.getOutputStream();
int index = -1;
byte[] buffer = new byte[BUFFER_SIZE];
while ((index = bufferedInputStream.read(buffer)) != (-1)) {
outputStream.write(buffer, 0, index);
}
} finally {
bufferedInputStream.close();
}
} else {
logger.debug("no resource found for resourcePath '{}'", resourcePath);
}
}
protected String getMimeType(String pathinfo) {
if (pathinfo != null) {
ServletContext servletContext = getServletContext();
String mimeType = servletContext.getMimeType(pathinfo);
logger.debug("pathInfo :{}, mimeType={}", pathinfo, mimeType);
return mimeType;
} else {
return null;
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.handleRequest(req, resp);
}
}
下面是web.xml中的映射:
<servlet-mapping>
<servlet-name>StyleProviderServlet</servlet-name>
<url-pattern>/style/*</url-pattern>
</servlet-mapping>
StyleProviderServlet
/风格/*
现在,您可以通过url/style/e.g./style/AjaxLoadingLink.css访问com/mycompany/mypackage/style包中的所有文件
您也可以这样将所有文件放在一个JAR中,并将此JAR放入WEB-INF/libJava与此有什么关系?也用html重新标记此文件。Java与此有什么关系?也用html重新标记此文件。谢谢。但是在这个场景中,我不需要调用.java文件中的映像。js的方法是从.java调用的,因此应该从该.js访问该图像。当您在中加载该javascript时,其中的任何路径都将与您加载到的内容相关,因此无论是HTML文件还是.java文件,您的路径都必须与包含该文件的内容相关。Javascript从来不会自己运行……它的内容被下载到容器环境中并内联运行。使用src调用它与内联编写它没有什么不同,因此所有的路径引用都是相对于容器环境的。谢谢。但是在这个场景中,我不需要调用.java文件中的映像。js的方法是从.java调用的,因此应该从该.js访问该图像。当您在中加载该javascript时,其中的任何路径都将与您加载到的内容相关,因此无论是HTML文件还是.java文件,您的路径都必须与包含该文件的内容相关。Javascript从来不会自己运行……它的内容被下载到容器环境中并内联运行。使用src调用它与内联编写它没有什么不同,因此所有的路径引用都是相对于容器环境的。