java - 获取从一个servlet到另一servlet的上传文件属性

标签 java html servlets file-upload

我有带有两个 servlet 的 Java 应用程序。第一个 servlet 将上传文件。第二个是检索上传的文件。

我能够上传文件并将其转发到第二个 servlet。但是当我尝试检索文件时出现空指针异常。如何在第二个 servlet 中检索文件属性。

我尝试从 Serv1 转发到 Serv2 以检索上传的文件

Serv1.java:

private static final String UPLOAD_DIR = "../AISNMEA/WebContent/WEB-INF/resources";

public String file1;
String filePath;
String uploadFilePath;
UploadFile upfile;
String fileName;
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        // set location for saving uploaded file
        UploadBean upb = new UploadBean();

        upb.setFolderstore(UPLOAD_DIR);
        upb.setFilesizelimit(1073741824);
        upb.setOverwrite(true);

        MultipartFormDataRequest nreq = new MultipartFormDataRequest(
                request);
        // completed file uploading
        upb.store(nreq);
        Hashtable<?, ?> ht = nreq.getFiles();// gives the uploaded file
        Enumeration<?> e = ht.elements();
        while (e.hasMoreElements()) {
            upfile = (UploadFile) e.nextElement();
            uploadFilePath = UPLOAD_DIR + File.separator;
            File fileSaveDir = new File(uploadFilePath);
            if (!fileSaveDir.exists()) {
                fileSaveDir.mkdirs();
            }
            file1 = UPLOAD_DIR + File.separator + upfile.getFileName();
            filePath = new File(file1).getAbsolutePath();
            fileName = upfile.getFileName()
                    .substring(0, upfile.getFileName().indexOf("."))
                    .replaceAll("\\s+", "").trim().concat("_")
                    .concat("data");
        }            
        ServletContext sc = getServletContext();
        HttpSession session=request.getSession();
        session.setAttribute("fileName", filePath);
        RequestDispatcher rd = sc.getRequestDispatcher("/vdr.html");
        rd.forward(request, response);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Serv2.java:

public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
    res.setContentType("text/html");

    double base_x = Double.parseDouble(req.getParameter("n1"));
    double base_y = Double.parseDouble(req.getParameter("n2"));
    double m0 = Double.parseDouble(req.getParameter("n3"));
    double a = Double.parseDouble(req.getParameter("n4"));
    double b = Double.parseDouble(req.getParameter("n5"));
    double k1 = Double.parseDouble(req.getParameter("n6"));
    double k2 = Double.parseDouble(req.getParameter("n7"));
    double k3 = Double.parseDouble(req.getParameter("n8"));
    double k4 = Double.parseDouble(req.getParameter("n9"));
    double k5 = Double.parseDouble(req.getParameter("n10"));
    double k6 = Double.parseDouble(req.getParameter("n11"));
    double k7 = Double.parseDouble(req.getParameter("n12"));
    double k8 = Double.parseDouble(req.getParameter("n13"));
    double Lbp = Double.parseDouble(req.getParameter("n14"));

    double ido00 = base_x * PI / 180.0;

    double keido00 = base_y * PI / 180.0;

    double s0 = k1 * ido00 + k2 * Math.sin(2.0 * ido00) + k3
            * Math.sin(4.0 * ido00) + k4 * Math.sin(6.0 * ido00) + k5
            * Math.sin(8.0 * ido00) + k6 * Math.sin(10.0 * ido00) + k7
            * Math.sin(12.0 * ido00) + k8 * Math.sin(14.0 * ido00);
    double f = 1.0 / 299.152813;
    double e2 = (Math.pow(a, 2) - Math.pow(b, 2)) / Math.pow(a, 2);
    HttpSession session=req.getSession();
    filePath = (String) session.getAttribute("fileName");
    System.out.println("File Path" + filePath);
    doGet(req, res);
}

index.html:

<form action="ser1" method="post" enctype="multipart/form-data" onsubmit="return Validate(this);">
<input name="fileName" type="file"/>
</form>

vdr.html:

<form name="myForm" action="ser2" method="post"
    onsubmit="return Validate(this);">
</form>

提前致谢

最佳答案

您正在请求范围内保存文件名,因此它仅在vdr.html中可用,而在Serv2.java中不可用>.

如果将文件名保存在 session 范围内,则该文件名将在整个 session 中可用。

你必须这样做,

来自,

 request.setAttribute("fileName", "file");

致,

 session.setAttribute("fileName", "file");

然后你可以得到文件名,

String filePath = (String) session.getAttribute("fileName");

还有一个附加信息,

Servlet 不是线程安全的。因此请尝试在 doGet() 和 doPost() 中声明变量。这是一个很好的做法。

希望有帮助。

关于java - 获取从一个servlet到另一servlet的上传文件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21932896/

相关文章:

java - JDBC tomcat连接池不工作

java - 每个上下文的 Tomcat 最大连接数

java - 只读组合框

java - 如何在具有java配置且没有Web.xml的Spring MVC中处理404页面未找到异常

java - Set<Class<PupilVO>> 和 Set<PupilVO> 的区别

java - 在 MYSQL 数据库中存储 base64 字符串的最佳方法是什么?

javascript - 使用 SVG 矩形作为整个页面的剪切灯箱?

javascript - 我的网站如何让访问者登录到第三方网站?

html - 在 Flexbox 的相反方向上垂直对齐文本

java - Firefox 无法识别 zip 文件