源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。关于部署到 tomcat
Posted
技术标签:
【中文标题】源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。关于部署到 tomcat【英文标题】:The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. on deploying to tomcat 【发布时间】:2017-09-21 05:57:29 【问题描述】:我已经使用 Spring 和 Eclipse IDE 构建了一个应用程序。当我从 Eclipse IDE 启动项目时,一切都很好,但是当我将 maven 项目打包为 war 文件并部署到单独的 tomcat 时,我遇到了这个问题
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
这是我的xml文件中的配置sn-p
<!-- View Resolver -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/pages/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
我正在尝试访问此控制器
@RequestMapping(value = "/welcome", "/")
public String defaultPage()
return "Web Service data successfuly consumed";
有人知道为什么部署到 tomcat 失败?
【问题讨论】:
通过自下而上创建新的 maven 项目然后重新添加现有包和 xml 文件来解决问题。最初我创建的是一个动态 web 项目,我通过 eclipse 的配置设置将其转换为 maven 项目 检查 url 映射,清理并重新构建项目并再次更新 maven 它将工作 对于像我一样无法遵循 Tadele 回答的任何人,这里的链接至少解决了我的问题。我的 Java 构建路径条目未按此处定义添加。 crunchify.com/… 【参考方案1】:我多次为这个问题苦苦挣扎。
我目前使用的解决方案是 webapp(或保存视图的文件夹,如 jsp)正在部署程序集中。
这样做Right click on the project > Build Path > Configure Build path > Deployment Assembly > Add(right hand side) > Folder > (add your jsp
文件夹。默认情况下是src/main/webapp
)
在你做所有正确的事情之后你也可能会得到这个错误,但是在 JSP 上你把锚标记放在旧的时尚中(如果它可以帮助其他人解决同样的问题,我会添加这个以防万一)。
我在 jsp 上有以下语法。 <a href="/mappedpath">TakeMeToTheController</a>
我一直看到问题中提到的错误。但是将标签更改为如下所示的标签解决了这个问题。
<a href=" <spring:url value="/mappedpath" /> ">TakeMeToTheController</a>
【讨论】:
很好地解释了答案,它对我的问题有所帮助。【参考方案2】:如果您正在开发 Spring Boot 应用程序,请将如下代码所示的“SpringBootServletInitializer”添加到您的主文件中。因为没有 SpringBootServletInitializer Tomcat 会将其视为普通应用程序,因此不会将其视为 Spring Boot 应用程序
@SpringBootApplication
public class DemoApplication extends *SpringBootServletInitializer*
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(DemoApplication .class);
public static void main(String[] args)
SpringApplication.run(DemoApplication .class, args);
【讨论】:
这对我不起作用。在配置方法中放置断点永远不会被命中。【参考方案3】:在 Spring Boot 应用程序中工作时我收到了同样的错误,因为当作为 Spring Boot 运行时,很容易做到 localhost:8080/hello/World
但是当您构建工件并部署到 Tomcat 时,您需要切换到使用localhost:8080/<artifactName>/hello/World
【讨论】:
+1,我觉得关于 Tomcat 的现有教程并没有足够强调这一点:因为工件名称,今天浪费了几个小时。不管怎样,谢谢你帮助我! 我在哪里可以找到 ?我应该在 pom 文件中的 tomcat 插件中设置它还是什么? 表示您的项目构建的名称。因此,如果项目名为 FooBar 并且构建结果为 FooBar.war 并部署到 Tomcat,则您的 url 看起来像 localhost:8080/FooBar/hello/world【参考方案4】:尝试在 Eclipse 中运行 servlet(右键单击 +“在服务器上运行”)我遇到了同样的问题: “HTTP 状态:404 / 描述:源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。” 添加 index.html 没有帮助,也没有更改 tomcat 的各种设置。
最后,我在一个意想不到的地方发现了问题:在Eclipse中,没有设置“自动构建”选项。因此 servlet 没有被编译,并且没有文件“myServlet.class”被部署到服务器上(在我的例子中,在路径 .wtpwebapps/projectXX/WEB-INF/classes/XXpackage/ 中)。 手动构建项目并重新启动服务器即可解决问题。
我的环境:Eclipse Neon.3 Release 4.6.3,Tomcat-Version 8.5.14.,OS Linux Mint 18.1。
【讨论】:
【参考方案5】:我遇到了同样的问题,并且从 @tadtab 的回答中得到了一些提示,我能够在我的项目中找到解决同样问题的方法。
步骤:
1->按照@tadtab 的答案中提到的步骤进行操作。
2->项目右键->点击属性->搜索部署程序集。
3->在屏幕上搜索您的文件夹是否存在。 (如果没有,添加它)。
4->在屏幕上,您将找到与您的源文件夹对应的“部署路径”列。复制该路径。在我的例子中,它是 /views。
5->所以基本上,在setPrefix()方法中,我们应该有部署时的路径。 早些时候我只是在 setPrefix() 方法中使用 /views,所以我得到了同样的错误。但之后,它运作良好。
@Bean
public ViewResolver viewResolver()
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/classes/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
这同样适用于 XML 配置。
【讨论】:
这可能会有所帮助。 crunchify.com/…【参考方案6】:我也面临同样的问题,我通过将 web.xml 文件和 applicationcontext.xml 文件放在 WEB-INF 文件夹中来解决它。
希望这会有所帮助:)
【讨论】:
通过将 web.xml 保存在 WEB-INF 文件夹中,这对我有用。【参考方案7】:当您尝试从控制器页面运行项目时,甚至会出现此问题。 从 jsp 页面运行您的项目。 进入你的jsp页面;右键单击->运行方式->在服务器上运行。 我遇到了同样的问题。我从控制器页面运行我的项目。 从 jsp 页面运行您的项目。
【讨论】:
【参考方案8】:如果是maven项目做Maven更新会解决问题-右键Project --> Maven --> Update Project并正常启动你的项目。
【讨论】:
【参考方案9】:解决方案一:更换apache tomcat的版本(最好是最新的)(手动处理)。
解决方案二:安装最新的eclipse IDE并配置apache tomcat服务器(内部自动处理,即eclipse处理配置部分)。
自动流程成功后,手动流程应该可以正常工作。
【讨论】:
【参考方案10】:我遇到了同样的问题。
当我右键单击-> 在服务器上运行然后手动选择我的服务器时,它就可以工作了。
做
Alt+Shift+X
然后手动选择您的服务器。这可能会有所帮助。
【讨论】:
【参考方案11】:通过在 /opt/apache-tomcat-8.5.37/conf/Catalina/localhost 中创建 geoexplorer.xml 文件可以解决几乎相同的问题 geoexplorer.xml 文件的内容是
<Context displayName="geoexplorer" docBase="/usr/share/opengeo/geoexplorer" path="/geoexplorer"/>
【讨论】:
【参考方案12】:您的分派器 servlet 没有将请求分派到哪里。问题是您的控制器 bean 没有创建/工作。
即使我也面临同样的问题。然后在mvc-config.xml下添加如下
<mvc:annotation-driven/>
<context:component-scan base-package="com.nsv.jsmbaba.teamapp.controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"><value>/WEB-INF/view/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
希望对你有帮助
【讨论】:
【参考方案13】:检查 Java 版本这对我来说是个问题。 IDE(在我的例子中是 Intellij)可以毫无问题地启动,但是当我尝试在 tomcat docker image 应用程序中运行 war
时不起作用。原因是 docker 映像与开发环境相比具有不同(较低)的版本。没有任何错误消息表明这些。
【讨论】:
【参考方案14】:如果以上所有答案都失败,请通过阅读tomcat安装日志文件夹中的日志来检查根本原因。阅读catalina.out文件以找出确切原因。可能是数据库凭据错误或找不到类定义。
【讨论】:
【参考方案15】:我正面临这样的错误:源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。
在 Eclipse 中右键单击项目并单击构建,然后尝试作为服务器运行。 它对我来说很好用
【讨论】:
它应该作为评论添加,而不是作为答案。 为什么不作为答案,原因是什么?这也适用于我。以上是关于源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。关于部署到 tomcat的主要内容,如果未能解决你的问题,请参考以下文章
源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。关于部署到 tomcat
404未找到:原始服务器未找到目标资源的当前表示,或不愿意透露存在的资源
HTTP 状态 404 – 未找到!!!!或有时 Http 500 [重复]
java servlet 出现 404 错误。看不到html文件