2016-03-23 2 views
0

Ich habe die Spring-Boot-Anwendung in einem VM in Tomcat-Server bereitgestellt. Wenn ich die Seite lade, bekomme ich nur den statischen Teil zu sehen, keiner der uri Zuordnung zu den Ajax Funktionen im Controller scheint hier zu funktionieren. Aber das gleiche funktioniert in meiner lokalen Anwendung. Kann mir bitte jemand helfen. Ich habe den Code meiner Ruhe-Controller-Klasse unten angehängt.Controller-Zuordnungen zu einigen Funktionen funktionieren nicht in der installierten Spring-Boot-Anwendung

import org.springframework.data.rest.webmvc.RepositoryRestController; 
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.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.servlet.ModelAndView; 

import com.abc.xyz.util.DLCUtils; 
import java.util.Date; 
import java.util.List; 


@RestController 

public class HomeController { 

    @RequestMapping("/home") 
    public ModelAndView home(Model model) { 
     int lastWeekInMonth = 0; 
     lastWeekInMonth = DLCUtils.getLastWeekInMonth(2, 2016); 
     System.out.println("last week"+lastWeekInMonth); 
     model.addAttribute("lastweek", lastWeekInMonth); 
     ModelAndView mav = new ModelAndView("/index"); 
     return mav; 
    } 
    @RequestMapping("/review") 
    public ModelAndView reviewHours(Model model) { 
     ModelAndView mav = new ModelAndView("/review"); 
     return mav; 
    } 
    @RequestMapping("/manage") 
    public ModelAndView manageHours(Model model) { 

     ModelAndView mav = new ModelAndView("/manage"); 
     return mav; 
    } 
    @RequestMapping("/addnewemployee") 
    public ModelAndView addnewemployee(Model model) { 
     ModelAndView mav = new ModelAndView("/addemployee"); 
     return mav; 

    } 

    @RequestMapping("/populateWeek") 
    @ResponseBody 
    public Integer lastweekMethod() { 
     int lastWeekInMonth = 0; 
     lastWeekInMonth = DLCUtils.getLastWeekInMonth(2, 2016); 
     System.out.println("last week in lastweek"+lastWeekInMonth); 
     return lastWeekInMonth; 
    } 

    @RequestMapping("/getCurrentWeek") 
    @ResponseBody 
    public Integer getCurrentweek() { 
     int weekOfMonth = 0; 
     weekOfMonth = DLCUtils.getWeekOfTheMonth(); 
     //System.out.println("last week in lastweek"+lastWeekInMonth); 
     return weekOfMonth; 
    } 

    @RequestMapping(value="/getCurrentMonth",method=RequestMethod.GET) 
    @ResponseBody 
    public int getCurrentMonth(@RequestParam("monthname") String month) { 
     int monthnumber = 0; 
     monthnumber = DLCUtils.getMonthNumber(month.toUpperCase()); 
     //System.out.println("last week in lastweek"+lastWeekInMonth); 
     return monthnumber; 
    } 



    @RequestMapping(value="/getRangeOfDate",method=RequestMethod.GET) 
    @ResponseBody 
    public String getRangeOfDate(@RequestParam("week") int week,@RequestParam("month") int month,@RequestParam("year") int year) { 
     System.out.println("week val"+week); 
     List<Date> dateRange=null; 
     StringBuilder submitList = new StringBuilder(""); 
     Date fd=null,ld=null; 
     dateRange = DLCUtils.getAllDays(week, month, year); 
     for (int i = 0; i < dateRange.size(); i++) { 
      if (i == 0) { 
       fd = dateRange.get(0); 
      } 
      if (i == dateRange.size() - 1) { 
       ld = dateRange.get(i); 
      } 

     } 
     String firstdate = null; 
     String lastdate = null; 
     int fdate = 0; 
     int ldate = 0; 
     firstdate = fd.toString(); 
     lastdate = ld.toString(); 
     String firstdate1 = firstdate.substring(8, 10); 
     String lastdate1 = lastdate.substring(8, 10); 
     fdate = Integer.parseInt(firstdate1); 
     ldate = Integer.parseInt(lastdate1); 
     String monthName=DLCUtils.getMonthName(month); 
     submitList.append(monthName);submitList.append("+");submitList.append(fdate);submitList.append("+");submitList.append(ldate);submitList.append("+");submitList.append(DLCUtils.getCurrentYear()); 
     return submitList.toString(); 
    } 
    @RequestMapping(value="/getLastDate",method=RequestMethod.GET) 
    @ResponseBody 
    public String getLastDate(@RequestParam("month") int month,@RequestParam("year") int year){ 

     return (DLCUtils.getEndDateOfTheMonth(month, year).toString()); 

    } 
    @RequestMapping(value="/getAlldaysInweek",method=RequestMethod.GET) 
    @ResponseBody 
    public String getListDatesInAWeek(@RequestParam("week") int week,@RequestParam("month") int month,@RequestParam("year") int year){ 

     List<Date> lstDates = null; 
     lstDates = DLCUtils.getAllDays(week, month, year); 
     String dayOfWeek=null; 
     StringBuilder submitList = new StringBuilder(""); 
     String formattedDate = null; 
     String pattern = "yyyy/MM/dd"; 
     for (Date date : lstDates) { 
     formattedDate = DLCUtils.getDateInPattern(date, pattern); 
     dayOfWeek=DLCUtils.getDayOfTheWeek(date); 
     submitList.append(dayOfWeek);submitList.append(",");submitList.append(formattedDate);submitList.append("+"); 
     } 
     return submitList.toString(); 
    } 
    @RequestMapping(value="/populatedetails",method=RequestMethod.GET) 
    @ResponseBody 
    public String populatedetails(@RequestParam("name") String name,@RequestParam("Id") String id,@RequestParam("Email") String email){ 

     StringBuilder submitList = new StringBuilder(""); 
     String place="Bangalore";String joiningdate="2014-01-01";String enddate="9999-12-31";String rights="Employee";String status="Active";String dept="EBU";String manager="David"; 
     submitList.append("Name"+"+"+name+","+"GlobalId"+"+"+id+","+"Email"+"+"+email+","+"Location"+"+"+place+","+"Joining Date"+"+"+joiningdate+","+"Resignation Date"+"+"+enddate+","+"Rights"+"+"+rights+","); 


     submitList.append("Status"+"+"+status+","+"Division"+"+"+dept+","+"Manager"+"+"+manager+","+"Projects"+"+"); 
     submitList.append("SPT"+".");submitList.append("SPM"+".");submitList.append("DLC"+".");submitList.append("TEST1"+".");submitList.append("TEST2"+".");submitList.append("TEST3"+"."); 
     return submitList.toString(); 
    } 
} 

aus diesem, nur diejenigen, die aus Winkel js genannt Modell und Ansicht woorks und alle anderen Zuordnungen Funktionen gibt Ajax-Aufrufe nicht aufgerufen werden, zeigt es in der Konsole, die

angular.js:8611 GET http://172.16.77.83:8083/getCurrentWeek 404 (Not Found) 

Ähnliches gilt für andere Anrufe auch. Aus diesem Grund sind die Daten in meinen HTML-Seiten nicht richtig ausgefüllt. Die gleiche Anwendung funktioniert in meinem lokalen Rechner. Nur in diesem externen vm zeigt es dieses Problem.

Hinzufügen des Ajax-Aufrufcodes der js-Datei.

function getCurrentWeek(){ 
     console.log("in ajax"); 

     $http({ 
      method : "GET", 
      url : "/getCurrentWeek" 
     }).then(function mySucces(response) { 
      $scope.currentWeek=response.data; 
       var j=parseInt($scope.currentWeek)-1; 


       $('table.ui-datepicker-calendar tr:eq('+$scope.currentWeek+')').css({"border":"3px solid #e1e1e1"}); 
       var weekVal=$('#weekvalues a')[j]; 
      weekVal.style.border="3px solid #50a8e5"; 
       weekVal.style.paddingRight="2px"; 
       weekVal.style.paddingLeft="2px"; 
       weekVal.style.paddingTop="1px"; 

     }, function myError(response) { 
      //$scope.dateRange = response.statusText; 
     }); 

    } 

Danke, Poorna.

+1

Poorna, lesen Sie bitte [MCVE]. – sanluck

+0

Sicher, ich habe meine Frage bearbeitet. –

+0

Sind Sie sicher, dass Ihre Dienste bereitgestellt wurden? Protokolle? – VinayVeluri

Antwort

2

Es scheint mir, dass Sie einen anderen Kontext Pfad verwenden, wenn Sie auf dem Tomcat-Container sind die Bereitstellung von (innerhalb der VM). Wenn Sie die Anwendung lokal unter Verwendung von mvn spring-boot:run oder durch Starten der JAR ohne Festlegen der server.contextPath-Eigenschaft ausgeführt haben, haben Sie sie wahrscheinlich im Stammkontext innerhalb des eingebetteten Containers ausgeführt.

Die URL http://172.16.77.83:8083/getCurrentWeek arbeitet mit diesem Stammkontext, während Sie auf Tomcat wahrscheinlich auf http://172.16.77.83:8083/MyApplicationNam/getCurrentWeek gehen müssen.

um dieses Problem zu lösen, gibt es ein paar Lösungen sind:

1. Bereitstellen der Anwendung auf dem Stammkontext:

  1. den Krieg zu ROOT.war umbenennen, bevor es auf Tomcat bereitstellen
  2. Ändern der Kontextpfad in server.xml

Überprüfen Sie diese Antwort für mehr Informationen über sie: Deploying my application at the root in Tomcat


2. Verwenden relative URLs (wahrscheinlich die beste Lösung):

Durch relative URLs verwenden Sie immer relativ arbeiten auf der Grundlage Ihrer HTML Seite.Wenn sich die HTML-Seite in derselben Anwendung befindet, wird der Kontextpfad auch auf die HTML-Seite angewendet, sodass die REST-API relativ zur HTML-Seite immer gleich bleiben sollte.

$http({ 
    method : "GET", 
    url : "./getCurrentWeek" 
}) 

Weitere Informationen zu diesem Thema Check diese Antworten: Absolute vs relative URLs

+0

Danke Mann !! Relative URLs funktionierten. :) –

-1

Ihre Anwendung, die ein RESTful-Dienst ist, wird auf dem Tomcat-Server bereitgestellt. Und Sie versuchen, auf diese Dienste in AngularJS zuzugreifen, die auf einem anderen Server bereitgestellt wird.

Und Sie müssen die CORS-Filterung (CROSS-Domain-Herkunft Zugang) hinzufügen, um Zugriff auf die HTTP-Verben für Cross-Services zu geben. (Domain zu Domain-Zugang) Fügen Sie die folgende Bean in Ihrem Klassenpfad, es funktioniert fein.

@Component 
public class CORSFilter implements Filter { 

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 
     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     chain.doFilter(req, res); 
    } 

    public void init(FilterConfig filterConfig) {} 

    public void destroy() {} 

} 
+0

hinzugefügt Warum denkst du das OP, Poorna, läuft der AngularJS-Code auf einem anderen Server? Wenn man bedenkt, dass sie Probleme hat, ihre Ansichten (= HTML) und ihre REST-API im selben Controller zu zeigen, würde ich eher bedenken, dass beide auf der gleichen Anwendung laufen. Auch wenn es sich um ein CORS-Problem handelte, ist es im Frühling viel einfacher, die Annotation '@ CrossOrigin' zu verwenden: http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/ cors.html – g00glen00b

+0

@ g00glen00b Warum sollte ich nicht darüber nachdenken? Ich dachte nur, dass beide auf einem anderen Server sind, mit dieser Herangehensweise schlug ich meine Antwort vor. Aber Ihre Überlegung war richtig und gab eine gute Antwort. Ich akzeptiere es, das bedeutet nicht, dass Sie andere Antworten ablehnen. – Hareesh

+0

weil sie mehrere 'ModelAndView's auf ihrem Controller hat, was bedeutet, dass sie HTMLs auch auf ihrer Anwendung bereitstellt. Und selbst wenn die Antwort richtig wäre, wäre es viel einfacher gewesen, '@ CrossOrigin' zu verwenden, als einen CORS-Filter wie in normalen Java-Anwendungen hinzuzufügen. – g00glen00b

Verwandte Themen