gpt4 book ai didi

java - Spring Web MVC 404 错误——以 root 身份部署在 webhost Tomcat 服务器上

转载 作者:行者123 更新时间:2023-11-30 09:44:06 27 4
gpt4 key购买 nike

这让我发疯。请帮忙。

我是 Spring 的新手,我使用 sts/eclipse 开发了我的第一个 spring mvc web 应用程序。它在 eclipse 的 tomcat 服务器中完美运行。

应用程序上下文是 /realtyguide 我在 eclipse 中运行它在 http://localhost:8080/realtyguide/

这是我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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" version="2.4">

<display-name>Realty Guide</display-name>

<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Handles Spring requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>

这是我的 root-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<!-- Root Context: defines shared resources visible to all other web components -->

</beans>

这是我的 Spring 应用程序 servlet 配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

<context:annotation-config />

<!-- Scans within the base package of the application for @Components to configure as beans -->
<context:component-scan base-package="com.springproject.realtyguide" />

<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources -->
<mvc:resources mapping="/resources/**" location="/resources/"/>

<!-- Allows for mapping the DispatcherServlet to "/" by forwarding static resource requests to the container's default Servlet -->
<mvc:default-servlet-handler/>


<!-- Bean to provide Internationalization -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="WEB-INF/i18n/messages" />
<property name="defaultEncoding" value="UTF-8" />
</bean>

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="classpath:META-INF/spring/database.properties" />

<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.databaseurl}" p:username="${jdbc.username}"
p:password="${jdbc.password}" />

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:META-INF/hibernate.cfg.xml</value>
</property>
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${jdbc.dialect}</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>

<!-- Enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven />

<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- __________ BEAN ENTRIES FOR TILES 2 -->

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/layouts/tiles.xml</value>
</list>
</property>
</bean>

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver" >
<property name="order" value="0"/>
<property name="viewClass">
<value>org.springframework.web.servlet.view.tiles2.TilesView </value>
</property>
<property name="requestContextAttribute" value="requestContext"/>
<property name="viewNames" value="*.tiledef"/>
</bean>

<bean id="jstlViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="1"/>
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>

<!-- __________ END OF BEAN ENTRIES FOR TILES 2 -->

<!-- Resolves localized <theme_name>.properties files in the classpath to allow for theme support -->
<bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource">
<property name="basenamePrefix" value="theme-" />
</bean>

<bean id="themeResolver" class="org.springframework.web.servlet.theme.CookieThemeResolver">
<property name="defaultThemeName" value="standard" />
</bean>

</beans>

这是我的 Controller 的根处理程序方法

@RequestMapping(value = "/", method=RequestMethod.GET)
public String setupForm(
@ModelAttribute("searchFormBean") SearchFormBean searchFormBean,
Model model) {
model.addAttribute("searchFormBean", searchFormBean);
// 'index' is a Tile definition in tiles.xml
return "index.tiledef";
}

这是我的虚拟主机 tomcat/conf/server.xml

我删除了大部分“注释掉”的内容以使其更短。

                <?xml version="1.0" encoding="UTF-8"?>

<Server port="9200" shutdown="SHUTDOWN">

<!-- Comment these entries out to disable JMX MBeans support used for the
administration web application -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>

<!-- Global JNDI resources -->
<GlobalNamingResources>

<!-- Test entry for demonstration purposes -->
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>

<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users -->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" readonly="true" />

</GlobalNamingResources>


<!-- Define the Tomcat Stand-Alone Service -->
<Service name="Catalina">


<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="9201" maxHttpHeaderSize="8192"
maxThreads="10" minSpareThreads="5" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="9203"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />


<!-- Define the top level container in our container hierarchy -->
<Engine name="Catalina" defaultHost="localhost">


<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>


<!-- Define the default virtual host
Note: XML Schema validation will not work with Xerces 2.2.
-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

</Host>

</Engine>

</Service>

</Server>

我的目标

调出位于 example.com 的站点的索引页面,不要在域名后添加额外的 /.../

我做了什么

在共享 Webhost 上部署为虚拟主机的根:

我在 stackoverflow 上读到我需要以 root 身份部署,所以...

我通过以下方式将其打包在 STS/Eclipse 中:右键单击项目“realtyguide”> Run as > Maven package

Webhost 服务器是私有(private)的 Tomcat 5.5。我在我的虚拟主机上部署了 war 文件(解压缩)作为虚拟主机的默认应用程序(在 server.xml 中使用 Context path = "")所以我可以访问该网站 example.com 而不是 example.com/realtyguide

成功。或者我是这么想的。我能够在 http://example.com/

调出索引页

问题

访问索引页引用的其他网页返回404错误:

The requested URL /realtyguide/page-name was not found on this server

即使浏览器地址栏显示完整 URL 的上下文路径 http://www.example.com/ realtyguide/page-name

我认为该应用绕过了 spring dispatcher servlet,因此无法识别请求 URL 中的上下文路径“realtyguide”——导致 404 错误。

我不知道如何处理这个问题。

问题:

  1. 如何在不破坏应用程序的情况下调出位于 example.com 而不是 example.com/realtyguide/ 的网站索引页?我已经尝试将 index.jsp 文件(在 WEB-INF 中)转发到上下文路径的索引,但它没有解决问题。也许我做错了。

  2. 是否有某种转发机制可供我使用,以便站点访问者输入 example.com 并立即转发到位于 example.com/realtyguide/< 的索引页面 以便应用程序处理所有 URL?

我是否以正确的方式思考问题?您以前使用过任何解决方案吗?

非常感谢您的帮助。感谢您的宝贵时间。

最佳答案

您需要将您的 Web 应用程序设为 Tomcat 的默认 Web 应用程序。说明在这里:

http://wiki.apache.org/tomcat/HowTo#How_do_I_make_my_web_application_be_the_Tomcat_default_application.3F

完成后,最简单的方法就是使用 index.jsp 转发到 Spring 应用程序的索引。

WAR 根目录中包含以下内容的 index.jsp 文件应该执行此操作:

<jsp:forward page="/realtyguide/" />

关于java - Spring Web MVC 404 错误——以 root 身份部署在 webhost Tomcat 服务器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056932/

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