Javascript Tomcat servlet,将所有URL重定向到单个网页
我在tomcat中部署了一个servlet“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
csvreports
”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: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
,因此当您连接它们时,您将得到”文件夹