Pegar campo file e campo text do form

e ai pessoal beleza?
bom e o seguinte, eu to precisando fazer um formulario que o usuario envia uma imagem, o alt da imagem e um link. pegar a imagem eu pego numa boa, o problema esta sendo pegar os outros campos do formulario. sei que para verificar se o tipo do input e file, se usa o metodo isFormField(), mas mesmo assim nao esta dando certo. ja vi varios topicos aqui no forum mas nenhum ajudou, alguem pode me dar uma luz?

segue o cod:

formulario:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        
        <form name="form" id="form" method="post" action="upload.jsp" enctype="multipart/form-data">           
            Imagem<input type="file" name="imagem" id="imagem"/><br />
            Titulo<input type="text" id="alt" name="alt"/><br />
            Link<input type="text" name="link" id="link"/><br />
            <input type="submit" value="Botao"/>
        </form>
    </body>
</html>

upload.jsp:

<%
            //DAO dao = new DAO();
            //UploadImagens up = new UploadImagens();
            String alt = "";
            String link = "";
            if (ServletFileUpload.isMultipartContent(request)) {
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);

                try {
                    List item = upload.parseRequest(request);
                    Iterator i = item.iterator();
                    while (i.hasNext()) {
                        FileItem fi = (FileItem) i.next();
                        if (!fi.isFormField()) {
                            String nomeArquivo = fi.getName();
                            String root = getServletContext().getRealPath("/");
                            File caminho = new File(root + "/upload");
                            if (!caminho.exists()) {
                                boolean satus = caminho.mkdirs();
                            }
                            File uploadFile = new File(caminho + "/" + nomeArquivo);
                            fi.write(uploadFile);
                            BufferedImage imagem = null;
                            try {
                                imagem = ImageIO.read(new File(caminho + "/" + nomeArquivo));
                            }
                            catch (IOException ex) {
                                ex.getMessage();
                            }
                            int width = 150, height = 50;
                            BufferedImage novaImagem = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
                            Graphics2D g = novaImagem.createGraphics();
                            g.drawImage(imagem, 0, 0, width, height, null);
                            ImageIO.write(novaImagem, "PNG", new File(caminho + "/" + nomeArquivo));
                            //up.setImg(nomeArquivo);
                        }
                        else {
                            System.out.print("TESTE");
                        }

                    }
                }
                catch (FileUploadException e) {
                    e.printStackTrace();
                }
            }

            //up.setLink(request.getParameter("link"));
            //up.setAlt(request.getParameter("alt"));
            //dao.insere(up);

        %>

o erro que me da e esse:

An exception occurred processing JSP page /upload.jsp at line 49 46: boolean satus = caminho.mkdirs(); 47: } 48: File uploadFile = new File(caminho + “/” + nomeArquivo); 49: fi.write(uploadFile); 50: BufferedImage imagem = null; 51: try { 52: imagem = ImageIO.read(new File(caminho + “/” + nomeArquivo)); Stacktrace:

alguma ideia pessoal?