Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
浏览器可以';调用转发到JSP的Servlet时,不能访问/查找相关资源,如CSS、图像和链接_Css_Image_Jsp_Servlets - Fatal编程技术网

浏览器可以';调用转发到JSP的Servlet时,不能访问/查找相关资源,如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,如下所示: 我正在显示我的图像,如下所示: 这个问题是如何产生的?我如何

当我将servlet转发到JSP时,我在加载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源代码,以确定路径是否正确。如果不正确,您需要做什么