java - 将Web项目部署到Tomcat7后出现404错误

标签 java spring spring-mvc tomcat7 request-mapping

我正在尝试使用 Spring MVCHibernate 构建一个用于教育目的的示例。

我使用 IntelliJMavenTomcat7。我正在尝试做一个简单的请求映射,因此当 localhost:8080 加载时它将显示 hello.jsp (一个简单的你好 - 没什么特别的)。

但是我收到 404 错误。我在 IntelliJ 中配置了 Tomcat7 并设置应用程序上下文 / 和我的 Web 文件夹在服务器启动时部署

enter image description here

我以这种方式组织我的文件:

enter image description here

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>WebAgg</groupId>
    <artifactId>webagg</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
    <!-- Spring MVC support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-spec</artifactId>
            <version>1.2.5</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.6.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.6.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>5.0.1.Final</version>
            <classifier>tests</classifier>
        </dependency>


        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>


        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.13</version>
        </dependency>


        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.13</version>
        </dependency>


        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1206-jdbc42</version>
        </dependency>



    </dependencies>
</project>

web.xml

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

<web-app
        version="3.0"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">



    <display-name>Spring Hibernate JPA Hello World Application</display-name>

    <!-- Configuration file for the root application context -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml

        </param-value>
    </context-param>

    <!-- Configuration for the DispatcherServlet -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       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.xsd">



    <!-- It register the beans in context and scan the annotations inside beans and activate them -->
    <context:component-scan base-package="com.aggric"/>

    <!-- This allow for dispatching requests to Controllers -->
    <mvc:annotation-driven />

    <!-- This helps in mapping the logical view names to directly view files under a certain pre-configured directory -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- This resolves messages from resource bundles for different locales -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages" />
    </bean>


    <!-- This produces a container-managed EntityManagerFactory;
      rather than application-managed EntityManagerFactory as in case of LocalEntityManagerFactoryBean-->
    <bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- This makes /META-INF/persistence.xml is no longer necessary -->
        <property name="packagesToScan" value="com.aggric.model" />
        <!-- JpaVendorAdapter implementation for Hibernate EntityManager.
             Exposes Hibernate's persistence provider and EntityManager extension interface -->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">validate</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            </props>
        </property>
    </bean>

    <!-- Simple implementation of the standard JDBC DataSource interface,
  configuring the plain old JDBC DriverManager via bean properties -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url" value="jdbc:postgresql://147.27.60.195:5432/Aggric_postgres" />
        <property name="username" value="postgres" />
        <property name="password" value="postgres" />
    </bean>

    <!-- This transaction manager is appropriate for applications that use a single JPA EntityManagerFactory for transactional data access.
    JTA (usually through JtaTransactionManager) is necessary for accessing multiple transactional resources within the same transaction. -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactoryBean" />
    </bean>

    <!-- responsible for registering the necessary Spring components that power annotation-driven transaction management;
         such as when @Transactional methods are invoked -->
    <tx:annotation-driven />



</beans>

索引 Controller

package com.aggric.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;



@Controller
@RequestMapping(value="/")
public class IndexController {

    @RequestMapping(method = RequestMethod.GET)
    public String SayHello(){

        return "hello";


    }
}

对我缺少的东西有什么建议吗?

最佳答案

在 Tomcat 上,应用程序部署到

hostname:port/application-name

仅仅因为您将 URL 模式设置为 /,它就不会将其部署为根应用程序。为此,您需要创建一个 ROOT.war 并部署它。

但我不建议这样做。如果您想要一个更简单的 URL 供外部访问,请使用反向代理,而不是滥用 Tomcat。

关于java - 将Web项目部署到Tomcat7后出现404错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34423876/

相关文章:

java - java mysql 将字符串转换为时间戳

java - 什么更快 : equal check or sign check

java - Spring 3.x 应用程序在 Java EE 6 容器中的可行性 - 有时?

java - Spring Data JPA - 如何通过 child ID 获取 parent ?

java - 无型号类别的 retrofit 2

java - 在 Java 中测试 REST 服务的最佳方式

java - 延迟任务:scheduler first execution in Spring 3

java - 如何使用 DiscriminatorValue 保存实体

java - 警告 : org. springframework.web.servlet.PageNotFound - 在名称为 'appServlet' 的 DispatcherServlet 中未找到带有 URI [/board/] 的 HTTP 请求的映射

java - Spring 交易 : What will happen if I don't give @Transaction annotation on method