2015-04-26 18 views
8

döndürür. Tomcat7 uygulamasını, OpenShift üzerinde Spring MVC kullanarak şu etki alanı adı altında çalıştırıyorum: financial-datasite.rhcloud.com. Uygulamayı bir Tomcat sunucusunu kullanarak yerel olarak test edip test ediyorum ve daha sonra uzaktan depoya aktarıyorum. Şu anda yalnızca bir Ana Sayfa ve farklı bir sayfaya yönlendirmenin altında bir düğme var. Yerel olarak test ederken, her iki sayfa da içeriği beklendiği gibi görüntüler. Ancak, uzak sunucuya dağıtıldığında, yalnızca Ana Sayfa görüntülenir ve bu düğmeyi tıklattığınızda bir HTTP 404 hatası alıyorum. Burada benzer sorulara rastladım, ama hiçbiri şu ana kadar hiç yardımcı olmadı. Web.xml, pom.xml, servlet-context.xml ve denetleyici dosyalarını yapılandırma etrafında oynadım. Ancak, bunların hiçbiri yardımcı olmadı.Openshift Spring MVC Tomcat uygulamasının dağıtılan yolu 404

INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/Sectors],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.spring.mvc.SectorController.printWelcome(org.springframework.ui.ModelMap) 
: Ben de uzak sunucu ikinci sayfa için kontrolör sınıfında (hatta benim projede yok) bazı 'printWelcome' yöntemi erişiyor ileri süren biteni izleyebilmek için tail files and logs kontrol edilmiştir

İşte benim project structure. Yerel sunucumda, varsayılan sayfa localhost:8181/mvc/ olarak çalıştırılır ve ikinci sayfa http://localhost:8181/mvc/Sectors olarak çalıştırılır. Benzer şekilde, gönderi sonrası, ana sayfa http://financial-datasite.rhcloud.com olarak çalıştırılır ve ikinci sayfa http://financial-datasite.rhcloud.com/Sectors olarak çalıştırılır, bu da /WEB-INF/views/hello.jsp için bir 404 hatası atar. Bu, yine proje dizinimde bile mevcut değildir. . Günlük dosyalarında gözlemlediğim diğer bir şey de kodun SectorController sınıfına girmemesidir, çünkü kaydedilecek yazdırma komutları için kodlanmış gibi. Bu, sayfadan dağıtılan siteden gerçekten istendiğinde konsola giriş yapmıyor. Uzak sunucuda hangi dosyaların çalıştırıldığından ve farkında olmadığım herhangi bir yapılandırma sorunundan emin değilim. Aşağıda, web.xml, pom.xml, servlet-context.xml, Sectors.jsp, yüklenen yeni sayfayı aradığım Google-Maps.js ve SectorController.java (denetleyici dosyasıdır) ikinci sayfa). Uzun bir soru için özür dileriz, daha fazla bilgiye ihtiyacınız varsa lütfen bize bildirin. Herhangi bir yardım takdir edilecektir, teşekkürler.

web.xml

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

    <display-name>Financial Data Site</display-name> 

    <servlet> 
    <servlet-name>financial</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>financial</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring/root-context.xml</param-value> 
    </context-param> 

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

    <welcome-file-list> 
    <welcome-file>index</welcome-file> 
    </welcome-file-list> 

</web-app> 

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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.spring</groupId> 
    <artifactId>mvc</artifactId> 
    <name>SpringMVC</name> 
    <packaging>war</packaging> 
    <version>1.0.0-BUILD-SNAPSHOT</version> 

    <properties> 
     <java-version>1.6</java-version> 
     <org.springframework-version>3.1.1.RELEASE</org.springframework-version> 
     <org.aspectj-version>1.6.10</org.aspectj-version> 
     <org.slf4j-version>1.6.6</org.slf4j-version> 

     <!-- Newly Added from here --> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.6</maven.compiler.source> 
     <maven.compiler.target>1.6</maven.compiler.target> 
    </properties> 

    <repositories> 
     <repository> 
      <id>eap</id> 
      <url>http://maven.repository.redhat.com/techpreview/all</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>eap</id> 
      <url>http://maven.repository.redhat.com/techpreview/all</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 
    <!-- Till here --> 

    <dependencies> 

     <!-- Spring --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework-version}</version> 
      <exclusions> 
       <!-- Exclude Commons Logging in favor of SLF4j --> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 

     <!-- MySQL database driver --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.34</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 

     <!-- Hibernate --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>3.6.10.Final</version> 
     </dependency> 

     <!-- AspectJ --> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${org.aspectj-version}</version> 
     </dependency> 

     <!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 

     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.15</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.mail</groupId> 
        <artifactId>mail</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.jms</groupId> 
        <artifactId>jms</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jdmk</groupId> 
        <artifactId>jmxtools</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jmx</groupId> 
        <artifactId>jmxri</artifactId> 
       </exclusion> 
      </exclusions> 
      <scope>runtime</scope> 
     </dependency> 

     <!-- @Inject --> 
     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 

     <!-- JSTL --> 
     <dependency> 
      <groupId>jstl</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
      <scope>compile</scope> 
     </dependency> 

     <!-- Tag Library --> 
     <dependency> 
      <groupId>taglibs</groupId> 
      <artifactId>standard</artifactId> 
      <version>1.1.2</version> 
      <scope>compile</scope> 
     </dependency> 

     <!-- Servlet --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>jsp-api</artifactId> 
      <version>2.1</version> 
      <scope>provided</scope> 
     </dependency> 

     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 

     <!-- Test --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.7</version> 
      <scope>test</scope> 
     </dependency>   
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <additionalProjectnatures> 
         <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
        </additionalProjectnatures> 
        <additionalBuildcommands> 
         <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> 
        </additionalBuildcommands> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>true</downloadJavadocs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.5.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <compilerArgument>-Xlint:all</compilerArgument> 
        <showWarnings>true</showWarnings> 
        <showDeprecation>true</showDeprecation> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>1.2.1</version> 
       <configuration> 
        <mainClass>org.test.int1.Main</mainClass> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <profiles> 
     <profile> 
      <!-- When built in OpenShift the 'openshift' profile will be 
       used when invoking mvn. --> 
      <!-- Use this profile for any OpenShift specific customization 
       your app will need. --> 
      <!-- By default that is to put the resulting archive into the 
       'deployments' folder. --> 
      <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html --> 
      <id>openshift</id> 
      <build> 
      <finalName>financial</finalName> 
       <plugins> 
        <plugin> 
         <artifactId>maven-war-plugin</artifactId> 
         <version>2.4</version> 
         <configuration> 
          <outputDirectory>webapp</outputDirectory> 
          <warName>ROOT</warName> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 

</project> 

sunucu uygulaması-context.xml

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

    <annotation-driven /> 

    <context:component-scan base-package="com.spring.mvc" /> 

    <resources mapping="/resources/**" location="/resources/" /> 

    <beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

</beans:beans> 

Sectors.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ page session="false"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Sectors</title> 
</head> 

<body> 
    <h1>Message</h1> 
    <c:if test="${not empty Sectors}"> 

     <ul> 
      <c:forEach var="_SectorNames" items="${Sectors}"> 
       <li>${_SectorNames}</li> 
      </c:forEach> 
     </ul> 

    </c:if> 
</body> 

</html> 

Google Maps.js: Aşağıdaki pasajı yalnızca harita üzerinde bir div bölüm oluşturmak için ve yeni bir pencerede yeni bir sayfa çağırmak için kullanılan işlevini içeren

function HomeControl(controlDiv, map) 
{ 
     // Set CSS for the control border. 
     var _ControlUI = document.createElement('div'); 
     _ControlUI.style.backgroundColor = '#fff'; 
     _ControlUI.style.border = '2px solid #fff'; 
     _ControlUI.style.borderRadius = '3px'; 
     _ControlUI.style.boxShadow = '0 2px 6px rgba(0,0,0,.3)'; 
     _ControlUI.style.cursor = 'pointer'; 
     _ControlUI.style.marginBottom = '22px'; 
     _ControlUI.style.textAlign = 'center'; 
     _ControlUI.title = 'Click to filter by Sectors'; 
     controlDiv.appendChild(_ControlUI); 

     // Set CSS for the control interior. 
     var _ControlText = document.createElement('div'); 
     _ControlText.style.color = 'rgb(25,25,25)'; 
     _ControlText.style.fontFamily = 'Roboto,Arial,sans-serif'; 
     _ControlText.style.fontSize = '12px'; 
     _ControlText.style.lineHeight = '38px'; 
     _ControlText.style.paddingLeft = '5px'; 
     _ControlText.style.paddingRight = '5px'; 
     _ControlText.innerHTML = '<strong>View by Sectors</strong>'; 
     _ControlUI.appendChild(_ControlText); 

     // Setup the click event listeners, also calls Sectors page on a new window 
     google.maps.event.addDomListener(_ControlUI, 'click', function() { 
      //add code here to redirect to Sectors page 
      var _Window = window.open('/mvc/Sectors', '__blank'); 
      _Window.focus(); 
     }); 
} 

SectorController.java

package com.spring.mvc; 

    import java.text.DateFormat; 
    import java.util.ArrayList; 
    import java.util.Date; 
    import java.util.List; 
    import java.util.Locale; 

    import org.slf4j.Logger; 
    import org.slf4j.LoggerFactory; 
    import org.springframework.stereotype.Controller; 
    import org.springframework.ui.Model; 
    import org.springframework.web.bind.annotation.RequestMapping; 
    import org.springframework.web.bind.annotation.RequestMethod; 
    import org.springframework.web.servlet.ModelAndView; 

    import com.spring.dao.impl.SectorDAOImpl; 
    import com.spring.model.Sector; 

    @Controller 
    public class SectorController { 

     private static final Logger logger = LoggerFactory.getLogger(SectorController.class); 

     @RequestMapping(value = "/Sectors", method = {RequestMethod.HEAD, RequestMethod.GET}) 
     public ModelAndView DisplaySectors(Locale locale, Model model) { 

      logger.info("Welcome home! You are in: {}.", locale); 

      Date date = new Date(); 
      DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 

      String formattedDate = dateFormat.format(date); 

      model.addAttribute("serverTime", formattedDate); 

      SectorDAOImpl _SectorDAOImpl = new SectorDAOImpl(); 
      List<Sector> _Sectors = _SectorDAOImpl.GetByID();  
      List<String> _SectorNames = new ArrayList<String>(); 

      for(Sector sector : _Sectors) { 
       _SectorNames.add(sector.getSectorName()); 
      } 

      ModelAndView _ModelAndView = new ModelAndView("Sectors"); 
      _ModelAndView.addObject("Sectors", _SectorNames); 

      return _ModelAndView; 
     } 
} 
+0

Düğmenin isteği sayfaya yönlendirdiği kodu da gönderebilir misiniz lütfen? Ayrıca proje yapınız ile bir resim yayınlayabilirsiniz – Jessai

+0

Yeni sayfa isteyen JavaScript kodu gönderildi. Ayrıca, yukarıdaki sorudaki proje yapısının bir görüntüsüne bir bağlantı da gönderdim, burada referans için bağlantı: http://imgur.com/WhOuzJB. Teşekkürler. –

+0

Bu satırda: var _Window = window.open ('/ mvc/Sectors', '__blank'); Neden "/ mvc /" ile önekliyorsunuz? Bu senin proje ismin mi? – Jessai

cevap

4
    Jessai yorumunda belirtildiği gibi
  1. ,

    var _Window = window.open('/mvc/Sectors', '__blank'); 
    

    açıkça proje adı kullanmayın! HttpServletRequest'in request.getContextPath() yöntemi gibi bağlam adınızı almanın bir yolu vardır.

    Bu durumda kodlanmış bir URL dizgisi ile göreli URL'yi kullanabileceğinizi düşünüyorum, sadece 'Sektörler' veya './Sektörler'.

    Başvurular: demek '_blank':

  2. '__blank'? Bu arada

  3. :

    Eğer web.xml dosyada 3.0 spesifikasyonu yerine 2.5 Servlet bağlılığı ilan edebilir, böylece Tomcat 7 dağıtma.

    başlangıçta bileşenleri tarama devre dışı bırakmak için aşağıdaki bakınız:
    https://wiki.apache.org/tomcat/HowTo/FasterStartUp#Configure_your_web_application

  4. INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/Sectors],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.spring.mvc.SectorController.printWelcome(org.springframework.ui.ModelMap) 
    

    sınıf dosyası kaynak kodunu uymuyorsa

    , bu simge kod derlenmemiştir demektir . Derlenmiş sınıflarınızı silin (ör. mvn clean kullanın) ve tekrar deneyin.

    Eğer merak ediyorsanız, savaş dosyanızı herhangi bir ZIP arşivleme uygulamasıyla paketinden çıkarabilir ve gerçekte ne olduğunu görebilirsiniz.

  5. Siz veya firmamızın kendi adı olan http://spring.com web sitesine sahip misiniz? Değilse, com.spring paket adını KULLANMAYIN ve <groupId>com.spring</groupId>'u kullanmayın. Bu isimler size ait değil. Onlar başka birinin mülkü.

    <org.springframework-version>3.1.1.RELEASE</org.springframework-version> 
    

    günü

  6. Eğer 3.x kullanıyorsanız, neden olmasın 3.x serisinde geçerli 3.2.12.RELEASE, ya da daha iyi son 4.1.6.RELEASE? Spring Framework 3.1.x hayatın sonuna ulaştı ve artık desteklenmiyor.

+0

Cevabınız için teşekkürler! Aslında, 4. noktadaki sonuncusu hariç, yukarıdaki tüm adımları denedim (SAVAŞI aç ve gerçekte ne olduğuna bak). Kendim yüklediğim WAR dosyasını açmaktan bahsediyorsanız, istemci makinemde sahip olduğum tüm kodların hepsi var. Ancak dağıtıldığında, yol 404 hatası döndürür. –

+0

İstemcinizin (tarayıcınızın) hangi URL'leri istediğini görebilmeniz için istekleriniz için erişim günlüğü dosyası oluşturmak üzere sunucu yapılandırmanızda AccessLogValve özelliğini etkinleştirin. Tomcat'te, Host sunucunuz için conf/server.xml dosyasında bir erişim günlüğünü etkinleştirebilirsiniz. (Kullandığınız "jbossews" için doğru olup olmadığını bilmiyorum. Bu farklı bir yazılımdır). –