利用tomcat解决本地文件跨域问题

在学习ajax的过程中,学习了一个例子,其中代码如下:

function updateDisplay(verse){
    verse = verse.replace(" ","");
    verse = verse.toLowerCase();
    let url = verse+'.txt';
    let request = new XMLHttpRequest();
    request.open('GET',url);
    request.responseType = 'text';
    request.onload = function(){
        poemDisplay.textContent = request.response;
    }
    request.send();
}

但是按照以往直接打开的做法,浏览器控制台出现如下错误

from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

因为是从本地文件运行示例的,一些浏览器(包括Chrome)不会运行异步请求,这是因为安全限制。(了解详情可参考:https://developer.mozilla.org/zh-CN/docs/learn/Server-side/First_steps/Website_security)

为了解决这个问题,经过多方搜索,我参考了 https://blog.csdn.net/saber872138/article/details/82995238 答案中的解决方法一,即利用tomcat解决。
按照 https://how2j.cn/k/tomcat/tomcat-tutorial/541.html 的介绍
首先安装java环境,在官网 https://www.oracle.com/java/technologies/javase-downloads.html 中选择要安装的版本,我选择的JDK是Java SE 8u241,这时Java SE 11 (LTS)是最新最稳定的版本,我先安装了这个版本,安装完之后,找不到jre文件,对于我这个搞不懂jre和jdk到底是啥的菜鸟来说,这两个在我印象中是缺一不可的,因为后面还有一项配置环境变量需要jre的所在目录,于是我把Java SE 11 (LTS)卸载了,重新安装了Java SE 8u241,也是我之前一直在用着的版本。这个安装文件包括了jre的安装,安装成功后就是设置环境变量,如下

变量名 变量值
JAVA_HOME D:\Program Files (x86)\Java\jdk1.8.0_241
CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

设置并保存,在命令行输入“java -version”,得出结果表示java环境已搭建好,接下来就要搞定tomcat了。

tomcat是在官网 https://tomcat.apache.org/ 下载的压缩包,我下载的版本号是9.0.31,直接将压缩包解压到特定文件下就行,然后打开根目录下的bin文件夹,找到start.bat并执行,刚开始启动tomcat的窗口出现乱码,

14-Mar-2020 20:23:03.593 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\Program Files\apache-tomcat-9.0.31\webapps\host-manager] has finished in [65] ms
14-Mar-2020 20:23:03.594 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory 鎶妛eb 搴旂敤绋嬪簭閮ㄧ讲 鍒扮洰褰?[D:\Program Files\apache-tomcat-9.0.31\webapps\manager]

14-Mar-2020 20:23:03.644 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\Program Files\apache-tomcat-9.0.31\webapps\manager] has finished in [51] ms
14-Mar-2020 20:23:03.645 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory 鎶妛eb 搴旂敤绋嬪簭閮ㄧ讲 鍒扮洰褰?[D:\Program Files\apache-tomcat-9.0.31\webapps\ROOT]

14-Mar-2020 20:23:03.690 淇℃伅 [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\Program Files\apache-tomcat-9.0.31\webapps\ROOT] has finished in [44] ms
14-Mar-2020 20:23:03.696 淇℃伅 [main] org.apache.coyote.AbstractProtocol.start 寮€濮嬪崗璁鐞嗗彞鏌刐"http-nio-8080"]
14-Mar-2020 20:23:03.717 淇℃伅 [main] org.apache.catalina.startup.Catalina.start Server startup in [1,273] milliseconds

我查了一下并且在这个 https://blog.csdn.net/weixin_39513118/article/details/86352063 回答下找到了答案,即修改tomcat的conf下的logging.properties中的参数,将UTF-8改为GBK即可。

java.util.logging.ConsoleHandler.encoding = GBK

将跨域出现问题的代码放在tomcat下的webapps/ROOT下,例如我放在 D:\Program Files\apache-tomcat-9.0.31\webapps\ROOT\page\api ,然后启动tomcat,在浏览器上输入 http://localhost:8080/page/api/ajax-start.html 就能访问到该页面。
如果想更加全面了解tomcat,接下来要花一段时间看看 https://how2j.cn/k/tomcat/tomcat-tutorial/541.html

根据MDN的这篇文章 https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/set_up_a_local_testing_server 可以知道,原来用python也可以,我决定试一试。

posted @ 2020-09-13 23:43  梦娜丽莎  阅读(280)  评论(0编辑  收藏  举报