我有一个TranslateServlet
,它需要一些文本,创建一个Cracker
类的实例,并调用一个getCrackedResult
方法,该方法返回键和值的HashMap
:< / p>
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
作为输出,没有其他值。为什么?
编辑:“不起作用”表示不输出类别。如果主方法输出“ 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)
答案 0 :(得分:1)
请在正确的位置部署(!)FileInputStream
,然后您可以从如下的servlet环境访问其java.io.InputStream inS = /*httpRequest.get*/servletContext
.getResourceAsStream("/WEB-INF/some_file/some.bin");
:
<mat-table #table [dataSource]="dataSource
(scroll)="onTableScroll($event)">
<!--table data -->
</mat-table>
<button (click)="scrollToTop()>Test</button>
//typescript
@ViewChild('table') table: ElementRef;
scrollToTop() {
this.table.nativeElement.scrollIntoView(true);
}
答案 1 :(得分:0)
现在,我设法用
对其进行了修复InputStream inputPOS = Cracker.class.getClassLoader().getResourceAsStream("some_folder/some_file.bin");
解决方案 ,并将some_folder/some_file.bin
两者放入
Project Root/target/classes
(这样代码就可以在IDE中运行)和
Project Root/WEB-INF/classes
(这样,当将代码部署在tomcat上时,该代码将起作用)。