【发布时间】:2026-01-06 05:35:01
【问题描述】:
我有一个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
}
}
但是,虽然在 main 方法中迭代 HashMap 工作正常,但在尝试通过 doPost() 方法获取键值时,我只得到 DONE 作为输出,没有其他值。为什么??
编辑:“不起作用”表示不输出类别。如果main方法输出“Dog”、“Cat”,jsp页面只输出“Done”,而不是“Dog”、“Cat”、“Done”。
我的问题有什么问题足以关闭它?也感谢匿名投票者。
编辑:我检查了tomcat的日志,每次调用servlet时都会出现java.io.FileNotFoundException: some_folder/some_file.bin错误。
我意识到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)
【问题讨论】:
-
你的问题有问题的是它不完整。没有
Cracker类。 -
标题不符合您的代码正在执行的操作。正常的方法是让 servlet 设置请求属性并让 JSP 从请求中获取它们。
-
@Nathan Hughes 这就是我最初所做的。但是在试图找到问题的根源时,我尝试了 servlet 直接输出
HashMap,但没有成功,这意味着问题出在 servlet 本身的某个地方。 -
为了让它工作,(尝试)把它放在
WEB-INF/classes/some_folder/some_file.bin...然后参考new FileInputStream("some_folder/some_file.bin");...如果不能加载...ClassLoader.getResourceAsStream("/some_folder/some_file.bin");可以。 -
best 将是
request.getServletContext().getResourceAsStream(path),其中路径以“/”开头,并且相对于您的 servlet 上下文根(您的 .war ..the 文件夹的根“已部署" above "WEB-INF") ..answer!?;) ...那么你可以把它放在above WEB-INF,我仍然不会 推荐。
标签: java jsp servlets jakarta-ee