V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
namaketa
V2EX  ›  Java

tomcat 项目测试机跑通,部署到其他机器却 AJAX 返回异常

  •  1
     
  •   namaketa · 2019-12-08 00:32:03 +08:00 · 3362 次点击
    这是一个创建于 1573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    预期功能:输入账户密码,post 提交,如登录成功跳转后台,如果失败返回一个 json,形如 {success:false,errorMsg:"用户名或密码错误"}

    故障现象:输入正确的账户密码,返回的 json 只有 {"success":false},没有提示原因

    两台机器的环境:java,tomcat,war 包,数据库全都一样 测试机 win10 最新版,服务器则是 sever 2008 r2

    tomcat 日志两机都只会提示 getOutputStream() has already been called for this response,没有其他信息 这是离职同事的项目,找不到人问配置了,我现在怀疑是系统变量,但我简单看了一下,似乎也没有什么特殊的魔法

    我已经思考不到其他的原因了,不会调试 Java 代码,只能求助万能的 v2exer 了

    第 1 条附言  ·  2019-12-08 17:44:12 +08:00

    强行学了点java打断点debug,找到了问题代码

    ApplicationContext context = new FileSystemXmlApplicationContext("file:E:/****/ROOT/WEB-INF/config/spring-mvc.xml")
    

    看起来是数据连接的时候读取了spring-mvc.xml文件,写的是绝对路径,所以一迁移就GG了,想问候一下他家人

    那么有办法改造这段代码成相对路径吗,我google了一下,这个函数FileSystemXmlApplicationContext应该是可以接受相对路径的,但是测试了一下

    "src/main/webapp/WEB-INF/config/spring-mvc.xml"
    "WEB-INF/config/spring-mvc.xml"
    

    这两种相对路径的写法都失败了,也在classpath之外,请问还有其他的方法吗

    12 条回复    2019-12-08 23:48:00 +08:00
    NerverLibis
        1
    NerverLibis  
       2019-12-08 03:15:42 +08:00 via iPhone   ❤️ 2
    打开代码调试吧…作为一个运维 需要…看过大部分语言手册,代码就两种,带大括号和不带的,c++ c c# php js 带带 py go ruby 等不带
    wangsongyan
        2
    wangsongyan  
       2019-12-08 06:05:49 +08:00 via iPhone   ❤️ 1
    如果还没解决,联系我 cXExMTA0MjM3NTM0
    manami
        3
    manami  
       2019-12-08 06:36:16 +08:00 via Android   ❤️ 1
    看起来是构造的请求数据的问题,如果没报错的话
    manami
        4
    manami  
       2019-12-08 06:38:03 +08:00 via Android   ❤️ 1
    如果使用的是 postman 等工具测有权限的接口记得要在请求里加上 token 或 cookie 等需要的信息
    luckylo
        5
    luckylo  
       2019-12-08 07:24:58 +08:00 via Android   ❤️ 1
    各位大佬还是看下错误信息吧。已经提前响应了。估计是过滤器拦截器那里响应了
    ChunkitAu
        6
    ChunkitAu  
       2019-12-08 08:42:15 +08:00 via Android   ❤️ 1
    有没有处理跨域问题
    CYKun
        7
    CYKun  
       2019-12-08 09:13:05 +08:00 via Android   ❤️ 1
    首先确认一下线上版本跟你本地版本是否一致
    wangxiaoaer
        8
    wangxiaoaer  
       2019-12-08 10:53:34 +08:00 via Android   ❤️ 1
    这应该是应用层的问题啊,加日志排查吧。
    Honwhy
        9
    Honwhy  
       2019-12-08 17:02:02 +08:00   ❤️ 1
    检查一下类似 IOUtils 这样的类代码,是否存在版本冲突什么的
    luckylo
        10
    luckylo  
       2019-12-08 17:57:30 +08:00 via Android
    各位大佬还是看下错误信息吧。已经提前响应了。估计是过滤器拦截器那里响应了
    luckylo
        11
    luckylo  
       2019-12-08 18:00:39 +08:00 via Android
    @luckylo 浏览器发布一次后,自动保存了上一次回复记录,点快了。抱歉

    初步感觉应该不是你说的绝对路径问题。因为路径不对,启动就会报错,找不到文件。但是你容器正常启动了。至于你想改成相对路径,可以考虑下环境变量的方式,或者直接写 class path xxx 的。这方面的资料网上很多的
    namaketa
        12
    namaketa  
    OP
       2019-12-08 23:48:00 +08:00
    @luckylo 谢谢,搞定了,确实是数据库的问题
    数据库的连接池默认是懒加载,所以等到登录的时候才会发起连接,顺便吐槽一下 spring 这个读取配置失败没有任何提示就直接返回空的机制
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   954 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:18 · PVG 05:18 · LAX 14:18 · JFK 17:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.