我的项目目录如下。
Web Application
|__Web Pages
| | |__img
| | |__membershipcard.png
| |__ImageCreator.jsp
|
|__Source Packages
|__Functions
|__CardCreator.java
我有一个Java函数,它读取位于img文件夹中的Image,Java类如下。
public class CardCreator {
public static String MembershipCard() throws IOException {
String ImgUrl = "";
Image image = null;
// Read from an input stream
InputStream is = new BufferedInputStream(new FileInputStream("web/img/membershipcard.png"));
image = ImageIO.read(is);
Graphics g = image.getGraphics();
Graphics i = image.getGraphics();
g.setFont(new Font("TimesRoman", Font.PLAIN, 15));
g.setColor(Color.BLACK);
g.drawString("123456789", 334, 63);
g.drawString("Roger", 196, 138);
g.drawString("5", 299, 163);
g.drawString("05", 63, 221);
g.drawString("2015", 90, 221);
i.setFont(new Font("TimesRoman", Font.BOLD, 15));
i.setColor(Color.BLACK);
i.drawString("9874564", 395, 196);
g.dispose();
ImageIO.write((RenderedImage) image, "png", new File("test2.png"));
ImgUrl = "Hello";
return ImgUrl;
}
}
我从我的ImageCreator.jsp页面调用此函数,它返回Java函数创建的Image的URL。
<%
String ImgUrl = new CardCreator().MembershipCard();
%>
我无法访问位于我提及的文件夹中的图像文件以及如何在我希望保存所有卡片的其他文件夹中输出结果图像。
请帮助我。
答案 0 :(得分:1)
你可以使用ServletContect's realPath
,通过调用jsp将其作为参数传递给MembershipCard
public class CardCreator {
public static String MembershipCard(String path) throws IOException {
String ImgUrl = "";
Image image = null;
// Read from an input stream
InputStream is = new BufferedInputStream(new FileInputStream(path + "/img/membershipcard.png"));
...
return ImgUrl;
}
和JSP
<%
String ImgUrl = CardCreator.MembershipCard(pageContext.getServletContext().getRealPath("/"));
%>
由于您现在有Application Context
的位置,因此使用它来保存您希望JSP可以访问的文件。
更好的方法是在整个应用程序中使用单独的类来维护这些公共变量,而不是将其作为参数传递给方法。