开发者社区> 问答> 正文

为什么我写的代码中getRequest()获得的是本页面的url,而不是请求页面?400报错

为什么我写的代码中getRequest()获得的是本页面的url,而不是请求页面的url? 400 报错

   在配置微信JS-SDK接口的时候,需要在后台动态获得发送请求的页面的url(http://localhost:8080/ConnectTest/GetData.jsp),但我用getRequestURL得到的却是后台文件的地址(http://localhost:8080/ConnectTest/sign),ps:使用过request.getAttribute("javax.servlet.forward.request_uri")但返回的url为null。

    请大手帮忙看看,今天弄了10多个小时都没弄出来,有点崩溃╮(╯﹏╰)╭

代码如下:

GetData.jsp:

   <script>
      $(document).ready(function(){
              $.ajax({
                  //提交数据的类型 POST GET
                  type:"Get",
                  //提交的网址
                  url:"http://localhost:8080/ConnectTest/sign",
                  //提交的数据
                  /* data:form, */
                  datatype:"json",
                  success:function(data){
                    var obj = JSON.parse(data);
                    var jsonstr = JSON.stringify(obj);
                    var jsary = eval('('+jsonstr+')');
                    alert(jsary.url)
                    alert(location.href.split('#')[0])
                    wx.config({
                        debug: true, 
                        appId: 'wx51b7336a2b1cd2d9',
                        timestamp: 'jsary.timestamp', 
                        nonceStr: 'jsary.nonceStr', 
                        signature: 'jsary.signature',
                        jsApiList: [
                            "wx.onMenuShareTimeline"
                        ]
                    });
                    wx.ready(function(){
                        //share to timeline
                        wx.onMenuShareTimeline({
                            title: '百度', // 分享标题
                            link: 'www.baidu.com', 
                            imgUrl: 'https://www.baidu.com/img/bd_logo1.png', // 分享图标
                            success: function () { 
                                alert("分享成功")
                            },
                            cancel: function () { 
                                alert("分享失败")
                            }
                        });
                    });
                  }
                });
       });
  </script>

Sign.java(http://localhost:8080/ConnectTest/sign):

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            String jsapi_ticket = "kgt8ON7yVITDhtdwci0qeXxjVFn7AZ9I21TkQnlxXoQF3VTPc5tRORpvuB_slLD-Xua5sSwuBOrO5ZfMNGJUTA"; 
            String url = request.getRequestURL().toString()+"/";
            System.out.println(url);
            Map<String, String> ret = sign(jsapi_ticket, url);
                        sendScResponse(ret, response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
        <-- 中间省略一些不重要的代码-->
        private void sendScResponse(Object obj, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/javascript; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        if (obj != null) {
            String responseStr = m_gson.toJson(obj);
            response.getWriter().write(responseStr);
        }
    }

展开
收起
爱吃鱼的程序员 2020-06-04 13:13:55 1048 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你干嘛要后台再去获得,你直接传回去不就可以了

    而且就算要获得也是要获得来源链接  request.getHeader("referer"); 

    ######我在后台获取是为了动态获得发起请求的url,貌似getRequestURL用错了,我去试试getHeader######

    你请求的地址就是/sign没问题啊

    ######我在GetData.jsp中向./sign发送请求,在./sign中用gerRequest()是去抓取发送请求的url(也就是GetData.jsp)的(╯︵╰)######

    没问题啊,你是从GetData.jsp发送的请求,gerRequest()获取的就是请求来源的url

    ######回复 @木有龙井茶 : 解决了,getRequestULR获取的是请求中的地址,而不是请求发起页的地址......######呃,我好像说错了,明天查查资料######那我应该获得的url是http://localhost:8080/ConnectTest/GetData.jsp啊,但我得到的是http://localhost:8080/ConnectTest/sign######

    从 refer 头里面拿吧 

    ######恩 我试试######

    问题已解决,request.getRequestURL获取的是请求的地址,而不是请求发起页所在的地址,如果想获得请求发起页所在的地址(也就是上一个请求的url),可以用request.getHeader("Referer")来获取。

    把结果写在这里,希望以后不会有新人掉到这个坑里ヽ( ̄▽ ̄)ノ

    2020-06-04 14:33:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载