首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用java或j心目中获得绝对url

如何使用java或j心目中获得绝对url
EN

Stack Overflow用户
提问于 2016-01-12 09:44:31
回答 2查看 1.4K关注 0票数 2

我有一个文本框和提交按钮在我的jsp页面。当使用文本框中的url提交此按钮时,我将使用URLConnection获取该url的响应。

代码语言:javascript
复制
    String strUrl = request.getParameter("url");
    URL url = new URL(strUrl);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    byte[] encodedBytes = Base64.encodeBase64("root:pass".getBytes());
    String encoding = new String(encodedBytes);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("GET");
    connection.connect();

    InputStream content = (InputStream) connection.getInputStream();
    BufferedReader in = new BufferedReader(new InputStreamReader(content));
    try {
        fWriter = new FileWriter(new File("f:\\new.html"));
        writer = new BufferedWriter(fWriter);
        while ((line = in.readLine()) != null) {
            String s = line.toString();
            writer.write(s);    
        }               
        writer.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

在生成的html页面中,每个css、js和图像都丢失了,因为它们是从本地获取的。例如,js放在我生成的html页面中,如下所示。

代码语言:javascript
复制
    <script src="/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

但实际的src如下,

代码语言:javascript
复制
    <script src="https://www.url.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我知道有很多解决方案可以用url主机替换所有src,href。找到了很多与此相关的答案。

我用了如下的解决方案,

代码语言:javascript
复制
    if (s.contains(("href="))) {
        if (s.contains("\"../") || s.contains("\"/")) {
                    s = s.replace("\"../", "\"http://" + url.getHost() + "/");
                    s = s.replace("\"/", "\"http://" + url.getHost() + "/");
                    writer.write(s);
                    out.println(s);
        }
    }

现在我可以得到链接,但它并不是所有的网站有用。这意味着它只对那些只有src和href这样的主机前缀的站点有帮助。

在一些网站中,链接被定义为href="frmArticles.aspx“。在这种情况下,仅用href url添加主机是不够的,因为href和src是不同的,即使我以主机作为前缀。例如,具有与其URL不同的href链接的折叠URL。

http://www.nakkheeran.in/Users/frmMagazine.aspx?M=2

代码语言:javascript
复制
    <a href="frmArticles.aspx?A=25744">தை தை தை</a>

如果,我要将主机添加到这个href中,如下所示,

代码语言:javascript
复制
    <a href="http://www.nakkheeran.in/frmArticles.aspx?A=25744">தை தை தை</a>

而这是无法得到的。因为,实际的url是

代码语言:javascript
复制
    <a href="http://www.nakkheeran.in/Users/frmArticles.aspx?A=25744">தை தை தை</a>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-12 18:25:37

本质上有两种获取绝对URL的方法:

  • 使用abs:href属性getter。它的工作方式如下: 元素a= myDoc.select("a").first();//选择页面上的第一个链接,用获得链接(元素)字符串url =a.attr(“abs:href”)所需的任何选择器替换;//获取链接(href属性)的绝对url。 请注意,您需要提供您正在使用的HTML文档的URL,这样它就可以正确地解析URL,如果您使用Jsoup.connect(myHtmlUrl).get(),这是自动完成的,如果您要从字符串或文件解析HTML,则需要提供它,使用适当的Jsoup.parse()方法,它允许您提供基本URL。
  • 另一种方法是使用Java的内置URL类,,这可能是您应该在中使用的。你可以这样使用它: String absoluteUrl = new (新URL(“http://example.com/example.html"”,"script.js") ) 它将印刷: http://example.com/script.js 为了澄清一点,第一个参数(在本例中是example.com)是您的HTML的url,而第二个参数("script.js")是您的HTML中的URL。 在你的例子中,你可以像这样使用它: String absoluteUrl = new (新URL(“https://www.url.com/"”)、"/ajax/libs/jquery/2.1.1/jquery.min.js") 它将打印: https://www.url.com/ajax/libs/jquery/2.1.1/jquery.min.js
票数 1
EN

Stack Overflow用户

发布于 2016-01-12 10:18:27

URL类有一个构造函数URL(URL context, String url),用于执行您尝试使用regexp所做的工作。

编辑:在您的示例中,context URL是解析资源的源URL。假设您解析了URL context = new URL("http://example.com/path/to/some.html#where?is+carmen+sandiego")中的一些内容。然后,您只需获取任何链接的引用并创建一个URL ref = new URL(context, src)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34740166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档