繁体   English   中英

没有Servlet的情况下,如何从JAVA的HTML表单中获取信息?

[英]How can I get info from a html form in JAVA without servlet?

我正在以HTML格式上传文件:

<form class="formulario" action="validatorKenken.cgi" method="GET">
                    <input type="file" name="xml" accept="*.xml"> <br/>
                    <input type="submit">   
</form>

Java文件被CGI文件调用,该文件由表单调用。 我需要将要上传的文件保存在服务器上。

我已经看到了使用servlet的解决方案,但是由于导入javax.servlet不存在,因此无法编译它。

我正在使用Java 1.7.0_101

谢谢!

该脚本会将CONTENT_TYPE环境变量设置为application / x-www-form-urlencoded或multipart / form-data 后者通常仅用于具有<input type=file>控件的表单。 无论哪种方式,请求正文都将在Java将继承的标准输入以及所有环境变量中。

由于您的表单具有文件字段,因此内容类型将为multipart/form-data 主体将包含多部分的MIME消息。

如果您使用JavaMail实现,则解析多部分MIME消息会容易一个数量级,因为您可以利用其MimeMultipart类及其相关类:

Path saveDir = Paths.get("/home/enery93/Downloads");

// id or name attribute of HTML <input type='file'> element
String fileInputControlName = "file";

Path formDataFile = Files.createTempFile(null, null);
Files.copy(System.in, formDataFile, StandardCopyOption.REPLACE_EXISTING);

MimeMultipart formData = new MimeMultipart(
    new FileDataSource(formDataFile.toFile()));

int count = formData.getCount();
for (int i = 0; i < count; i++) {
    BodyPart part = formData.getBodyPart(i);

    // See HTML 4.01 spec, section 17.13.4 at
    // https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
    ContentDisposition disposition =
        new ContentDisposition(part.getDisposition());
    String name = disposition.getParameter("name");

    if (fileInputControlName.equals(name)) {
        Path saveFile = saveDir.resolve(part.getFileName());
        try (InputStream content = part.getInputStream()) {
            Files.copy(content, saveFile);
        }
        break;
    }
}

Files.delete(formDataFile);

在撰写本文时,可以从http://java.net/projects/javamail/downloads/download/javax.mail.jar获得完整的javax.mail.jar。

如果您不能或不愿意使用JavaMail,则必须自己解析多部分内容,这并不令人愉快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM