getServletContext().getRealPath()在控制器(NPE)中不起作用,但在jsp中工作

Jur*_*vić 5 java spring-mvc relative-path itext realpath

我正在尝试将图像添加到我的pdf文件中.图像位于"WebContent/img/image.png"中.首先,我保存相对路径到字符串,然后我将此相对路径转换为实际路径.

String relativeWebPath = "/img/image.png";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
Image image1 = Image.getInstance(absoluteDiskPath);
Run Code Online (Sandbox Code Playgroud)

即使这样

String absoluteDiskPath = getServletContext().getRealPath("/");
Run Code Online (Sandbox Code Playgroud)

不起作用.

我在定义相对路径时尝试了一些变化,但无法使它们中的任何一个起作用.当此行String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);尝试执行时,我总是得到nullPointerException .我是否在相对路径或其他方面做错了什么?我不知道这是否相关,但我使用的是Spring.

@RequestMapping(value = "/exportPhonebook.html", method = RequestMethod.POST)
public void exportPhonebook(Model model, HttpServletResponse response) {
    try {
        setResponseHeaderPDF(response);
        Document document = new Document();
        ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
        PdfWriter pdfWriter = null;
        pdfWriter = PdfWriter.getInstance(document, baosPDF);
        PageNumbersEventHelper events = new PageNumbersEventHelper();
        pdfWriter.setPageEvent(events);
        document.open();
        addMetaData(document);
        addTitlePage(document);
        String relativeWebPath = "/img/image.png";
        String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
        Image image1 = Image.getInstance(absoluteDiskPath);
        document.add(image1);
        addContent(document);
        document.close();
        pdfWriter.close();
        OutputStream os = response.getOutputStream();
        baosPDF.writeTo(os);
        os.flush();
        os.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在jsp中使用它的方式:

<input type="hidden" value="<%=getServletContext().getRealPath("/") %>" name="path">
Run Code Online (Sandbox Code Playgroud)

我将它传递给控制器​​并添加相对路径到此路径.

path = path + "img\\image.png";
Image image = Image.getInstance(path);
Run Code Online (Sandbox Code Playgroud)

这很好用.我不明白为什么这在我的控制器中不起作用.

Jur*_*vić 9

我错过了这个:

ServletContext servletContext = request.getSession().getServletContext();

现在它适用于控制器.

ServletContext servletContext = request.getSession().getServletContext();
String relativeWebPath = "img/image.png";
String absoluteDiskPath = servletContext.getRealPath(relativeWebPath);
Run Code Online (Sandbox Code Playgroud)