gpt4 book ai didi

javascript - Tomcat servlet,将所有网址重定向到单个网页

转载 作者:行者123 更新时间:2023-11-28 22:06:14 25 4
gpt4 key购买 nike

我在 tomcat 中部署了一个 servlet 'csvreports'。 csvreports 中的 'index.html' 从 data/ 文件夹中选择 csv 文件并显示为 html 表格。

url格式为

localhost:8080/csvreports/?csv=test.csv

我正在解析 index.html 中的 url 以获取 csv 文件名并从代码中的 /data/test.csv 中读取。

现在,url 更改为 localhost:8080/csvreports/folder1/?csv=test.csv,localhost:8080/csvreports/folder2/?csv=test.csv

folder1 和 folder2 是动态生成的,假设文件夹已经存在于 tomcat/webapps/csvreports/

我需要为所有网址执行相同的 index.html。我的思路是解析url得到路径,最后用路径读取csv。

我想了解如何将 localhost:8080/csvreports/*/?csv=test.csv 重定向到单个网页。

如果您有任何其他关于如何实现这一点的想法,我们将不胜感激。

最佳答案

将所有 URL 映射到同一页面

使用 index.jsp 而不是 index.html。您实际上可以重命名文件,而无需更改任何内容。

然后在您的 web.xml 中,您可以指定所有以 /csvreports 开头的 URL 应该路由到您的 index.jsp

<servlet>
<servlet-name>index</servlet-name>
<jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/csvreports/*</url-pattern>
</servlet-mapping>

提取路径的正则表达式

在您的 index.jsp 中,您可以在您的 URL 上使用带有两个捕获组的正则表达式。

var regex = /.*csvreports\/(.*)\?csv=(.*)/g;

第一个 .* 会告诉它匹配 csvreports 之前的任何字符。这样,无论您的主机名是什么,它都会匹配。例如,目前它是 localhost:8080,但如果您将它部署到测试或生产服务器,或者如果其他人从另一台机器访问您的 Web 服务器,它就会有所不同。

接下来,它匹配csvreports,这意味着在主机名之后,URL 必须包含准确的字符串csvreports

接下来,它会查找单个斜杠 /

然后是第一个捕获组 (.*)。括号表示它是一个匹配组。 .* 告诉它匹配任何字符。因此,它将匹配您 URL 中第一个 / 和问号 ? 之间的所有字符。

然后,它将查找 ?csv=

最后,第二个捕获组 (.*) 用于捕获 = 之后的任何字符。


现在您已将正则表达式全部设置为匹配您的 URL,您可以调用正则表达式上的 .exec() 方法,并将您的 URL 传递给它。

var match = regex.exec(url);

最后,您可以从调用 .exec() 返回的 match 变量中提取捕获的组。

var directories = match[1];
var csvfilename = match[2];

您可以通过连接这两个匹配的组来获得您的路径。您可能还需要检查以确保在您的 directories 末尾有一个 /。例如,正则表达式应匹配 localhost:8080/csvreports/folder1?csv=file.csv,但在这种情况下 directories='folder1'csvfilename= file.csv,所以当你连接它们时,你会得到 'folder1file.csv',而你想要的是 'folder1/file.csv'。因此,在连接它们之前,检查 directories 中的最后一个字符是否是 /,如果不是,则在 之间放置一个 /目录csvfilename


例子

这是一个简单的例子来展示这个正则表达式的作用。

function getPathFromUrl() {
var url = document.getElementById('url').value;

var regex = /.*csvreports\/(.*)\?csv=(.*)/g;
var match = regex.exec(url);

var span = document.getElementById('path');


var directories = match[1];
var csvfilename = match[2];

var path = directories;

if (path[path.length-1] !== '/') {
path += '/'
}

path += csvfilename;

span.innerHTML = path;
}
<input id="url" type="text" value="localhost:8080/csvreports/folder1/?csv=test.csv" size="50">
<button id="button" onclick="getPathFromUrl()">Get Path</button>
<br><br>
<label for="path"><strong>Path:</strong></label>
<span id="path"></span>

关于javascript - Tomcat servlet,将所有网址重定向到单个网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33678276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com