我将servlet转发到JSP时,我在加载CSS和图像以及创建指向其他页面的链接时遇到了麻烦。具体而言,当我把我的<welcome-file>
给index.jsp的CSS被加载并正在显示我的图片。但是,如果我把我的<welcome-file>
给HomeServlet其控制推进到index.jsp,CSS中没有被应用,并且不显示我的图片。
我的CSS文件在中web/styles/default.css。
我的图像在web/images/。
我像这样链接到我的CSS:
<link href="styles/default.css" rel="stylesheet" type="text/css" />
我正在显示我的图像,如下所示:
<img src="images/image1.png" alt="Image1" />
这个问题是怎么引起的,我该如何解决?
更新1:我添加了应用程序的结构以及其他可能有用的信息。
替代文字
该header.jsp文件是包含CSS链接标记的文件。该HomeServlet设置为我welcome-file在web.xml:
<welcome-file-list>
<welcome-file>HomeServlet</welcome-file>
</welcome-file-list>
Servlet声明和映射如下web.xml:
<servlet>
<servlet-name>HomeServlet</servlet-name>
<servlet-class>com.brianblog.frontend.HomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HomeServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
更新2:我终于找到了问题-我的servlet映射不正确。显然,在将Servlet设置为您的Servlet时,<welcome-file>
它不能具有的URL模式/,我觉得这很奇怪,因为那不代表网站的根目录吗?
新的映射如下:
<servlet-mapping>
<servlet-name>HomeServlet</servlet-name>
<url-pattern>/HomeServlet</url-pattern>
</servlet-mapping>
JSP文件生成的HTML页面中的所有相对URL都相对于当前请求URL(如您在浏览器地址栏中看到的URL),而不是您所期望的相对于服务器端JSP文件的位置。就是必须通过URL单独下载这些资源的Web浏览器,而不是必须以某种方式从磁盘包括这些资源的Web服务器。
除了更改相对URL以使其相对于servlet的URL而不是JSP文件的位置之外,另一种解决此问题的方法是使它们相对于域根(即以开头/)。这样,您无需担心在更改servlet的URL时再次更改相对路径。
<head>
<link rel="stylesheet" href="/context/css/default.css" />
<script src="/context/js/default.js"></script>
</head>
<body>
<img src="/context/img/logo.png" />
<a href="/context/page.jsp">link</a>
<form action="/context/servlet"><input type="submit" /></form>
</body>
但是,您可能不希望对上下文路径进行硬编码。很合理 您可以通过获取EL中的上下文路径${pageContext.request.contextPath}
。
<head>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/default.css" />
<script src="${pageContext.request.contextPath}/js/default.js"></script>
</head>
<body>
<img src="${pageContext.request.contextPath}/img/logo.png" />
<a href="${pageContext.request.contextPath}/page.jsp">link</a>
<form action="${pageContext.request.contextPath}/servlet"><input type="submit" /></form>
</body>
(可以很容易地将其缩短
${root}
其他地方)
或者,如果您不担心XML不可读并且XML语法突出显示,请使用JSTL <c:url>
:
<head>
<link rel="stylesheet" href="<c:url value="/css/default.css" />" />
<script src="<c:url value="/js/default.js" />"></script>
</head>
<body>
<img src="<c:url value="/img/logo.png" />" />
<a href="<c:url value="/page.jsp" />">link</a>
<form action="<c:url value="/servlet" />"><input type="submit" /></form>
</body>
无论哪种方式,如果您有很多相对URL,那么这将很麻烦。为此,您可以使用
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="req" value="${pageContext.request}" />
<c:set var="uri" value="${req.requestURI}" />
<c:set var="url">${req.requestURL}</c:set>
...
<head>
<base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/" />
<link rel="stylesheet" href="css/default.css" />
<script src="js/default.js"></script>
</head>
<body>
<img src="img/logo.png" />
<a href="page.jsp">link</a>
<form action="servlet"><input type="submit" /></form>
</body>
反过来又有一些警告。锚(#identifierURL)也将相对于基本路径!您想使其相对于请求URL(URI)。所以,改变像
<a href="#identifier">jump</a>
至
<a href="${uri}#identifier">jump</a>
每种方式都有其优点和缺点。选择取决于您。至少,您现在应该了解此问题是如何引起的以及如何解决:)
问题内容: 我正在开发Spring,Hibernate,JSP应用程序。我正在尝试从我的JSP页面显示图像。图像未显示在浏览器中。我也无法将CSS链接到JSP页面。 我的JSP页面是: 我已经设定 用于我的图像和CSS文件夹 我的Spring Security xml是: 问题答案: 我已通过在文件中添加以下映射解决了该问题 并添加图片src网址。喜欢
我是Spring的新手,开始从3.0.5升级到3.2.18,我尝试过修改版本,将工件ID更改为新版本(例如.springframework.core改为spring-core,等等)并在声明中将XSD版本从3.0更新到3.2。我在applicationcontext-security.xml中遇到了一个关于intercept-url的问题 在上述文件中, 应用程序抛出以下异常。 我尝试了不同的方法
我正在做一个简单的表单验证。我无法转发到jsp页面。请参阅下面的代码。行B和行C工作正常,但行A产生错误 行B和行C成功地转到请求的页面,但行A产生此错误
我想知道是否有人有只通过servlet访问网站资源的解决方案。我的所有资源都在WEB-INF下。换句话说,我不希望用户直接访问我的任何资源。
问题内容: 我有一个正在处理的网站布局,其中有一个主要的内容区域,然后在内容区域的四个角处的每个角处都有一个角图形。总体效果是台式吸墨纸。 这是我左上角的代码: 我想制作(如果可能的话)而不是制作四个单独的拐角图像,而是使用原始图像(corner.png)并使用CSS旋转它。 有跨浏览器兼容的方法来做到这一点吗? 非常感谢! 问题答案: CSS旋转45度:
我在我的Ubuntu服务器上安装了jenkins。它说它正在运行,但我无法从本地计算机连接浏览器,也无法访问服务器的桌面以检查是否可以从本地主机连接。 补充信息: 返回: ● 詹金斯。服务-LSB:启动时启动Jenkins加载:加载(/etc/init.d/Jenkins;错误;供应商预设:启用)激活:自2018-09-13 14:46:08-03起激活(退出);1小时11分钟前文档:man:sy