起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2155|回复: 7

[结贴] 定义一个action来获取客户端ip,调用后提示http 500的,求解

[复制链接]

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
发表于 2017-7-3 22:05:00 | 显示全部楼层 |阅读模式
需要获取访问客户端的ip地址,用了腾讯的负载均衡并且已经设置过“获取客户端ip”选项。
1、写GetIP.java文件:
  1. package mfxxl;

  2. import java.net.InetAddress;
  3. import java.net.UnknownHostException;
  4. import javax.servlet.http.HttpServletRequest;

  5. public class GetIP {
  6.           public static String getIpAddress(HttpServletRequest request){
  7.                   String ipAddress = request.getHeader("x-forwarded-for");
  8.                   
  9.                   if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  10.                           ipAddress = request.getHeader("Proxy-Client-IP");
  11.                   }
  12.                   if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  13.                           ipAddress = request.getHeader("WL-Proxy-Client-IP");
  14.                   }
  15.                   if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  16.                           ipAddress = request.getRemoteAddr();
  17.                           
  18.                           if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
  19.                                   InetAddress inetAddress = null;
  20.                                   try {
  21.                                           inetAddress = InetAddress.getLocalHost();
  22.                                   } catch (UnknownHostException e){
  23.                                           e.printStackTrace();
  24.                                   }
  25.                                   ipAddress = inetAddress.getHostAddress();
  26.                           }
  27.                   }
  28.                   
  29.                   if (null != ipAddress && ipAddress.length() > 15){
  30.                           if(ipAddress.indexOf(",") > 0){
  31.                                   ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
  32.                           }
  33.                   }
  34.                   
  35.                   return ipAddress;
  36.           }
  37. }          
复制代码
2、新建m服务文件,mfxxlgetip.service.m
  1. <?xml version="1.0" encoding="UTF-8"?><model xmlns="http://www.justep.com/model"><action xmlns="http://www.w3.org/1999/xhtml" name="getIP" impl="mfxxl.GetIP.getIpAddress"></action></model>
复制代码

3、在w文件调用,
  1.                 justep.Baas.sendRequest({
  2.                           "url" : "/mfxxl/mfxxlgetip",
  3.                           "action" : "getIP",
  4.                           "async " : true,
  5.                           "success" : function(ip) {
  6. //                                  alert(ip);
  7.                           }
  8.                  });
复制代码
baas都是经过模型编译的,java文件的代码应该也没有问题,tomcat也是重启了。调用时提示
  1. HTTP Status 500 - 执行Action:mfxxl/mfxxlgetip/getIP失败,null
复制代码

以下是详细报错信息,求解,感谢!
  1. HTTP Status 500 - 执行Action:mfxxl/mfxxlgetip/getIP失败,null

  2. type Exception report

  3. message 执行Action:mfxxl/mfxxlgetip/getIP失败,null

  4. description The server encountered an internal error that prevented it from fulfilling this request.

  5. exception

  6. javax.servlet.ServletException: 执行Action:mfxxl/mfxxlgetip/getIP失败,null
  7.         com.justep.baas.servlet.BaasServlet.execService(Unknown Source)
  8.         com.justep.baas.servlet.BaasServlet.service(Unknown Source)
  9. root cause

  10. java.lang.NullPointerException
  11.         com.justep.baas.servlet.BaasServlet.execService(Unknown Source)
  12.         com.justep.baas.servlet.BaasServlet.service(Unknown Source)
  13. note The full stack trace of the root cause is available in the Apache Tomcat/6.0.41 logs.

  14. Apache Tomcat/6.0.41
复制代码




发表于 2017-7-4 10:54:23 | 显示全部楼层
NullPointerException

空指针错位!
500错位是服务器端的错误!建议调试java跟一下!执行什么代码报错的!

http://docs.wex5.com/wex5-studio-question-list-2001/
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-7-4 11:11:46 | 显示全部楼层
liangyongfei 发表于 2017-7-4 10:54
NullPointerException

空指针错位!

之前没有注意,编译时就出错了!
  1. 开始编译BAAS模型......
  2. 编译BAAS模型结束
  3. 编译用时:  1 秒
  4. 开始编译BAAS Service Java......
  5. log4j:WARN No appenders could be found for logger (com.justep.baas.BaasException).
  6. log4j:WARN Please initialize the log4j system properly.
  7. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
  8. com.justep.baas.compiler.CompileException: 编译模块Java出错
  9. E:\Wex5.3.6.3\runtime\BaasServer\baas\mfxxl\Mfxxlgetip2__do.java:43: 错误: 无法将类 GetIPAddress中的方法 getIpAddress应用到给定类型;
  10.                                 JSONObject ret = mfxxl.GetIPAddress.getIpAddress(params, context);
  11.                                                                    ^
  12.   需要: HttpServletRequest
  13.   找到: JSONObject,ActionContext
  14.   原因: 实际参数列表和形式参数列表长度不同
  15. 1 个错误

  16.         at com.justep.baas.compiler.java.JavaCompiler.compile(Unknown Source)
  17.         at com.justep.baas.compiler.java.Compiler.compileJavaDir(Unknown Source)
  18.         at com.justep.baas.compiler.java.Compiler.compileJavaDir(Unknown Source)
  19.         at com.justep.baas.compiler.java.Compiler.compileJavaDir(Unknown Source)
  20.         at com.justep.baas.compiler.java.Compiler.compileJavaCode(Unknown Source)
  21.         at com.justep.baas.compiler.java.Compiler.compile2jar(Unknown Source)
  22.         at com.justep.baas.compiler.java.Compiler.compile2jar(Unknown Source)
  23.         at com.justep.baas.compiler.java.Compiler.compile(Unknown Source)
  24.         at com.justep.baas.compiler.CompilerFactory.main(Unknown Source)
复制代码


java文件是不是没有写对啊,需要符合wex5的格式吗?
  1. package mfxxl;

  2. import java.net.InetAddress;
  3. import java.net.UnknownHostException;
  4. import javax.servlet.http.HttpServletRequest;

  5. public class GetIPAddress {
  6.           public static String getIpAddress(HttpServletRequest request){
  7.                   String ipAddress = request.getHeader("x-forwarded-for");
  8.                   
  9.                   if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  10.                           ipAddress = request.getHeader("Proxy-Client-IP");
  11.                   }
  12.                   if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  13.                           ipAddress = request.getHeader("WL-Proxy-Client-IP");
  14.                   }
  15.                   if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  16.                           ipAddress = request.getRemoteAddr();
  17.                           
  18.                           if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
  19.                                   InetAddress inetAddress = null;
  20.                                   try {
  21.                                           inetAddress = InetAddress.getLocalHost();
  22.                                   } catch (UnknownHostException e){
  23.                                           e.printStackTrace();
  24.                                   }
  25.                                   ipAddress = inetAddress.getHostAddress();
  26.                           }
  27.                   }
  28.                   
  29.                   if (null != ipAddress && ipAddress.length() > 15){
  30.                           if(ipAddress.indexOf(",") > 0){
  31.                                   ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
  32.                           }
  33.                   }
  34.                   
  35.                   return ipAddress;
  36.           }
  37. }         
复制代码

回复 支持 反对

使用道具 举报

发表于 2017-7-4 14:09:48 | 显示全部楼层
ufo1982ufo 发表于 2017-7-4 11:11
之前没有注意,编译时就出错了!

getIpAddress 方法定义有问题
http://docs.wex5.com/wex5-server-question-list-2025/

BaasServer 定义要求 返回值必须是JSONObject 类型的
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-7-12 11:14:02 | 显示全部楼层
本帖最后由 ufo1982ufo 于 2017-7-12 11:16 编辑

参考了你给的链接,修改java文件如下:
  1. package mfxxl;

  2. import java.io.IOException;
  3. import java.net.InetAddress;
  4. import java.net.UnknownHostException;
  5. import javax.servlet.http.HttpServletRequest;
  6. import org.codehaus.jackson.map.JsonMappingException;
  7. import me.chanjar.weixin.common.exception.WxErrorException;
  8. import com.alibaba.fastjson.JSONException;
  9. import com.alibaba.fastjson.JSONObject;
  10. import com.justep.baas.action.ActionContext;

  11. public class GetIPAddress {
  12.         public static JSONObject getIpAddress(JSONObject params, ActionContext context)throws JSONException, JsonMappingException, IOException, WxErrorException{
  13.             HttpServletRequest request = (HttpServletRequest)context.get(ActionContext.REQUEST);
  14.                 String ipAddress = request.getHeader("x-forwarded-for");
  15.                 if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  16.                         ipAddress = request.getHeader("Proxy-Client-IP");
  17.                 }
  18.                 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  19.                         ipAddress = request.getHeader("WL-Proxy-Client-IP");
  20.                 }
  21.                 if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)){
  22.                         ipAddress = request.getRemoteAddr();
  23.                         
  24.                         if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){
  25.                                 InetAddress inetAddress = null;
  26.                                 try {
  27.                                         inetAddress = InetAddress.getLocalHost();
  28.                                 } catch (UnknownHostException e){
  29.                                         e.printStackTrace();
  30.                                 }
  31.                                 ipAddress = inetAddress.getHostAddress();
  32.                         }
  33.                 }
  34.                 if (null != ipAddress && ipAddress.length() > 15){
  35.                         if(ipAddress.indexOf(",") > 0){
  36.                                 ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
  37.                         }
  38.                 }
  39.                 JSONObject map = new JSONObject();
  40.                     map.put("ip", ipAddress);
  41.             return map;
  42.         }
  43. }
复制代码
在w文件中调用:
  1.         Model.prototype.getIP = function(event){
  2. //                debugger;
  3.                 var self = this;
  4.                 Baas.sendRequest({
  5.                     "url" : "/mfxxl/mfxxlgetip",
  6.                     "action" : "getip",
  7.                     "async" : false,
  8.                     "params" : {},
  9.                     "success" : function(data) {
  10.                         var ip = data.ip;
  11.                         self.mIP = ip;
  12.                     }
  13.                 });
  14.         };
复制代码
这样可以获取到ip地址了,模型编译也没有出错,就是编译完后报错如下:
  1. 七月 12, 2017 11:11:15 上午 org.apache.catalina.core.StandardContext reload
  2. 信息: Reloading Context with name [/baas] has started
  3. 七月 12, 2017 11:11:15 上午 org.apache.catalina.loader.WebappClassLoader validateJarFile
  4. 信息: validateJarFile(E:\Wex5.3.6.3\apache-tomcat\webapps\..\..\runtime\BaasServer\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
  5. 七月 12, 2017 11:11:35 上午 org.apache.catalina.core.StandardContext reload
  6. 信息: Reloading Context with name [/baas] has started
  7. 七月 12, 2017 11:11:35 上午 org.apache.catalina.loader.WebappClassLoader validateJarFile
  8. 信息: validateJarFile(E:\Wex5.3.6.3\apache-tomcat\webapps\..\..\runtime\BaasServer\WEB-INF\lib\servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
复制代码
这个是什么问题?









回复 支持 反对

使用道具 举报

发表于 2017-7-12 13:26:12 | 显示全部楼层
ufo1982ufo 发表于 2017-7-12 11:14
参考了你给的链接,修改java文件如下:
在w文件中调用:
这样可以获取到ip地址了,模型编译也没有出错,就 ...

这个可以忽略!
只是重新加载的提示信息! 并没有报错!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-7-12 14:13:00 | 显示全部楼层
liangyongfei 发表于 2017-7-12 13:26
这个可以忽略!
只是重新加载的提示信息! 并没有报错!

好的,谢谢老师,请结贴!
回复 支持 反对

使用道具 举报

2

主题

16

帖子

64

积分

初级会员

Rank: 2

积分
64
QQ
发表于 2017-11-4 11:05:35 | 显示全部楼层
我也遇到这个问题,谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-3 13:46 , Processed in 0.064565 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表