我有一个在 tomcat 服务器上运行的小型 Web 服务,我想在我的 tomcat 服务器上打开我的 html 文件。
我的网络服务是:
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("myresource")
public class MyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() throws Exception {
String url = "E:/this.html";
File htmlFile = new File(url);
Desktop.getDesktop().browse(htmlFile.toURI());
return "Got it!";
}
}
最佳答案
这些答案基于问题评论部分中的潜在问题。
问:我应该在浏览器中输入哪个 URL 才能看到消息“知道了!”?
答:http://localhost:8080/myresource
但是,这可能不适合您。设置 Web 容器(如 tomcat)的方法有很多种,您必须验证正在运行的端口以及 servlet 上下文是什么。上面的答案假设您在本地机器上运行,在端口 8080(这往往是 java web 服务器的默认端口)和 ROOT 上下文下。
更完整的答案是:
http://<host_name>:<port>:<context>/myresource
问:如何让最终用户说出他们想要下载哪个文件?
答:这是一个巨大的安全风险。允许最终用户输入服务器上文件的路径并不明智。无意冒犯...
最终用户只需输入 {/etc/passwd} 并根据使用哪个系统用户启动您的 Web 容器,Web 容器将为该文件提供服务。情况不太好。
问:好的,很好,那么如何允许用户从我的 Web 容器下载文件?
答:有几种方法可以做到这一点,我不会详细介绍,但是,您可以让容器直接为文件提供服务。意思是将文件放在 /webapp
中目录本身。然后您的 Web 容器将自动为它们提供服务。
您可以在 MyResource 类构造函数中设置一个目录,并且只提供来自该特定目录的请求文件。您需要对最终用户输入进行一些认真的验证,以验证他们没有要求这样的文件:../../../../etc/passwd
问:好的,知道了,所以我将进行验证,现在,我如何实际将文件提供给最终用户?我保证我会小心...
好吧,这很简单,只需看一下这里的这个问题: what's the correct way to send a file from REST web service to client?
关于java - 在 Restful Web 服务中打开 Tomcat 服务器上的 html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37123585/