gradle构建javaweb应用:servlet依赖与tomcat插件(转)

沧海一滴 沧海一滴     2022-07-30     616

关键词:

 

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

参考原文:How to Build Web Scanning Application with Gradle

Servlet文件上传

使用Servlet文件上传,可以参考Oracle的官方文档The fileupload Example Application。这里需要注意的一个问题就是要接收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"})
@MultipartConfig
public class DWTUpload extends HttpServlet {
    private final static Logger LOGGER =
            Logger.getLogger(DWTUpload.class.getCanonicalName());
    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * 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("<br/> 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;
}
 
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> 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 <code>POST</code> 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";
    }// </editor-fold>
 
}

Gradle构建Java Web工程

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

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

另外一个问题就是使用jetty插件了,同样会失败。因为jetty不支持Servlet 3.0。官方论坛里有回复: Unable to use servlet 3.0 api in jetty plugin。替代方法可以使用Gradle Tomcat plugin 。在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 build
gradle tomcatRunWar

技术分享

源码

https://github.com/Dynamsoft/Dynamic-Web-TWAIN/tree/master/samples/gradle

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

 

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

 

idea创建一个springmvc框架javaweb项目,gradle构建

注:此篇有些细节没写出,此文主要写重要的环节和需要注意的地方,轻喷新建项目        选择Gradle,勾选java和web。之后就是设定项目路径和名称,这里就不啰嗦了。       b... 查看详情

javaweb应用

1.JavaWeb应用简介JavaWeb应用由一组Servlet/JSP、HTML文件、相关Java类,以及其他可以被绑定的资源构成,它可以在由各种供应商提供的符合Servlet规范的Servlet容器中运行。Servlet:标准Servlet接口的实现类,运行在服务器端,包含了被Ser... 查看详情

javaweb04_servlet应用初步

JavaWeb04_Servlet应用初步获取上下文对象方法一:重写init()方法,通过ServletConfig对象获得:publicServletContextcontext;@Overridepublicvoidinit(ServletConfigconfig)throwsServletException{context=config.getServletContext();}@Overr 查看详情

gradle构建并自动部署javaweb项目到远程服务器(代码片段)

思路介绍:1)停止对应项目的tomcat服务器2)删除webapps其下的对应项目文件3)构建war包并将war包传送到tomcat服务器webapps目录下4)启动tomcat一、环境配置myeclipse2014、tomcat7.0.67(服务器端)、gradle2.14、Buildship... 查看详情

java学习笔记:javaweb应用

1.JavaWeb是什么?  1.1在sun的JavaServlet规范中,对JavaWeb应用作了这样的定义:JavaWeb应用由一组Servlet,HTML页,类以及其他可以被绑定的资源构成,它可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。  1.2JavaWeb应用中... 查看详情

ideacommunity+gradle+gretty调试servlet应用(代码片段)

---恢复内容开始---参考:https://guides.gradle.org/building-java-web-applications打包war只需要Gradle面板中选择build.build任务即可,就不详细说了,下面主要说如何调试 IDEA创建gradle项目,项目结构如下各个文件:build.gradle//https://guides.gradle.org/buil... 查看详情

javaweb应用程序(jsp/servlets)启动脚本

我想在我的Web应用程序的服务器启动时运行一个程序,其中我需要从数据库中读取数据并缓存数据并在整个应用程序中使用它。除了以下方法之外,还有更好的解决方案来实现同样的目标<servlet><servlet-name>CacheData</servl... 查看详情

javaweb开发基础

1JavaWeb应用的概念在SUN的JavaServlet规范中,对JavaWeb应用作出了这样的定义:JavaWeb应用是由一组Servlet、HTML页面、类以及其它可以被绑定的资源构成。它可以运行在各种供应商提供的实现Servlet规范的Servlet容器中。JavaWeb应用中可以... 查看详情

使用eclipse+maven构建javaweb项目

构建Web项目1、Eclipse新建项目,选择MavenProject。 2、选择maven-archetype-webapp项目。 3、输入GroupId和ArtifactId,Finish。 新建后默认的目录结构如下:此时项目有红色叉号提示,这是因为缺少servlet的引用4、添加servletapi引用... 查看详情

如何通过 Gradle 将 ojdbc7 添加到 Java Web 应用程序?

】如何通过Gradle将ojdbc7添加到JavaWeb应用程序?【英文标题】:Howtoaddojdbc7toJavawebappbyGradle?【发布时间】:2016-10-1312:18:40【问题描述】:我的背景:我构建了一个基于SpringBoot的JavaWeb应用程序1.3.5.发布。我尝试将ojdcb添加到依赖项... 查看详情

使用 Gradle 构建 JavaFX 应用程序

】使用Gradle构建JavaFX应用程序【英文标题】:BuildingaJavaFXapplicationusingGradle【发布时间】:2015-10-0206:13:38【问题描述】:我正在尝试使用Gradle构建一个相对简单的JavaFX应用程序。但是,我不知道该怎么做。我对Gradle比较陌生,对... 查看详情

无法使用 Gradle 构建 Android 应用程序

】无法使用Gradle构建Android应用程序【英文标题】:Can\'tbuildAndroidAppwithGradle【发布时间】:2015-06-1702:00:50【问题描述】:我正在尝试使用Gradle命令行界面构建我的Android应用程序。我还将GRADLE_HOME/bin添加到环境中。首先,我使用gra... 查看详情

javaweb数据库应用开发基础

JavaWeb数据库应用JavaWeb数据库应用开发的几种方式一、JSP+JDBC二、JSP+Servlet(+JDBC)三、JSP+Servlet+DAO(+JDBC)四、JSP+Servlet+DAO(+JDBC)+JavaBeanJavaWeb数据库应用开发的几种方式以下总结了课程中学习的四种JavaWeb数据库应用开发方式,... 查看详情

javaweb

Servlet  是运行在Web服务器或应用服务器上的Java程序  在Web上创建动态内容的有效而强大的解决方案  由容器来管理生命周期与Web服务器交互  由Sun规范了其功能Servlet部署:  一个Servlet必须有三个名称:  1:是Servle... 查看详情

javaweb03_servlet

JavaWeb03_ServletServlet规范的组成:1.web应用程序2.Servlet与HttpServlet3.过滤器(servlet2.3版本后引入过滤器,所有http请求都可以经过过滤器)4.安全5.国际化两个接口:ServletConfig接口:定义如何操作Servlet配置Servlet接口:定义操作Servlet... 查看详情

javaweb应用包括些啥?

Tomcat服务器最重要的作用就是充当JavaWeb应用的容器。JavaServlet规范中对JavaWeb应用的定义如下:JavaWeb应用由一组Servlet、HTML页面、类以及其他可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的Web应用容器中运行... 查看详情

javaweb开发进化史

文章目录一、Web应用程序(一)访问静态资源(二)访问动态资源二、应用服务器三、青铜Servlet(一)Servlet接口(二)Servlet生命周期(三)使用Servlet实现问候1、创建Maven项目-ServletDemo2、创建HelloServlet类3、注册HelloServlet类4、... 查看详情

javaweb-tomcat简介

为了能让web服务器与web应用进行协作,首先应该由一个中介方制定web应用于web服务器进行协作的标准接口,Servlet就是其中最主要的一个接口。中介方规定:web服务器可以访问任意一个web应用中实现servlet接口的类web应用中用于web... 查看详情