当前位置: 首页 > 知识库问答 >
问题:

Spring Boot根控制器不能在Tomcat WAR上工作

苏坚成
2023-03-14

我无法使这一行工作在我的Spring Boot应用程序上,作为一个WAR部署在一个tomcat服务器上。

package com.incidenciasboard;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
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 com.incidenciasboard.bean.CambioIncidencia;
import com.incidenciasboard.bean.General;
import com.incidenciasboard.bean.Incidencia;
import com.incidenciasboard.dao.CambioIncidenciaDAO;
import com.incidenciasboard.dao.IncidenciaDAO;
import com.incidenciasboard.util.Ano;
import com.incidenciasboard.util.Dia;
import com.incidenciasboard.util.Log;
import com.incidenciasboard.util.Mes;
import com.incidenciasboard.util.ModelFecha;
import com.incidenciasboard.util.Semana;

@Controller
public class Stats {

    @Autowired
    private CambioIncidenciaDAO cambioDao;

    @Autowired
    private IncidenciaDAO dao;

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login( Model model) {
        return "login";
    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String statcas( Model model) {
        Log.l();
        return "redirect:/stats";
    }

    @RequestMapping(value = "/stats", method = RequestMethod.GET)
    public String stats( Model model) {

        Iterable<CambioIncidencia> cambios=cambioDao.findAll();
        ModelFecha m=new ModelFecha(0,12,2015);

        long total=0;
        int cant=1;
        //Promedio
        for(CambioIncidencia c: cambios){
            if(c.getDespues().equals("Open") && !c.getDespues().equals("Closed")){
                long id=c.getTicketid();
                for(CambioIncidencia cc: cambios){
                    long id2=cc.getTicketid();

                    if(id==id2 && cc.getDespues().equals("Closed")){
                        long cantDias=ModelFecha.diffDias(c.getFecha(), cc.getFecha());
                        cant++;
                        if(cantDias>0){
                            total+=cantDias;

                        }
                    }

                }
            }   
        }



        List<Ano> fechas=m.getFechas();
        //Cambios Mensuales
        //Log.log("Cerrados");
        for(CambioIncidencia i:cambios){
            for(Ano ano:fechas){
                General ga=ano.getGeneral();
                for(Mes mes:ano.getMeses()){
                    General gm=mes.getGeneral();
                    for(Semana sem:mes.getSemanas()){
                        General gs=sem.getGeneral();
                        for(Dia dia:sem.getDias()){
                            General gd=dia.getGeneral();
                            List<General> ges=new ArrayList<General>();
                            ges.add(ga);
                            ges.add(gm);
                            ges.add(gd);
                            ges.add(gs);

                            if(ModelFecha.mismoDia(dia.getFecha(), i.getFecha())){
                                if(i.getEstado().equals("Open")){
                                    for(General g:ges)g.sAbierto();
                                }else if(i.getEstado().equals("Closed")){
                                    for(General g:ges)g.sCerrado();
                                    for(General g:ges)g.setCaja(i.getPlata());
                                }else if(i.getEstado().equals("Critico")){
                                    for(General g:ges)g.sCritico();
                                }else if(i.getEstado().equals("Listo p/Entregar")){
                                    for(General g:ges)g.sLentregar();
                                }else if(i.getEstado().equals("Presupuesto Enviado")){
                                    for(General g:ges)g.sPenviado();
                                }else if(i.getEstado().equals("Esperando Repuestos")){
                                    for(General g:ges)g.sEsperando();
                                }else if(i.getEstado().equals("Cancelado")){
                                    for(General g:ges)g.sCancelado();
                                }else if(i.getEstado().equals("In Progress")){
                                    for(General g:ges)g.sProgreso();
                                }
                            }
                        }
                    }
                }
            }
        }

        General g=new General();

        for(Incidencia i:dao.findAll()){
            if(i.getEstado().equals("Open")){
                g.sAbierto();
            }else if(i.getEstado().equals("Closed")){
                g.sCerrado();
            }else if(i.getEstado().equals("Critico")){
                g.sCritico();
            }else if(i.getEstado().equals("Listo p/Entregar")){
                g.sLentregar();
            }else if(i.getEstado().equals("Presupuesto Enviado")){
                g.sPenviado();
            }else if(i.getEstado().equals("Esperando Repuestos")){
                g.sEsperando();
            }else if(i.getEstado().equals("Cancelado")){
                g.sCancelado();
            }else if(i.getEstado().equals("In Progress")){
                g.sProgreso();
            }

        }
        List<Mes> nubimedia = new ArrayList<Mes>();
        for(Ano a:fechas){
            for(Mes mm:a.getMeses()){
                nubimedia.add(mm);
            }
        }
        List<Mes> ult4=new ArrayList<Mes>();
        ult4.add(nubimedia.get(nubimedia.size()-5));
        ult4.add(nubimedia.get(nubimedia.size()-4));
        ult4.add(nubimedia.get(nubimedia.size()-3));
        ult4.add(nubimedia.get(nubimedia.size()-2));
        model.addAttribute("quarter",ult4);

        General mesactual=nubimedia.get(nubimedia.size()-1).getGeneral();
        General mesanterior=nubimedia.get(nubimedia.size()-2).getGeneral();

        General ayer=m.getAyer(fechas).getGeneral();
        General hoy=m.getHoy(fechas).getGeneral();


        model.addAttribute("hoy",hoy);
        model.addAttribute("ayer",ayer);
        model.addAttribute("mesactual",mesactual);
        model.addAttribute("mesanterior",mesanterior);
        model.addAttribute("prom",(total/cant));
        model.addAttribute("g",g);
        return "index";
    }


}

我没有其他选项可以将根控制器(索引)发送到“/stats”。

我用的是“/..any thing..”它起作用了。但“/”不是。您可以看到我现在的重定向,当我使用嵌入式tomcat运行spring boot时,它可以工作,但当我将它部署为WAR时就不行了。

我还做了一个日志,但它甚至不打印。

@RequestMapping(value = "/", method = RequestMethod.GET)
        public String statcas( Model model) {
            Log.l();
            return "redirect:/stats";
        }

请救命!

编辑1:

应用程序名为Incendencia,所以在url中看起来是这样的:

主持人:8080/INCINDENCIA/

如果URL与此完全相同,它不会重定向到/stats...

要使用该应用程序,我必须将主机:8080/incidencia/stats

编辑2:属性文件spring Boot:

#REMOTO
spring.datasource.url = jdbc:mysql://...
spring.datasource.username = ...
spring.datasource.password = ...

spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
spring.jpa.show-sql = false
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

#jsp
spring.mvc.view.suffix: .jsp

和POM文件

<?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>com.incidenciasboard</groupId>
    <artifactId>incidenciasboard</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>IncidenciasBoard</name>
    <description>incidenciasboard</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
    </properties>

    <dependencies>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>19.0</version>
</dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.11.0</version>
    </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

共有1个答案

黎鹤轩
2023-03-14

我不确定下面的内容是否能满足您的需要,但您可以将其转换为JAR文件并运行,而不是将其作为WAR文件。这会奏效的

 类似资料:
  • NGINX入口控制器不在Amazon EKS上工作 我使用eksctl在私有子网上创建了一个Amazon EKS集群。 我必须标记私有子网,否则无法创建负载均衡器 然后,我使用以下安装说明安装了NGINX入口控制器:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/ 我使

  • 嗨,我用spring初始化器创建了一个简单的Spring Boot应用程序。我在主应用程序类的同一文件夹中添加了一个控制器。 这是给我以下错误的网址http://localhost:8080/welcome 此应用程序没有针对/错误的显式映射,因此您将其视为回退。 Sat Dec 19 12:51:44 IST 2020出现意外错误(类型=未找到,状态=404)。 如果我使用@restContro

  • 我真的很难理解JavaFX控制器,我的目标是写一个TextArea来充当日志。 我的代码在下面,但我希望能够改变值等从另一个类,我可以调用时需要。我试图创建一个扩展初始化的控制器类,但我无法使它工作。有谁能指引我正确的方向吗?

  • 问题内容: 正在尝试在方法级别定义访问规则,但是它从未如此有效。 安全配置 ExampleController 每当我尝试使用user:user它访问/ v2 / home时,它执行得很好,是否由于“用户”没有访问权限而给我“拒绝访问”错误ROLE_ADMIN? 我实际上是在考虑在方法级别放弃访问规则并坚持使用http()ant规则,但是我必须知道为什么它对我不起作用。 问题答案: 在控制器上使用

  • 我想允许一个域的跨源请求。我的项目使用Spring,所以我想利用新的CORS支持。 我遵循下面的示例https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#disqus_thread并尝试了第一个版本。我的控制器注释如下所示: 如果我理解正确的话,mvc-config是一种替代方法。我也试过了: 对于这两种方法,响应似乎