импортировать выгруженные данные Excel в базу данных с помощью Spring MVC - PullRequest
0 голосов
/ 10 июля 2019

Я новичок в Spring MVC и Java и получил задание импортировать выгруженный Excel в базу данных, я прочитал несколько учебных пособий в Интернете, но здесь я не работал, я не знал, что делать делаю, я продолжаю получать страницу 500 Контроллер

@Controller
public class VlnryController extends MainController{

    @Autowired
    ServletContext context;
    static final Logger LOGGER = LoggerFactory.getLogger(VlnryService.class);


    @Autowired
    private VlnryService vlnryService;


    @RequestMapping(value="/welcome", method = RequestMethod.GET)
    //@ResponseStatus(value=HttpStatus.OK)
    public ModelAndView index() {
        return new ModelAndView("upload2");
    }

    @RequestMapping(value = "/upload", method = RequestMethod.GET)
    //@ResponseStatus(value=HttpStatus.OK)
    public ModelAndView singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {

        if (file.isEmpty()) {
            redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
            return new ModelAndView("upload2","message", "Please select a file to upload");
        }

        try {

            // Get the file and save it somewhere
            byte[] bytes = file.getBytes();
            Path path = Paths.get("D:\\" + file.getOriginalFilename());
            Files.write(path, bytes);

            vlnryService.uploadFileData("D:\\"+path.getFileName());

            redirectAttributes.addFlashAttribute("message", "You successfully uploaded '" + file.getOriginalFilename() + "'");

        } catch (IOException e) {
            redirectAttributes.addFlashAttribute("message", "Failure occured during upload '" + file.getOriginalFilename() + "'");
            e.printStackTrace();
        }


        return new ModelAndView("upload2","message", "You successfully uploaded '" + file.getOriginalFilename() + "'");
    }
}

сервис

import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;


import java.io.File;

import java.lang.reflect.InvocationTargetException;


public interface VlnryService {

    public String uploadFileData(String inputFilePath);

    public Workbook getWorkBook(File fileName);

    public String getCellValueBasedOnCellType(Row rowData,int columnPosition);

    public <T> void  setValueIntoObject(Object obj, Class<T> clazz, String methodNameForField, String dataType, String inputCellValue) throws SecurityException, NoSuchMethodException, ClassNotFoundException, NumberFormatException, IllegalArgumentException, IllegalAccessException, InvocationTargetException;

}

сервисный инструмент


import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;


@Service
public class VlnryServiceImpl implements VlnryService{
    static final Logger LOGGER = LoggerFactory.getLogger(VlnryService.class);

    @Autowired
    VlnryRepository vlnryRepository;

    public String uploadFileData(String inputFilePath){
        Workbook workbook = null;
            Sheet sheet = null;
            try 
            {

                workbook = getWorkBook(new File(inputFilePath));
                sheet = workbook.getSheetAt(0);

                /*Build the header portion of the Output File*/
                String headerDetails= "AssetIP Address,Site Name,Asset Names,Asset OS Family,Asset OS Name,Vulnerability Title,Vulnerability CVSS Score,Exploit Count,Exploit Minimum Skill,Malware Kit Count,Vulnerable Since,Vulnerability Age,Vulnerability Test Date,Vulnerability Published Date,Asset Location,Custom Tag,Vulnerability Test Result Code,Vulnerability Tags,Asset MAC Addresses,Asset OS Version,Service Port Service Protocol,Vulnerability CVE IDs,Vulnerability Description,Vulnerability ID,Vulnerability Proof,Vulnerability Solution";
                String headerNames[] = headerDetails.split(",");

                 /*Read and process each Row*/
                 ArrayList<Vulnerability> problemList = new ArrayList<>();
                 Iterator<Row> rowIterator = sheet.iterator();

                 while(rowIterator.hasNext()) 
                 {
                        Row row = rowIterator.next();
                        //Read and process each column in row
                        Vulnerability vulnerability = new Vulnerability();
                        int count=0;
                        while(count<headerNames.length){
                            String methodName = "set"+headerNames[count];
                            String inputCellValue = getCellValueBasedOnCellType(row,count++);
                            setValueIntoObject(vulnerability, Vulnerability.class, methodName, "java.lang.String", inputCellValue);
                        }

                        problemList.add(vulnerability);
                 }
                 vlnryRepository.saveFileDataInDB(problemList);

            }
            catch(Exception ex){
                ex.printStackTrace();
            }


        return "Success";
    }

    public Workbook getWorkBook(File fileName)
    {
        Workbook workbook = null;
        try {   
            String myFileName=fileName.getName();
            String extension = myFileName.substring(myFileName.lastIndexOf("."));
            if(extension.equalsIgnoreCase(".xls")){
                workbook = new HSSFWorkbook(new FileInputStream(fileName));
            }
            else if(extension.equalsIgnoreCase(".xlsx")){
                workbook = new XSSFWorkbook(new FileInputStream(fileName));
            }
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return workbook;
    }

    public String getCellValueBasedOnCellType(Row rowData,int columnPosition)
    {
        String cellValue=null;
        Cell cell = rowData.getCell(columnPosition);
        if(cell!=null){
            if(cell.getCellType()==Cell.CELL_TYPE_STRING)
            {
                String inputCellValue=cell.getStringCellValue();
                if(inputCellValue.endsWith(".0")){
                    inputCellValue=inputCellValue.substring(0, inputCellValue.length()-2);
                }
                cellValue=inputCellValue;
            }
            else if (cell.getCellType()==Cell.CELL_TYPE_NUMERIC)
            {
                Double doubleVal = new Double(cell.getNumericCellValue());
                cellValue= Integer.toString(doubleVal.intValue());
            }
        }
        return cellValue;
    }

    public <T> void  setValueIntoObject(Object obj, Class<T> clazz, String methodNameForField, String dataType, String inputCellValue) 
        throws SecurityException, NoSuchMethodException, ClassNotFoundException, NumberFormatException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{


        Method meth = clazz.getMethod(methodNameForField, Class.forName(dataType));
        T t = clazz.cast(obj);

         if("java.lang.Double".equalsIgnoreCase(dataType))
        {
            meth.invoke(t, Double.parseDouble(inputCellValue));
        }else if(!"java.lang.Integer".equalsIgnoreCase(dataType))
        {
            meth.invoke(t, inputCellValue);
        }
        else
        {
            meth.invoke(t, Integer.parseInt(inputCellValue));
        }               
    }
}

Entity

public class Vulnerability{


        private String asstIpAddr;
        private String siteName;
        private String asstNames;
        private String asstOsFam;
        private String asstOsName;
        private String vlnryTitle;
        private String vlnryCvssScr;
        private String explCount;
        private String explMinSkill;
        private String malwareKitCount;
        private String vlnrySince;
        private String vlnryAge;
        private String vlnryTestDate;
        private String vlnryPublDate;
        private String asstLocation;
        private String customTag;
        private String vlnryTestRsltcode;
        private String vlnryTags;
        private String asstMacAddr;
        private String asstOsVers;
        private String srvPort;
        private String vlnryCveIds;
        private String vlnryDesc;
        private String vlnryId;
        private String vlnryProof;
        private String vlnrySol;
        private String servPortServProt;

Репозиторий


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;


@Repository
public class VlnryRepository extends BaseDAO{

    //static final Logger LOGGER = LoggerFactory.getLogger(VlnryRepository.class);

    @SuppressWarnings("unchecked")
    public boolean saveFileDataInDB(List<Vulnerability> problemList){
        String sql = "insert into TMP_VLNRY_DATA_UPL (Asset_IP_Address,Site_Name,Asset_Names,Asset_OS_Family,Asset_OS_Name,Vulnerability_Title,Vulnerability_CVSS_Score,Exploit_Count,Exploit_Minimum_Skill,Malware_Kit_Count,Vulnerable_Since,Vulnerability_Age,Vulnerability_Test_Date,Vulnerability_Published_Date,Asset_Location,Custom_Tag,Vulnerability_Test_Result_Code,Vulnerability_Tags,Asset_MAC_Addresses,Asset_OS_Version,Service_Port_Service_Protocol,Vulnerability_CVE_IDs,Vulnerability_Description,Vulnerability_ID,Vulnerability_Proof,Vulnerability_Solution) "
                + " VALUES (:asstIpAddr, :siteName, :asstNames, :asstOsFam, :asstOsName, :vlnryTitle, :vlnryCvssScr, :explCount, :explMinSkill, :malwareKitCount, :vlnrySince, :vlnryAge, :vlnryTestDate, :vlnryPublDate, :asstLocation, :customTag, :vlnryTestRsltcode, :vlnryTags, :asstMacAddr, :asstOsVers, :servPortServProt, :vlnryCveIds, :vlnryDesc, :vlnryId, :vlnryProof, :vlnrySol)";
        try {
            List<Map<String, String>> batchUpdateParams = new ArrayList<>();

                for(Vulnerability vo : problemList){
                    Map<String, String> paramMap = new HashMap<>();
                    paramMap.put("asstIpAddr", vo.getAsstIpAddr());
                    paramMap.put("siteName", vo.getSiteName());
                    paramMap.put("asstNames", vo.getAsstNames());
                    paramMap.put("asstOsFam", vo.getAsstOsFam());
                    paramMap.put("asstOsName", vo.getAsstOsFam());
                    paramMap.put("vlnryTitle", vo.getVlnryTitle());
                    paramMap.put("vlnryCvssScr", vo.getVlnryCvssScr());
                    paramMap.put("explCount", vo.getExplCount());
                    paramMap.put("explMinSkill", vo.getExplMinSkill());
                    paramMap.put("malwareKitCount", vo.getMalwareKitCount());
                    paramMap.put("vlnrySince", vo.getVlnrySince());
                    paramMap.put("vlnryAge", vo.getVlnryAge());
                    paramMap.put("vlnryTestDate", vo.getVlnryTestDate());
                    paramMap.put("vlnryPublDate", vo.getVlnryPublDate());
                    paramMap.put("asstLocation", vo.getAsstLocation());
                    paramMap.put("customTag", vo.geCustomTag());
                    paramMap.put("vlnryTestRsltcode", vo.getVlnryTestRsltcode());
                    paramMap.put("vlnryTags", vo.getVlnryTags());
                    paramMap.put("asstMacAddr", vo.getAsstMacAddr());
                    paramMap.put("asstOsVers", vo.getAsstOsVers());
                    paramMap.put("servPortServProt", vo.getServPortServProt());
                    paramMap.put("vlnryCveIds", vo.getVlnryCveIds());
                    paramMap.put("vlnryDesc", vo.getVlnryDesc());
                    paramMap.put("vlnryId", vo.getVlnryId());
                    paramMap.put("vlnryProof", vo.getVlnryProof());
                    paramMap.put("vlnrySol", vo.getVlnrySol());

                    batchUpdateParams.add(paramMap);
                }

                getNamedParamJdbcTemplate().batchUpdate(sql, batchUpdateParams.toArray(new Map[batchUpdateParams.size()] ));

        } catch (Exception e) {
            e.printStackTrace(); 
            return false;
        }

        return true;

    }

}

baseDao


import javax.sql.DataSource;

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
/**
 * Abstract class BaseDAO
 */
public abstract class BaseDAO {
    private DataSource dataSource = null;
    private NamedParameterJdbcTemplate namedParamJdbcTemplate = null;

    public DataSource getDataSource() {
        return dataSource;
    }

    public void setDataSource(final DataSource dataSource) {
        this.dataSource = dataSource;
        if(namedParamJdbcTemplate == null) {
            namedParamJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
        }
    }

    public NamedParameterJdbcTemplate getNamedParamJdbcTemplate() {
        return namedParamJdbcTemplate;
    }


}

upload2.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorator="layout/layout">
<head>
    <title>Upload File</title>  
    <script>
    function validateForm() {
        var x = document.forms["myForm"]["fileToUpload"].value;
        var y = document.forms["myForm"]["month"].value;
        var z = document.forms["myForm"]["year"].value;
        if (x == "") {
            alert("File must be filled out");
            return false;
        } else if(y==""){
            alert("Month must be filled out");
            return false;
        } else if(z==""){
            alert("Year must be filled out");
            return false;
        }
    }
    </script>

</head>
<body>
<div layout:fragment="content">
    <div class="row">
        <div class="portlet">
            <div class="portlet-title">
                <div class="portlet">
                    <div class="form-group">
                        <form class="form-horizontal" method="GET" action="${pageContext.request.contextPath}/upload" enctype = "multipart/form-data" name="myForm">
                            <div class="input-group">
                                <div class="col-md-6"></div>
                                <div class="col-md-6">
                                    <table class="table table-md">
                                        <tr>
                                            <td align="left">File Upload</td>
                                            <td align="left">:</td>
                                            <td align="left">
                                                <input type="file" name="fileToUpload" accept=".xls,.xlsx" ></input>                                        
                                            </td>
                                        </tr>                                   
                                        <tr>
                                            <td align="left">Month Upload</td>
                                            <td align="left">:</td>
                                            <td align="left">
                                                <select name="month">
                                                    <!--<option value=null>MONTH</option>-->
                                                    <option></option>
                                                    <option value="1">1</option>
                                                    <option value="2">2</option>
                                                    <option value="3">3</option>
                                                    <option value="4">4</option>
                                                    <option value="5">5</option>
                                                    <option value="6">6</option>
                                                    <option value="7">7</option>
                                                    <option value="8">8</option>
                                                    <option value="9">9</option>
                                                    <option value="10">10</option>
                                                    <option value="11">11</option>
                                                    <option value="12">12</option>                          
                                                </select>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td align="left">Year Upload</td>
                                            <td align="left">:</td>
                                            <td align="left" colspan="3">
                                                <select name="year">
                                                    <!--<option value=null>YEAR</option>-->
                                                    <option></option>
                                                    <option value="2014">2014</option>
                                                    <option value="2015">2015</option>
                                                    <option value="2016">2016</option>
                                                    <option value="2017">2017</option>
                                                    <option value="2018">2018</option>
                                                    <option value="2019">2019</option>
                                                    <option value="2020">2020</option>
                                                    <option value="2021">2021</option>
                                                    <option value="2022">2022</option>
                                                    <option value="2023">2023</option>
                                                    <option value="2024">2024</option>
                                                    <option value="2025">2025</option>
                                                    <option value="2026">2026</option>
                                                    <option value="2027">2027</option>
                                                    <option value="2028">2028</option>
                                                    <option value="2029">2029</option>
                                                </select>
                                            </td>
                                            <td></td>
                                        </tr>       
                                        <tr>
                                            <td colspan="3" align="center">
                                                <div class="form-actions">
                                                    <div class="row">                               
                                                        <button action="a">Download Template</button>
                                                        <input type="submit" value="Upload file" onclick="validateForm()">Upload Data</input>
                                                        <button type="submit" onclick="validateForm()">Prc Data Upload</button>
                                                    </div>
                                                </div>                                                                                                                          
                                            </td>
                                        </tr>                                                               
                                    </table>
                                </div>      
                                </div>
                                <div>
                                    <div>
                                        <h3>${message}</h3>
                                    </div>
                                    <!--<c:forEach items="${lstUser}" var="user">
                                    <tr>
                                    <td>${user.asstIpAddr}</td>
                                    <td>${user.siteName}</td>
                                    <td>${user.asstNames}</td> 
                                    </tr>
                                    </c:forEach>-->
                                </div>
                        </form>
                        </div>
                    </div> 
                </div>
            </div>
        </div>          
    </div>
</body>
</html>

извините, вот последние журналы

127.0.0.1 - - [10/Jul/2019:17:34:31 +0700] "GET / HTTP/1.1" 404 994
0:0:0:0:0:0:0:1 - - [10/Jul/2019:17:34:54 +0700] "GET /helpdesk-fe/ HTTP/1.1" 302 -
0:0:0:0:0:0:0:1 - - [10/Jul/2019:17:34:55 +0700] "GET /helpdesk-fe/login HTTP/1.1" 200 8418
0:0:0:0:0:0:0:1 - - [10/Jul/2019:17:35:05 +0700] "POST /helpdesk-fe/login HTTP/1.1" 302 -
0:0:0:0:0:0:0:1 - - [10/Jul/2019:17:35:06 +0700] "GET /helpdesk-fe/ HTTP/1.1" 200 11342
0:0:0:0:0:0:0:1 - - [10/Jul/2019:17:35:08 +0700] "GET /helpdesk-fe/upload HTTP/1.1" 503 4316
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...