当前位置: 首页 > 知识库问答 >
问题:

Servlet映射在本地工作,但不能在应用引擎的网络服务器上工作

全卜霸
2023-03-14

我遇到了应用引擎上servlet映射的问题。

详细信息
使用我的web.xml配置文件,我将URL模式“/i”映射到WAR路径根目录上的info.html。

当我在本地运行它并访问url localhost:8888/I时,web服务器会正确地重定向到该信息。html网站。但当我推到应用引擎并尝试访问www.mysite时。com/i收到404错误:未找到

问题1。为什么我的服务器映射在本地工作,而不是远程工作?2.有没有其他方法可以映射像www.mysite这样的url模式。com/i到我的war路径中的静态文件?

*虽然我使用的是app engine,但我认为这与其他通过web使用servlet映射的Java服务器类似。xml。此外,我知道映射到静态html文件可能看起来很奇怪,但目前我没有加载任何动态内容。

代码示例
下面我包含了我的web.xml文件的修剪版本以供参考。它隔离了我如何进行重定向。

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

    <servlet>
        <servlet-name>Info</servlet-name>
        <jsp-file>info.html</jsp-file>
    </servlet>

    <servlet-mapping>
        <servlet-name>Info</servlet-name>
        <url-pattern>/i</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

共有2个答案

闻人凯泽
2023-03-14

静态文件,即逐字提供给用户的文件,如图像、CSS或JavaScript,与部署描述符中提到的路径分开处理。请求一个URL路径,该路径与战争中被视为静态文件的文件的路径相匹配,将为该文件提供服务,而不管部署描述符中的servlet和过滤器映射如何。您可以使用appengine web从被视为静态文件的文件中排除文件。xml文件。

也就是说,如果您想将. html映射到URL,那么您必须确保它不是静态的;因为我们知道无论servlet和过滤器映射如何,都会提供静态文件。

为此,您必须使用以下命令将其从静态文件中排除:

<static-files>
    <exclude path="/**.html"/>
</static-files>

这样就可以了。html文件仅为资源文件(默认情况下,所有文件都是静态文件和资源文件;除了.jsp文件和web inf文件夹中的文件)。

但不幸的是,这仍然不能使应用引擎为应用程序选择URL映射(用“jsp文件”定义)。html文件。很可能是因为servlet映射最终指向一个servlet,而为每个servlet生成一个servlet。对于jsp文件,情况并非如此。html文件(或任何其他文件)。

我能想到的唯一解决方案是你重命名。html文件。jsp(并删除静态文件排除;您不再需要它)。这样你就可以把它映射到任何URL。

有趣的是,您可以将非. jsp文件映射到开发服务器上的URL;只是与App Engine的另一个不一致。;)

拓拔弘扬
2023-03-14

请记住,AE并不完全相同:

默认情况下,除了JSP和WEB-INF/中的文件外,App Engine使WAR中的所有文件都可以作为静态文件使用。对于路径与静态文件匹配的URL的任何请求都会将文件直接服务于浏览器,即使路径也与servlet或过滤器映射匹配。您可以使用appengine web配置应用程序引擎将哪些文件视为静态文件。xml文件。

从…起https://developers.google.com/appengine/docs/java/gettingstarted/staticfiles

配置appengine web的说明。xml在这里https://developers.google.com/appengine/docs/java/config/appconfig

我会尝试明确声明:

<static-files>
    <include path="info.html" />
</static-files>

如果这不起作用,我的生活就会改变。html页面实际上是一个jsp页面(即使没有动态内容)。

如果这不起作用,请尝试在servlet中使用RequestDispatcher转发html页面,请参见http://www.jguru.com/faq/view.jsp?EID=1310997

顺便说一句,我的经验是,devmode服务器和部署的服务器有时会以不同的方式解析文件,即使在appengine web上也是如此。xml是相同的。

 类似资料:
  • 我正在自学servlet,找到了一些非常好的教程,并在Eclipse Neon EE中取得了巨大成功。(非常基本的servlet,只提供一个简单的静态网页) 在安装Eclipse Neon EE之前,我安装了Tomcat standalone,并对其进行了测试,得到了regulat apache Tomcat页面。我找到的教程还指导我如何在Eclipse中设置tomcat服务器。他们还向我展示了如

  • 我用Instagram API在PHP中取数据。我的本地机器上一切正常。我甚至改变了我的服务器IP,但仍然得到相同的错误。后来,我检查了服务器控制台,发现它返回500错误的post请求。这不是要求的限制,我很确定。有什么可能是错的。?测试链接:https://www.instagram.com/p/b_qq8rvlbwh/?__a=1 curl https://www.instagram.com/

  • 我一直在努力从我的ubuntu服务器发送邮件。奇怪的是,它在我的mac上的本地tomcat实例上运行得非常好。 以下是我的实现: 让我恼火的是,javamail的输出日志在我的服务器和本地是一样的,而且没有错误: 到目前为止我所做的一切 > 检查我的垃圾邮件(比如一千次,以防万一... 尝试了其他端口,如465和25- 使用iptable打开587端口 iptables -A 输出 -p tcp

  • 我已经很久没有使用Heroku了,所以我有点生疏了。我创建了一个运行Ratchet IOServer的小型PHP应用程序。它监听端口5000。如果我运行并使用连接,一切似乎都能正常工作。我尝试了几种让PHP进程运行并接受连接的方法。 我的Procfile如下所示; 正在运行 然后,当我将服务器部署到Heroku时,它就不工作了。当我尝试telnet到端口上的框时,我得到 我刚刚读了关于Heroku

  • 这是我的第一个问题,也是第一篇英文帖子,请耐心等待。 我正在研究ASP。NET MVC Web Api RESTful应用程序。对于用户身份验证,我想使用加密令牌。我在localhost上工作的想法是:用户请求令牌地址/令牌,在头中包括auth:昵称:passwd,服务器返回加密的令牌,用户将在下一个请求中使用它。所以,用户发送带有头身份验证令牌的请求:encryptedToken,服务器将解密该

  • 我正在使用Amazon Linux AMI在EC2 AWS上运行以下脚本 从今天起,由于EC2上没有任何更改或新安装,脚本在昨天之前一直工作时停止工作。 本地计算机上的相同脚本仍然有效。 相反,在EC2上会出现以下错误: (节点:12636)UnhandledPromiseRejectionWarning:错误:导航失败,因为浏览器已断开连接!在cdpsession.lifecyclewatche