博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle构建Java Web应用:Servlet依赖与Tomcat插件(转)
阅读量:6766 次
发布时间:2019-06-26

本文共 6229 字,大约阅读时间需要 20 分钟。

 

Gradle的官方tutorial介绍了构建Java Web应用的基本方法。不过在使用Servlet做上传的时候会碰到问题。这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应的Java Web工程。

参考原文:

Servlet文件上传

使用Servlet文件上传,可以参考Oracle的官方文档。这里需要注意的一个问题就是要接收multipart/form-data数据,在Servlet中必须申明:

@WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})@MultipartConfig

不然,getPart()会返回空。Servlet接收上传文件可以这样写:

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.dynamsoft.upload; import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.util.logging.Level;import java.util.logging.Logger;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part; @WebServlet(name = "DWTUpload", urlPatterns = {"/DWTUpload"})@MultipartConfigpublic class DWTUpload extends HttpServlet {    private final static Logger LOGGER =            Logger.getLogger(DWTUpload.class.getCanonicalName());    /**     * Processes requests for both HTTP GET and POST     * methods.     *     * @param request servlet request     * @param response servlet response     * @throws ServletException if a servlet-specific error occurs     * @throws IOException if an I/O error occurs     */    protected void processRequest(HttpServletRequest request,        HttpServletResponse response)        throws ServletException, IOException {    response.setContentType("text/html;charset=UTF-8");     // Create path components to save the file    final Part filePart = request.getPart("RemoteFile");    final String fileName = getFileName(filePart);     OutputStream out = null;    InputStream filecontent = null;    final PrintWriter writer = response.getWriter();     String realPath = getServletContext().getRealPath("/");    if (realPath == null)        realPath = "f:\\web_upload"; // modify the default uploading dir accordingly     String uploadPath = realPath + File.separator + "upload";     File uploadDir = new File(uploadPath);    if (!uploadDir.exists())        uploadDir.mkdir();     try {        out = new FileOutputStream(new File(uploadPath + File.separator                + fileName));        filecontent = filePart.getInputStream();         int read = 0;        final byte[] bytes = new byte[1024];         while ((read = filecontent.read(bytes)) != -1) {            out.write(bytes, 0, read);        }        writer.println("New file " + fileName + " created at " + uploadPath);        LOGGER.log(Level.INFO, "File{0}being uploaded to {1}",                new Object[]{fileName, uploadPath});    } catch (FileNotFoundException fne) {        writer.println("You either did not specify a file to upload or are "                + "trying to upload a file to a protected or nonexistent "                + "location.");        writer.println("
 ERROR: " + fne.getMessage());         LOGGER.log(Level.SEVERE, "Problems during file upload. Error: {0}",                new Object[]{fne.getMessage()});    } finally {        if (out != null) {            out.close();        }        if (filecontent != null) {            filecontent.close();        }        if (writer != null) {            writer.close();        }    }} private String getFileName(final Part part) {    final String partHeader = part.getHeader("content-disposition");    LOGGER.log(Level.INFO, "Part Header = {0}", partHeader);    for (String content : part.getHeader("content-disposition").split(";")) {        if (content.trim().startsWith("filename")) {            return content.substring(                    content.indexOf('=') + 1).trim().replace("\"", "");        }    }    return null;}     // 
    /**     * Handles the HTTP 
GET method.     *     * @param request servlet request     * @param response servlet response     * @throws ServletException if a servlet-specific error occurs     * @throws IOException if an I/O error occurs     */    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        processRequest(request, response);    }     /**     * Handles the HTTP 
POST method.     *     * @param request servlet request     * @param response servlet response     * @throws ServletException if a servlet-specific error occurs     * @throws IOException if an I/O error occurs     */    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        processRequest(request, response);    }     /**     * Returns a short description of the servlet.     *     * @return a String containing servlet description     */    @Override    public String getServletInfo() {        return "Short description";    }//  }

Gradle构建Java Web工程

在使用Gradle构建这个Web工程的时候,如果按照官方文档,getPart这个方法是找不到的,用到的依赖可以换成:

dependencies {   providedCompile "javax:javaee-api:6.0"}

另外一个问题就是使用jetty插件了,同样会失败。因为jetty不支持Servlet 3.0。官方论坛里有回复: 。替代方法可以使用 。在build.gradle文件中添加:

buildscript {    repositories {        jcenter()    }     dependencies {        classpath 'com.bmuschko:gradle-tomcat-plugin:2.1'    }} subprojects {   apply plugin : "java"   repositories {      mavenCentral()   }}

然后在子工程的build.gradle文件中添加tomcat插件:

apply plugin: "war"apply plugin: 'com.bmuschko.tomcat' dependencies {   providedCompile "javax:javaee-api:6.0"    def tomcatVersion = '7.0.59'   tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",    "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}",      "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}"} tomcat {    httpPort = 8080    httpsPort = 8091    enableSSL = true}

最后构建运行工程:

gradle buildgradle tomcatRunWar

源码

git clone https://github.com/Dynamsoft/Dynamic-Web-TWAIN.git

 

http://my.oschina.net/yushulx/blog/401888

 

转载于:https://www.cnblogs.com/softidea/p/5631587.html

你可能感兴趣的文章
ubuntu下截图工具推荐 -- [deepin-scrot]
查看>>
8、判断三角形ABC中是否有点D
查看>>
2 Django REST Framework 开发 ---- APIView
查看>>
三:Linux 的基本命令、
查看>>
go中间的&和*
查看>>
VC6打开一个文件或工程的时候,会导致VC6崩溃而关闭
查看>>
理解和使用Linux的硬件抽象层HAL
查看>>
[Ruby on Rails系列]1、开发环境准备:Vmware和Linux的安装
查看>>
类别列表_显示树状结构
查看>>
(待写)五大常用算法:分治、动态规划、贪心、回溯和分支界定
查看>>
C++ - memset的效率和源码分析
查看>>
小程序开发过程中遇到的问题
查看>>
mysql中删除binlog的方法?mysql中如何删除binlog?
查看>>
1006. Sign In and Sign Out (25)
查看>>
Google Flutter的学习与使用
查看>>
工厂模式
查看>>
ci文件缓存使用,可以用来实现多模板切换 改写URL辅助函数
查看>>
原创《开源一个用 vue 写的树层级组件 vue-ztree》
查看>>
笨办法34访问列表元素(列表方法)
查看>>
winform listview控件、容器控件
查看>>