用 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 也可以,我决定试一试。