java 獲取網頁寫入本地文件來解決讓一個js事件

来源:https://www.cnblogs.com/shanghaiweb/archive/2022/08/02/16544700.html
-Advertisement-
Play Games

今天我們來講解leetcode案例分析,如何動態規劃的解題套路,態規劃的核心思想,以前經常會遇到動態規劃類型題目。 ...


依賴

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>

 

調用

public static void main(String[] args) throws ClientProtocolException, URISyntaxException, IOException {
String s =

writeWordFile("d:/", "ab.doc", getHttpData(s));
System.out.println("ok");
}

 

獲取網頁

// 請求網路自考網數據
public static String getHttpData(String url) throws URISyntaxException, ClientProtocolException, IOException {
List<NameValuePair> nameValuePairList = Lists.newArrayList();
nameValuePairList.add(new BasicNameValuePair("q", "x"));
URI uri = new URIBuilder(url).addParameters(nameValuePairList).build();
List<Header> headerList = Lists.newArrayList();
headerList.add(new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate"));
headerList.add(new BasicHeader(HttpHeaders.CONNECTION, "keep-alive"));
HttpClient httpClient = HttpClients.custom().setDefaultHeaders(headerList).build();
HttpUriRequest httpUriRequest = RequestBuilder.get().setUri(uri).build();
HttpResponse httpResponse = httpClient.execute(httpUriRequest);
HttpEntity entity = httpResponse.getEntity();
String rawHTMLContent = EntityUtils.toString(entity);
EntityUtils.consume(entity);
return rawHTMLContent;
}

寫入本地

public static void writeWordFile(String path, String fileName, String content) {
try {
if (!"".equals(path)) {
// 檢查目錄是否存在
File fileDir = new File(path);
if (fileDir.exists()) {
byte b[] = content.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(b);
POIFSFileSystem poifs = new POIFSFileSystem();
DirectoryEntry directory = poifs.getRoot();
DocumentEntry documentEntry = directory.createDocument("WordDocument", bais);
FileOutputStream ostream = new FileOutputStream(path + fileName);
poifs.writeFilesystem(ostream);
bais.close();
ostream.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

 

import


import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.assertj.core.util.Lists;

window.addEventListener來解決讓一個js事件執行多個函數

本篇文章來簡單介紹一下JS作用域,以及BOM對象中的三個基礎對象,分別是window對象、history對象和location對象。

一、JS作用域

1、函數嵌套作用域

//函數作用域
var place="Beijing"; //外部定義的變數
function outer()
{
var place="Chengdu"; //outer函數下的重新定義
function inner()
{
var place="Guangzhou"; //inner函數下的定義
console.log(place);
}
inner();
}
// //調用outer函數,同時會執行inner函數
outer();

執行結果:
Guangzhou

2、函數多調用

var name="路飛";
function bar()
{
console.log(name);
}
function func()
{
var name="索隆";
return bar;
}
var ret=func(); //將func函數執行的返回結果賦值給ret變數,即ret將代表bar函數
ret(); //調用ret函數,即bar函數
//又因為bar函數的作用域在外部,與它同級的name變數值為“路飛”

執行結果:
路飛

二、window視窗

1、BOM簡介
BOM(瀏覽器對象模型),可以對瀏覽器視窗進行訪問和操作。使用 BOM,開發者可以移動視窗、改變狀態欄中的文本以及執行其他與頁面內容不直接相關的動作。使 JavaScript 有能力與瀏覽器“對話”。

2、window對象方法彙總

  • alert() 顯示帶有一段消息和一個確認按鈕的警告框。
window.alert("歡迎訪問!");

JavaScript之BOM對象(JS函數作用域、window、history、location對象)_javascript

  • confirm() 顯示帶有一段消息以及確認按鈕和取消按鈕的對話框。
var ret= window.confirm("您確定要訪問嗎?");  //由用戶做出選擇,因此有一個返回值
console.log(ret);

JavaScript之BOM對象(JS函數作用域、window、history、location對象)_web_02

  • prompt() 顯示可提示用戶輸入的對話框。
var ret= window.prompt("您的訪問指令:");  //要去用戶輸入內容,在控制台顯示
console.log(ret);

JavaScript之BOM對象(JS函數作用域、window、history、location對象)_js_03

  • open() 打開一個新的瀏覽器視窗或查找一個已命名的視窗。(不常用)
  • close() 關閉瀏覽器視窗。(不常用)
  • setInterval() 按照指定的周期(以毫秒計)來調用函數或計算表達式。
  • clearInterval() 取消由 setInterval() 設置的 timeout。
setInterval(func,1000);  //表示每隔1000毫秒(1秒)執行一次函數func()
function func()
{
console.log("Hello JavaScript!");
}

JavaScript之BOM對象(JS函數作用域、window、history、location對象)_js_04

 

可以看到這個地方會一直有"Hello JavaScript!"的出現。

下麵是由setInterval和clearInterval實現的動態時間更新小案例…

JS(<script>標簽內的)代碼:

showTime();
function showTime()
{
var current_time=new Date().toLocaleString(); //獲取當前時間並將其轉化成字字元串顯示
// alert(current_time);
var ele=document.getElementById("id1"); //獲取id1這個標簽的內容
ele.value=current_time; //將獲取的id1標簽的內容設置為輸入框的值,實現動態更新時間
}

var click1
function begin()
{
if(click1==undefined) //防止多個click串列
{
showTime(); //實現無延遲效果
click1= setInterval(showTime,1000); //實現一秒更新一次時間
}
}

function end()
{
clearInterval(click1); //清除定時間隔
}

外部再加兩個標簽:

<input type="text" id="id1" onclick="begin()">
<button onclick="end()">停止!</button> <!-- 綁定一個end函數 -->

JavaScript之BOM對象(JS函數作用域、window、history、location對象)_程式人生_05

  • setTimeout() 在指定的毫秒數後調用函數或計算表達式。
  • clearTimeout() 取消由 setTimeout() 方法設置的 timeout。
function func()
{
console.log("別點我了!");
}
var c= setTimeout(func,3000); //三秒鐘之後只執行一次
//清除setTimeout 的內容
// clearTimeout(c);

scrollTo() 把內容滾動到指定的坐標。(少用)

三、history對象

1、簡介
History 對象包含用戶(在瀏覽器視窗中)訪問過的 URL。
History 對象是 window 對象的一部分,可通過 window.history 屬性對其進行訪問。
2、history對象的方法

  • back() 載入 history 列表中的前一個 URL。
  • forward() 載入 history 列表中的下一個 URL。
  • go() 載入 history 列表中的某個具體頁面。

3、測試代碼例如:進口氣動球閥頁面
history1:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

<a href="JS之history2.html">通往history2</a>
<button onclick="history.forward()"> >>>>>>>> </button>
<script>

</script>
</body>
</html>

history2:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

<button onclick="history.back()">Back</button>
</body>
</html>

這樣就可以實現一個基本的前進和返回的效果(這個其實也不太常用)

四、location對象

1、簡介
Location 對象包含有關當前 URL 的信息。
Location 對象是 Window 對象的一個部分,可通過 window.location 屬性來訪問。

2、location下的方法

  • location.assign(URL)
  • location.reload()
  • location.replace(newURL)//註意與assign的區別

3、測試代碼

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button onclick="f()">點我!</button>

<script>
function f1()
{
// location.assign("www.baidu.com"); //預設跳轉的頁面
// location.reload(); //刷新當前頁面
location.replace("www.baidu.com"); //替換當前頁面
//assign可以後退,replace不行
}
</script>
</body>
</html>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 項目背景 我們的系統(一個 ToB 的 Web 單頁應用)前端單頁應用經過多年的迭代,目前已經累積有大幾十萬行的業務代碼,30+ 路由模塊,整體的代碼量和複雜度還是比較高的。 項目整體是基於 Vue + TypeScirpt,而構建工具,由於最早項目是經由 vue-cli 初始化而來,所以自然而然使 ...
  • 什麼時候精靈圖呢? 通常在渲染頁面的時候,需要伺服器向我們發送數據,但有的時候一個頁面需要多張圖時,伺服器就會處於連續發圖的工作狀態,但如果我們把需要的圖都放在一張圖上,這樣可以大大的減少服務的工作負擔,打個比喻。伺服器發一張圖是,工作流程是:找到圖片——讀取圖片——發送圖片,如果是發送5個圖片時, ...
  • 蒼穹之邊,浩瀚之摯,眰恦之美; 悟心悟性,善始善終,惟善惟道! —— 朝槿《朝槿兮年說》 寫在開頭 我們都知道,經過多年的發展和無數Java開發者的不懈努力,Java已經由一門單純的電腦編程語言,逐漸演變成一套強大的以及仍在可持續發展中的技術體系平臺。 雖然,Java設計者們根據不同的技術規範,把 ...
  • 1. 登錄用戶數據獲取 登錄成功之後,在後續的業務邏輯中,開發者可能還需要獲取登錄成功的用戶對象,如果不使用任何安全管理框架,那麼可以將用戶信息保存在HttpSession中,以後需要的時候直接從HttpSession中獲取數據。在Spring Security中,用戶登錄信息本質上還是保存在 Ht ...
  • 24 類型標註 24.1 Python中的數據類型 在Python中有很多數據類型,比較常見如下所示: |整型 | 浮點型|字元串 | 列表|元組|字典|集合|布爾| | | | | | | | | | |int| float|str|list|tuple|dict|set|bool| 因Pytho ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 大家好,我是“良工說技術”。 今天給大家帶來的是springboot中的@ConditionalOnClass註解的用法。上次的@ConditionalOnBean註解還記得嗎? 一、@ConditionalOnClass註解初始 看下@CodidtionalOnClass註解的定義, 需要註意的有 ...
  • 一、緩存機制的原理 一個系統在面向用戶使用的時候,當用戶的數量不斷增多,那麼請求次數也會不斷增多,當請求次數增多的時候,就會造成請求壓力,而我們當前的所有數據查詢都是從資料庫MySQL中直接查詢的,那麼就可能會產生如下問題 ==頻繁訪問資料庫,資料庫訪問壓力大,系統性能下降,用戶體驗差== 解決問題 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...