栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

子线程获取主线程的Request对象问题

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

子线程获取主线程的Request对象问题

子线程获主线程HttpServletRequest对象
  • 需求
  • 解决问题
    • 利用ServletRequestAttributes
    • 继承HttpServletRequest对象
    • 继承HttpServletRequestWrapper
  • 测试案例

需求

需求:太平xxx异步执行流转逻辑。
简述:类似A调用B的业务,无需等待B执行结果,调用后立即返回。
坑:原有业务使用了HttpServletRequest对象,捆绑很深明显不适合修改代码。

解决问题 利用ServletRequestAttributes

比如网上很多人说的这个【请出门左转】:

该思路解决的是主线程存活情况下,不传递request参数而获取该对象。类型session缓存的模式,只要能拿到session的地方都能拿到session中存的值。

继承HttpServletRequest对象

继承这个需要实现所有的方法

继承HttpServletRequestWrapper

实现几个常见方法即可。
getSession、removeParameter、getSession、getParameter等按需实现即可。主要是需要把原reuest的参数拿到存放到继承后的类中即可

//我这里介于只需要getParameter、getSession
public class SystemRequest extends HttpServletRequestWrapper {
    //请求参数
    private Map params = new HashMap();
    //session参数
    private HttpSession session;
    //请求头
    private String remoteAddr = "";
    //请求头集合
    private Map headers = null;
    
    public SystemRequest(HttpServletRequest request) {
        super(request);
        this.remoteAddr = request.getRemoteAddr();
        this.params.putAll(request.getParameterMap());
        this.session = request.getSession();
        Enumeration e = request.getHeaderNames();
        headers = new HashMap();
        while (e.hasMoreElements()) {
            String key = e.nextElement();
            headers.put(key, request.getHeader(key));
        }
    }
    @Override
    public Map getParameterMap() {
        return params;
    }

    @Override
    public String getParameter(String name) {
        Object obj = params.get(name);
        if (obj == null) {
            return "";
        }
        if (obj instanceof String[]) {
            return ((String[]) obj)[0];
        }
        return (String) obj;
    }
    public HttpSession getSession() {
        return session;
    }
    public String getRemoteAddr() {
        return remoteAddr;
    }
    public void removeParameter(String name) {
        params.remove(name);
    }
}
测试案例


欢迎访问系统搭建页面,功能持续建设中【https://blog.csdn.net/ljcc122/article/details/118250990】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/984288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号