Javascript Tomcat servlet,将所有URL重定向到单个网页

Javascript Tomcat servlet,将所有URL重定向到单个网页,javascript,tomcat,servlets,web-deployment,Javascript,Tomcat,Servlets,Web Deployment,我在tomcat中部署了一个servlet“csvreports”index.html'从data/文件夹中拾取csv文件,并显示为html表格 url格式为 localhost:8080/csvreports/?csv=test.csv 我正在解析index.html中的url,以获取csv文件名,并从代码中的/data/test.csv读取 现在,url更改为likelocalhost:8080/csvreports/folder1/?csv=test.csv, localhost:808

我在tomcat中部署了一个servlet“
csvreports
index.html'从
data/
文件夹中拾取csv文件,并显示为html表格

url格式为

localhost:8080/csvreports/?csv=test.csv
我正在解析
index.html
中的url,以获取csv文件名,并从代码中的
/data/test.csv
读取

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

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

我需要对所有URL执行相同的
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>
第一个
*
将告诉它匹配CSV报告之前的任何字符。这样,无论您的主机名是什么,它都将匹配。例如,当前它是localhost:8080,但如果您将其部署到测试或生产服务器,或者如果其他人从另一台机器访问您的web服务器,则情况将有所不同

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

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

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

然后,它将查找
?csv=

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


现在您已经将regex all设置为与URL匹配,您可以调用regex上的
.exec()
方法,并将URL传递给它

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

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


例子 下面是一个简单的例子来说明这个正则表达式的作用

函数getPathFromUrl(){ var url=document.getElementById('url')。值; var regex=/.*csvreports\/(.*)\?csv=(.*)/g; var match=regex.exec(url); var span=document.getElementById('path'); var目录=匹配[1]; var csvfilename=match[2]; var路径=目录; if(路径[path.length-1]!=='/')){ 路径+='/' } path+=csvfilename; span.innerHTML=路径; }

获取路径


路径:
将所有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>
第一个
*
将告诉它匹配CSV报告之前的任何字符。这样,无论您的主机名是什么,它都将匹配。例如,当前它是localhost:8080,但如果您将其部署到测试或生产服务器,或者如果其他人从另一台机器访问您的web服务器,则情况将有所不同

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

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

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

然后,它将查找
?csv=

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


现在您已经将regex all设置为与URL匹配,您可以调用regex上的
.exec()
方法,并将URL传递给它

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

您可以通过连接这两个匹配的组来获得路径。您可能还需要检查以确保在
目录的末尾有
/
。例如,正则表达式应该匹配
localhost:8080/csvreports/folder1?csv=file.csv
,但在本例中是
directories='folder1'
csvfilename=file.csv
,因此当您连接它们时,您将得到
”文件夹