gpt4 book ai didi

Java Webapp 在 Eclipse 中运行良好,但在 Tomcat 中运行不佳

转载 作者:行者123 更新时间:2023-11-28 22:06:48 25 4
gpt4 key购买 nike

我有一个小型 Java/Spring MVC REST/Maven 应用程序,它在 Eclipse 中运行良好,而且当我从提示符运行以下命令时:

mvn clean tomcat6:run

我的问题是当我这样做的时候:

mvn clean package

并将生成的 war 文件推送到我的独立 Tomcat 实例中的“webapps”文件夹,该服务不再工作。

独立的 Tomcat 启动正常,日志中没有错误。有趣的是,当我在 Eclipse 中或通过 mvn 命令运行应用程序时,独立实例监听端口 8989 而不是 8080。

应用程序在独立的 Tomcat 中启动后,如果我尝试使用 RESTClient 访问我的服务,我会返回 404。实际上是我的自定义 404,而不是通用的。

还有静态内容,比如我的 index.html 也很好。

这是我的 web.xml 文件:

    <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Skunk User Interface</display-name>

<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>file:///${APPS_CONFIG}/log4j.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

<servlet>
<servlet-name>skunk</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/skunk-servlet.xml
</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet-mapping>
<servlet-name>skunk</servlet-name>
<url-pattern>/skunk/*</url-pattern>
</servlet-mapping>

<!-- Healthcheck mapping -->
<servlet-mapping>
<servlet-name>skunk</servlet-name>
<url-pattern>/health/*</url-pattern>
</servlet-mapping>

<error-page>
<error-code>404</error-code>
<location>/WEB-INF/404.htm</location>
</error-page>
</web-app>

还有 skunk-servlet.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">

<tx:annotation-driven/>

<!-- Load configuration settings -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="searchContextAttributes" value="true" />
<property name="contextOverride" value="true" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:config/application.properties</value>
<value>file:///${APPS_CONFIG}/application.properties</value>
</list>
</property>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"
c:dataSource-ref="dataSource" />

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory" />

<!-- Auto scan the components -->
<context:component-scan base-package="com.skunk.myapp" />
<mvc:annotation-driven/>

<cache:annotation-driven />

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache"/>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:/ehcache.xml"/>
</bean>

<aop:aspectj-autoproxy proxy-target-class="true" />

</beans>

该配置中是否有任何内容可以解释为什么对调度程序 servlet 的任何请求返回 404 而不是路由到 Controller ?

谢谢


更新:

从 Tomcat Standalone 添加日志输出。

catalina.[日期].log:

Sep 13, 2012 1:47:28 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.6.0_31\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;.
Sep 13, 2012 1:47:28 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Sep 13, 2012 1:47:28 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 673 ms
Sep 13, 2012 1:47:28 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Sep 13, 2012 1:47:28 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
Sep 13, 2012 1:47:28 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor host-manager.xml
Sep 13, 2012 1:47:29 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor manager.xml
Sep 13, 2012 1:47:29 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive skunk.war
Sep 13, 2012 1:47:44 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory docs
Sep 13, 2012 1:47:44 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
Sep 13, 2012 1:47:44 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory ROOT
Sep 13, 2012 1:47:44 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Sep 13, 2012 1:47:44 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Sep 13, 2012 1:47:44 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/19 config=null
Sep 13, 2012 1:47:44 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 16106 ms

localhost.[日期].log:

Sep 13, 2012 1:47:39 PM org.apache.catalina.core.ApplicationContext log
INFO: Set web app root system property: 'webapp.root' = [C:\Users\my.user\Tomcat\webapps\skunk\]
Sep 13, 2012 1:47:39 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing log4j from [file:///${APPS_CONFIG}/log4j.xml]
Sep 13, 2012 1:47:39 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Sep 13, 2012 1:47:43 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'skunk'
Sep 13, 2012 1:47:44 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Sep 13, 2012 1:47:44 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()

最佳答案

如果您只是将 yourproject.war 复制到 Tomcat 的 webapps 文件夹并让默认部署程序启动(将 yourproject.war 扩展为名为 yourproject 的目录)那么您应该知道默认的 Tomcat 逻辑是使您的应用程序在 /yourproject 的上下文路径(读取:URL)下可用。

如果您希望该应用程序在根上下文 (/) 下可用,您应该适本地配置 Tomcat。

关于Java Webapp 在 Eclipse 中运行良好,但在 Tomcat 中运行不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com