浏览器可以';调用转发到JSP的Servlet时,不能访问/查找相关资源,如CSS、图像和链接
当我将servlet转发到JSP时,我在加载CSS和图像以及创建指向其他页面的链接方面遇到了问题。具体地说,当我将我的浏览器可以';调用转发到JSP的Servlet时,不能访问/查找相关资源,如CSS、图像和链接,css,image,jsp,servlets,Css,Image,Jsp,Servlets,当我将servlet转发到JSP时,我在加载CSS和图像以及创建指向其他页面的链接方面遇到了问题。具体地说,当我将我的设置为index.jsp时,就会加载CSS并显示我的图像。但是,如果我将我的设置为HomeServlet,将控制转发到index.jsp,则不会应用CSS,也不会显示我的图像 我的CSS文件位于web/styles/default.CSS 我的图像位于web/images/中 我正在链接到我的CSS,如下所示: 我正在显示我的图像,如下所示: 这个问题是如何产生的?我如何
设置为index.jsp
时,就会加载CSS并显示我的图像。但是,如果我将我的
设置为HomeServlet
,将控制转发到index.jsp
,则不会应用CSS,也不会显示我的图像
我的CSS文件位于web/styles/default.CSS
我的图像位于
web/images/
中
我正在链接到我的CSS,如下所示:
我正在显示我的图像,如下所示:
这个问题是如何产生的?我如何解决它
更新1:我添加了应用程序的结构,以及一些可能有用的其他信息
header.jsp
文件是包含CSS链接标记的文件。web.xml中的HomeServlet
设置为我的欢迎文件
:
家庭小旅馆
servlet在web.xml
中声明并映射为以下内容:
家庭小旅馆
com.brianblog.frontend.HomeServlet
家庭小旅馆
/
更新2:我终于发现了问题-我的servlet映射错误。显然,当将Servlet设置为
时,它不能有/
的URL模式,我觉得这有点奇怪,因为这不代表站点的根目录吗
新的映射如下所示:
家庭小旅馆
/家庭小旅馆
您必须分析实际的HTML输出,以获得提示
另一方面,如果您以一个/
开头,这意味着“来自上下文”,那么像这样给出的路径意味着“来自当前位置”。您的欢迎页面被设置为该Servlet。所以所有css、图像路径都应该相对于servlet目录给出。这是个坏主意!为什么需要servlet作为主页?将.jsp设置为索引页并从那里重定向到任何页面
您是否试图从db中填充任何字段?这就是您使用servlet的原因吗?JSP文件生成的HTML页面中的所有相对URL都与当前请求URL(您在浏览器地址栏中看到的URL)相对,而不是与您所期望的JSP文件在服务器端的位置相对。也就是说,Web浏览器必须通过URL单独下载这些资源,而不是Web服务器必须以某种方式从磁盘中包含这些资源
除了更改相对URL以使其相对于servlet的URL而不是JSP文件的位置之外,解决此问题的另一种方法是使其相对于域根(即从/
开始)。这样,当您更改servlet的URL时,就不必担心再次更改相对路径
但是,您可能不希望硬编码上下文路径。非常合理。您可以通过${pageContext.request.contextPath}
获得EL中的上下文路径
(可通过
轻松缩短,并在其他地方用作${root}
)
或者,如果您不担心无法读取的XML和损坏的XML语法突出显示,请使用:
" />
无论哪种方式,如果你有大量的相对URL,这都是相当麻烦的。为此,你可以使用
标记。所有相对URL都将立即成为相对于它的。但是,它必须从方案开始(http://
,https://
,等等).在纯EL中没有简单的方法获得基本上下文路径,因此我们需要这里的一些帮助
${req.requestURL}
...
这反过来(再次)有一些警告。锚(标识符)也将成为相对于基本路径的!您希望将其改为相对于请求URL(URI)。因此,更改如下
到
每种方法都有其优缺点。选择哪种方法取决于您。至少,您现在应该了解这个问题是如何产生的以及如何解决它:)
另见:
如果您使用的是Spring MVC,那么您需要为静态内容声明默认的action servlet。在Spring-action-servlet.xml中添加以下条目。这对我很有用
注意:将所有静态内容保留在WEB-INF之外
<!-- Enable annotation-based controllers using @Controller annotations -->
<bean id="annotationUrlMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="0" />
</bean>
<bean id="controllerClassNameHandlerMapping" class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="order" value="1" />
</bean>
<bean id="annotationMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
我在Spring MVC应用程序中遇到了类似的问题。我使用了
标记来解决这个问题
请查看以下链接,了解更多详细信息
至于你的更新,我对其中的原因感到困惑。再深入一点,发现了这个宝石:
- yoursite.com成为yoursite.com/
- yoursite.com/是一个目录,因此将扫描欢迎文件列表
- yoursite.com/CMS是第一个欢迎文件(“欢迎文件列表中的CMS”),并且有一个/CMS到MyCMS servlet的映射,因此可以访问servlet
资料来源:
因此,映射是有意义的
现在可以自由使用${pageContext.request.contextPath}/path/as src/href作为相关链接!简短回答-在jsp中添加以下行,这将定义基础
base href=“/{root of your application}/”下面的代码适合我
而不是
使用
你也可以试试这个。因为这对我很有效,而且很简单
<style>
<%@ include file="/css/style.css" %>
</style>
我不确定您的意思。如果我将css链接更改为:我的意思是您可以从浏览器查看HTML源代码,以确定路径是否正确。如果不正确,您需要做什么