我是 Spring 的新手,如果我在这里没有看到明显的答案,我深表歉意。
我使用 Spring MVC Controller 设置了小型演示项目并将其部署到 App Engine。在我的 Controller 中,我想将静态文件的内容读入字符串。这样做的最佳方式是什么?
我用谷歌搜索了一下,但我可能在搜索错误的东西。我尝试了以下方法,但它不起作用:
@Controller
@RequestMapping("/myController")
public class MyController {
@RequestMapping(value = "/test", method = RequestMethod.GET)
public @ResponseBody String myTest() {
FileReader fileReader = null;
BufferedReader bufferedReader = null;
String content = "";
try {
fileReader = new FileReader("file:/WEB-INF/content/somecontent.txt");
bufferedReader = new BufferedReader(fileReader);
content = bufferedReader.readLine();
bufferedReader.close();
}
catch (Exception ignored) {
// ignore
}
return content;
}
}
任何朝着正确方向的努力都将受到高度赞赏:-)
最佳答案
一般的 Servlet 容器,尤其是 GAE,不会让您像那样在 servlet 容器内使用文件 API。
相反,使用 ServletContext
Autowiring 您的 Controller ,并从中获取资源。此外,您的异常处理不是很好,您不应该忽略这样的异常,它们存在是有原因的。
类似的东西应该没问题:
@Controller
@RequestMapping("/myController")
public class MyController {
private @Autowired ServletContext servletContext;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public @ResponseBody String myTest() throws IOException {
InputStream inputStream = null;
try {
inputStream = servletContext.getResourceAsStream("/WEB-INF/content/somecontent.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
return bufferedReader.readLine();
} finally {
if (inputStream != null) {
inputStream.close();
}
}
}
}
或者,如果您使用的是 Spring 3.x,这可能会更简单:
<mvc:view-controller path="/test" view-name="/WEB-INF/content/somecontent.txt"/>
See docs for what this does ,但这可能意味着您可以避免任何代码。
关于java - 在 Spring Controller 中加载静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5146570/