java - 在 Restful Web 服务中打开 Tomcat 服务器上的 html 文件

标签 java html web-services tomcat

我有一个在 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/

相关文章:

java - 使用 Tomcat 进行基于表单的身份验证

javascript - 使用 javascript 和 Web 服务下载文件

json - 在 MATLAB 中从 REST Web 服务读取内容

java - Orika:从字符串映射到 SomeObjects 列表

java - Web 服务 - 验证输入

javascript - 用 JavaScript 替换类元素

html - 如何使 td 内的 div 拉伸(stretch)?

ios - 在 web 服务代码中解包 Optional 值时意外发现 nil

java - 在java中以字符串形式获取列表数据

javascript - 用于了解 HTML5 视频何时准备好在没有黑色背景的情况下播放的事件