java - Servlet 无法向jsp输出HashMap键:FileNotFoundException, util class can't find local file after deploy
问题描述
我有一个TranslateServlet
需要一些文本,创建一个Cracker
类的实例并调用一个getCrackedResult
返回HashMap
键和值的方法:
public class TranslateServlet extends HttpServlet {
public static void main(String[] args) {
Cracker cracker = new Cracker("German", "English");
HashMap<String, ArrayList<Cracker.EntrySet<String, ArrayList<String>>>> crackedResults =
cracker.getCrackedResult("Ich bin");
for (String category: crackedResults.keySet()) {
System.out.print(category); //works fine
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
Cracker cracker = new Cracker("German", "English");
HashMap<String, ArrayList<Cracker.EntrySet<String, ArrayList<String>>>> crackedResults =
cracker.getCrackedResult("Ich bin");
for (String category: crackedResults.keySet()) {
response.getWriter().print(category); //doesn't work
}
response.getWriter().print("DONE"); //works fine
}
}
但是,虽然迭代方法HashMap
内部main
工作正常,但尝试通过方法获取键值时doPost()
,我只得到DONE
输出,没有其他值。为什么??
编辑: “不起作用”意味着不输出类别。如果main方法输出“Dog”、“Cat”,jsp页面只输出“Done”,而不是“Dog”、“Cat”、“Done”。
我的问题有什么问题足以关闭它?也感谢匿名投票者。
编辑:我检查了tomcat的日志,java.io.FileNotFoundException: some_folder/some_file.bin
每次调用servlet时都会出错。
我意识到该函数getCrackedResult
使用了这样的本地文件:
InputStream inputPOS = new FileInputStream("some_folder/some_file.bin");
我尝试将文件移动到WEB-INF
并更改文件路径:
InputStream inputPOS = new FileInputStream("WEB-INF/some_folder/some_file.bin");
但我仍然得到例外:java.io.FileNotFoundException: WEB-INF/some_folder/some_file.bin
.
我应该如何处理该文件,以便Cracker
该类,特别是它的getCrackedResults
功能可以在部署后获取它。我的文件结构如下所示:
Project Root
------------src
---------------com
------------------util
----------------------Cracker.java
------------------web
---------------------TranslateServlet.java
------------target
------------------classes
-------------------------com
----------------------------util
--------------------------------Cracker.class
----------------------------web
-------------------------------TranslateServlet.class
------------imgs
------------some_folder
-----------------------some_file.bin
------------WEB-INF
-------------------classes
-------------------lib
-------------------some_folder
------------------------------some_file.bin (tried putting it here)
解决方案
解决方案:
请在正确的位置部署(!)/WEB-INF/some_file/some.bin
,然后您可以FileInputStream
从 servlet 环境访问它,例如:
java.io.InputStream inS = /*httpRequest.get*/servletContext
.getResourceAsStream("/WEB-INF/some_file/some.bin");
推荐阅读
- excel - 从 VBA 打开电子表格比较与要比较的工作表
- logic - 嵌套级别逻辑
- r - 将 list1 的整个单元格匹配到 list2 的所有单元格的开头
- javascript - 我可以在 HTML 表格中插入一行或单元格,然后可以通过单击单元格进行编辑吗?
- windows - SHA256 使用 Windows 加密文件中的行
- reactjs - react-admin:在没有 http 请求的情况下从商店更改列表
- smtp - 转发电子邮件(带附件)而不下载实际附件
- javascript - 需要获取输入的值,是否有 getElementById 反应等效?
- stackdriver - 高级过滤器不能表达ISNULL?
- python - 不能使用摆来解析系列中的日期,但可以一一工作