在做项目的API通知接口的时候,发现在SSH框架中无法获取到对方服务器发来的异步通知信息。
最后排查到的原因可能是struts2对HttpServletRequest进行了二次处理,那么该如何拿到post的请求数据呢,方法很多,下面只给出一种方式。

在servlet中GET请求可以通过HttpServletRequest的getRequestURL方法和getQueryString()得到完 整的请求路径和请求所有参数列表,

POST的需要getParameterMap()方法遍历得到,不论GET或POST都可以通过 getRequestURL+getParameterMap()来得到请求完整路径。

  1. package com.xxx
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.Map;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. public class GetParams extends HttpServlet {
  12. private static final long serialVersionUID = 1L;
  13.  
  14. public GetParams() {
  15. super();
  16. }
  17.  
  18. protected void doGet(HttpServletRequest request,
  19. HttpServletResponse response) throws ServletException, IOException {
  20. PrintWriter writer = response.getWriter();
  21. writer.println("GET " + request.getRequestURL() + " "
  22. + request.getQueryString());
  23.  
  24. Map<String, String[]> params = request.getParameterMap();
  25. String queryString = "";
  26. for (String key : params.keySet()) {
  27. String[] values = params.get(key);
  28. for (int i = 0; i < values.length; i++) {
  29. String value = values[i];
  30. queryString += key + "=" + value + "&";
  31. }
  32. }
  33. // 去掉最后一个空格
  34. queryString = queryString.substring(0, queryString.length() - 1);
  35. writer.println("GET " + request.getRequestURL() + " " + queryString);
  36. }
  37.  
  38. protected void doPost(HttpServletRequest request,
  39. HttpServletResponse response) throws ServletException, IOException {
  40. PrintWriter writer = response.getWriter();
  41. Map<String, String[]> params = request.getParameterMap();
  42. String queryString = "";
  43. for (String key : params.keySet()) {
  44. String[] values = params.get(key);
  45. for (int i = 0; i < values.length; i++) {
  46. String value = values[i];
  47. queryString += key + "=" + value + "&";
  48. }
  49. }
  50. // 去掉最后一个空格
  51. queryString = queryString.substring(0, queryString.length() - 1);
  52. writer.println("POST " + request.getRequestURL() + " " + queryString);
  53. }
  54. }

根据上面的代码,稍微改动一下,实现如下:

  1.   /**
  2. * 获取POST数据,不支持数组形式数据,一般使用场景是对方使用POST方式传递数据过来
  3. * TODO 待完善
  4. * @author phpdragon
  5. * @date 2014-12-24 下午3:45:22
  6. * @return
  7. * @description :
  8. * @return Map<String,String>
  9. * @throws
  10. */
  11. @SuppressWarnings("unchecked")
  12. private static Map<String, String> getPostData() {
  13. Map<String, String> param = new HashMap<String, String>();
  14.  
  15. HttpServletRequest request = ServletActionContext.getRequest();
  16. Map<String, String[]> params = request.getParameterMap();
  17. for (String key : params.keySet()) {
  18. String[] values = params.get(key);
  19. for (int i = 0; i < values.length; i++) {
  20. param.put(key, values[i]);
  21. }
  22. }
  23.  
  24. return param;
  25. }

虽然有所不足,但对于手上的项目中API接口场景已经满足需求了。

SSH 获取GET/POST参数的更多相关文章

  1. bat获取所有的参数

    bat默认只能获取到1-9个参数,分别用%1 %2 ... %9引用,如果传给bat的参数大于9个,就必须用shift. 工作需要,要写个bat脚本,获取所有的参数,再将所有的参数传给Java,代码如 ...

  2. 【记录】JS 获取 URL 中文参数编码

    比如 URL:http://www.xxxx.com/中文参数 这个在 js 获取"中文参数"的时候会出现乱码. 解决方法:decodeURIComponent(获取的中文参数);

  3. Javascript 获取链接(url)参数的方法

    有时我们需要在客户端获取链接参数,一个常见的方法是将链接当做字符串,按照链接的格式分解,然后获取对应的参数值.本文给出的就是这个流程的具体实现方法. 当然,我们也可以用正则直接匹配,文章中也给出了一个 ...

  4. [工具类]获取url中参数列表

    写在前面 在项目中经常用到解析url中参数的逻辑,今天先下载就自己封装了一个方法,方便以后使用的时候,信手拈来.当然这里给出的方法是针对常见的url参数类型的,对于重写url,或者路由格式的不考虑. ...

  5. jqure 获取地址栏的参数

    从一个页面跳转到另外一个页面传参,我们用jqure得到参数需要两部分: 处理浏览器地址栏参数的方法: function GetQueryString(name) { var reg = new Reg ...

  6. Asp获取网址相关参数大全

      Asp获取网址相关参数大全 代码一:[获取地址中的文件名,不包含扩展名]<%dim Url,FileName,File Url=split(request.servervariables(& ...

  7. js获取url地址栏参数

    前端开发中经常会遇到需要获取url地址栏参数问题 方法如下: function getQueryStringByName(name){ var src = "www.baidu.com?na ...

  8. Spring Boot获取前端页面参数的几种方式总结

    Spring Boot的一个好处就是通过注解可以轻松获取前端页面的参数,之后可以将参数经过一系列处理传送到后台数据库. 获得的方式有很多种,这里稍微总结一下,大致分为以下几种: 1.指定前端url请求 ...

  9. Spring MVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式

    首先做好环境配置 在mvc.xml里进行配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器 <?xml version="1.0" encoding=&qu ...

随机推荐

  1. ACMG遗传变异分类标准与指南

    2015年,美国权威机构——美国医学遗传学与基因组学学会(ACMG)编写和发布了<ACMG遗传变异分类标准与指南>.为帮助我国医疗工作者和遗传咨询从业者更好地理解ACMG遗传变异分类标准. ...

  2. python打包到pypi小结

       如果你写了一个python库,想让别人快速使用你的库,最简单的方式就是使用python官方出品的库托管网站pypi了.    pypi的全称是Python Package Index,是pyth ...

  3. shell 跳出循环

    跳出循环 break命令 例: #!/bin/bash while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1 ...

  4. DataTable转化成实体对象

    /// <summary> /// The data extension. /// </summary> public static class DataExtension { ...

  5. listener TNS-01189 问题

    -- 启动监听,提示已经启动. [oracle@sh ~]$ lsnrctl start LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 0 ...

  6. Admin管理后台

    Django奉行Python的内置电池哲学.它自带了一系列在Web开发中用于解决常见问题或需求的额外的.可选工具.这些工具和插件,例如django.contrib.redirects都必须在setti ...

  7. ZZZ_整理的结构

    A.头尾 添加/移除 B.随机存取 C.数据存取 1.构造函数 2.赋值 3.迭代器操作 4.插入 5.删除 6.交换 7.大小 8.查找

  8. 1月28日周日,更新ruby到2.5.0版,rvm更新。

    在学习Array的方法的时候,发现文档concat方法可以进行多个数组的添加,而我的不行,猜测是ruby版本没有更新. 查询2.31ruby版本的concat方法,果然和2.5版本的不一样. 于是准备 ...

  9. spoj Help the Military Recruitment Office!

    题意:给出名字和地方,地方会重定向,最后再给出名字,问现在属于哪里? 用并查集. //#pragma comment(linker,"/STACK:1024000000,1024000000 ...

  10. Android之EventBus1.0 和EventBus3.0的使用详解

    当Android项目越来越庞大的时候,应用的各个部件之间的通信变得越来越复杂,那么我们通常采用的就是Android中的解耦组件EventBus.EventBus是一款针对Android优化的发布/订阅 ...