【问题标题】:How can servlet create a file that user can visit directlyservlet如何创建用户可以直接访问的文件
【发布时间】:2017-06-20 02:12:53
【问题描述】:

我正在使用eclipse和tomcat进行开发。 用户似乎只能访问WebContent 文件夹中的文件。
而现在我需要在servlet中动态创建一个文件,但是如何才能得到WebContent文件夹的真实路径呢?
我试过getServletContext().getRealPath(""),但它返回的是eclipse工作区的路径,而不是我的项目的路径,类似于D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\
而我想要这样的D:\git\Monitor\WebContent
有人知道解决方法吗?~非常感谢

【问题讨论】:

    标签: eclipse servlets realpath


    【解决方案1】:

    你不能那样做。 Web 应用程序(WAR 文件)可以在未解压的情况下部署,即作为压缩存档文件。

    一般的解决方法是编写一个 servlet,即让最终用户下载生成的文件。这样,您几乎可以将文件放置在服务器 FS 上的任何位置...

    【讨论】:

    • 但是Webcontent文件夹中的html文件可以通过http://localhost:8080/Monitor/html/index.html之类的url来访问。
    • 所以我认为关键问题是获取WebContent的realPath,以便servlet可以向其写入文件。
    • Eclipse 的WebContent 成为您的WAR 档案的根。你不能写到那里...设置一个配置属性,它包含一个安全且可写的路径来存储你的文件。这取决于您的服务器环境....
    【解决方案2】:

    我在老师的帮助下找到了一个解决方案,不过以另一种方式。 由于我无法获取WebContent 的真实路径,我可以修改server.xml 以使本地路径对前端可读。此配置文件位于Servers 文件夹中。 server.xml的底部是这样的。

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
      <Context docBase="Monitor" path="/Monitor" reloadable="true" source="org.eclipse.jst.jee.server:Monitor"/>
    </Host>
    

    并且我添加了一个Context节点,然后是这样的

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
      <Context docBase="Monitor" path="/Monitor" reloadable="true" source="org.eclipse.jst.jee.server:Monitor"/>
      <Context docBase="D:\environment\apache-tomcat-9.0.0.M21-dev\user\logs" path="/Monitor/logs" reloadable="true" debug="" crossContext="true"></Context>
    </Host>
    

    这样,我可以在servlet中将文件写入D:\environment\apache-tomcat-9.0.0.M21-dev\user\logs,并在前端使用urllocalhost:8080/Monitor/logs/fileName获取文件~

    【讨论】:

      猜你喜欢
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多