阿帕奇官网:http://poi.apache.org/

POI3.17下载:http://poi.apache.org/download.html#POI-3.17

POI操作Excel教程(易百教程):https://www.yiibai.com/apache_poi/

1.数据库连接:https://www.cnblogs.com/feipengting/p/7606042.html

 package com.gdin.util;

 import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class DBUtil { private static Connection con;
private static String url;
private static String user;
private static String pwd; public DBUtil() { }
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");/*如果是MySQL就改为Class.forName("com.mysql.jdbc.Driver");*/
InputStream is = DBUtil.class.getResourceAsStream("/db.properties");//db.properties 是一个用户配置文件传用户名密码
Properties prop=new Properties();
prop.load(is);
url=prop.getProperty("url");
user=prop.getProperty("user");
pwd=prop.getProperty("password");
con = DriverManager.getConnection(url, user, pwd);
}catch (Exception e){
System.out.println("数据库连接失败!");
}
}
public static ResultSet find(String sql){
con=getCon();
try {
Statement smt=con.createStatement();
ResultSet rs=smt.executeQuery(sql);
return rs;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public static ResultSet find(String sql,Object ...pram){//...pram数组
con=getCon();
try {
PreparedStatement smt=con.prepareStatement(sql);
for (int i=0;i<pram.length;i++){
smt.setObject(i+1,pram[i]);
}
ResultSet rs=smt.executeQuery();
return rs;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public static void insert(String sql,Object ...pram){//...pram数组
con=getCon();
try {
PreparedStatement smt=con.prepareStatement(sql);
for (int i=0;i<pram.length;i++){
smt.setObject(i+1,pram[i]);
}
smt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getCon(){
try {
if(con==null||con.isClosed())
con = DriverManager.getConnection(url, user, pwd);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}

重要的类以及接口:Workbook、Sheet、Row、Cell(对应HSSF和XSSF具体的类)

2.读取本地两种格式的Excel文件:

     public static void main(String[] args) throws Exception, IOException {
File file=new File("C:\\Users\\Administrator\\Desktop\\rjl.xlsx");
// File file=new File("C:\\Users\\Administrator\\Desktop\\123.xls"); Workbook workBook=null;
System.out.println(file.getName());
if(file.getName().endsWith("xlsx")){
workBook = new XSSFWorkbook(file);
}else if(file.getName().endsWith("xls")){
workBook=new HSSFWorkbook(new FileInputStream(file));
} Sheet sheet = workBook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
System.out.println(lastRowNum);
for(int i=0;i<=lastRowNum;i++){
Row row = sheet.getRow(i);
short lastCellNum = row.getLastCellNum();
for(int j=0;j<lastCellNum;j++){
if(row.getCell(j).getCellTypeEnum().equals(CellType.NUMERIC)){
System.out.print(row.getCell(j).getNumericCellValue()+"###");
}else if(row.getCell(j).getCellTypeEnum().equals(CellType.STRING)){
System.out.print(row.getCell(j).getStringCellValue()+"###");
}
}
System.out.println();
} }

3.poi操作Excel

  poi执行Excel中的公式:https://blog.csdn.net/l362696422/article/details/41700057

     public static void ExportExcel(){
Workbook wb=new XSSFWorkbook();
try {
FileOutputStream fos = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\信息.xlsx"));
//单元格样式
CellStyle cellStyle = wb.createCellStyle();
//字体
Font font = wb.createFont();
font.setItalic(true);
cellStyle.setBorderBottom(BorderStyle.DASHED);
cellStyle.setFont(font);
//设置旋转角度
cellStyle.setRotation((short) 270);
Sheet sheet = wb.createSheet("info");
Row row = sheet.createRow(0);
//设置该行的行高
row.setHeight((short) 800);
Cell cell = row.createCell(0);
cell.setCellValue("myvalue");
cell.setCellStyle(cellStyle);
//同上
CellStyle cellStyle2 = wb.createCellStyle();
Row row2 = sheet.createRow(1);
row2.setHeight((short) 1000);
Cell cell2 = row2.createCell(1);
cellStyle2.setRotation((short) 180);
cell2.setCellValue(true);
cell2.setCellStyle(cellStyle2);
//row行和cell列都是从0开始的
Cell cell3 = row2.createCell(7);
Cell cell4 = row2.createCell(8);
Cell cell5 = row2.createCell(9);
Cell cell6 = row2.createCell(10);
cell3.setCellValue(11);
cell4.setCellValue(22);
cell5.setCellValue(33);
//设置单元格的类型为:公式类型FORMULA
cell6.setCellType(CellType.FORMULA);
cell6.setCellFormula("SUM(H2:J2)");
//求出工作部所有的已设置使用公式的值
wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
//在确定xls或xlsx对象类型时也可这样使用求公式值
//XSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
//超链接
CellStyle style = wb.createCellStyle();
Font font2 = wb.createFont();
//设置字体格式为单下划线
font2.setUnderline(Font.U_SINGLE);
//font2.setColor(Font.COLOR_RED);
font2.setColor(HSSFColor.HSSFColorPredefined.BLUE.getIndex());
style.setFont(font2);
Cell cell12 = row2.createCell(12);
cell12.setCellValue("跳转网站");
cell12.setCellStyle(style);
CreationHelper creationHelper = wb.getCreationHelper();
Hyperlink hyperlink = creationHelper.createHyperlink(HyperlinkType.URL);
hyperlink.setAddress("http://www.baidu.com");
//单元格设置超链接
cell12.setHyperlink(hyperlink);
//////////设置打印区域/////////
wb.setPrintArea(0, 0, 8, 0, 5);
sheet.getPrintSetup().setPaperSize(PrintSetup.A4_PAPERSIZE);
sheet.setDisplayGridlines(true);
sheet.setPrintGridlines(true); wb.write(fos);
fos.close();
wb.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

4.poi导入Excel文件的兼容性以及数字自动加小数点的问题解决方案

  http://www.cnblogs.com/qiujiababy/p/9371786.html

  https://www.jianshu.com/p/a7eca64237bd

    /**
* 处理导入小数点
*/
public static String numOfImport(Cell cell) {
String value = cell.toString();
int i = cell.getCellType();
if (i == 1) {//字符串类型
return value;
} else {
String[] str = value.split("\\.");
if (str.length > 1) {
String str1 = str[1];
int m = Integer.parseInt(str1);
if (m == 0) {
return str[0];
} else {
return value;
}
}else{
return value;
}
}
}
<form name="form1" action="handle.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="excel">
<input type="submit" value="上传"> </form>
 public static String ImportExcel(InputStream is){
Workbook workBook=null;
/*try {
System.out.println("create1");
workBook = new XSSFWorkbook(is); } catch (Exception e) {
System.out.println("create2");
try{
System.out.println("create22222");
workBook=new HSSFWorkbook(is);
System.out.println("nonono");
}catch(Exception e2){
System.out.println("无法处理!");
} }*/ try {
workBook=WorkbookFactory.create(is);
} catch (EncryptedDocumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvalidFormatException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} Sheet sheet = workBook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
System.out.println(lastRowNum);
for(int i=0;i<=lastRowNum;i++){
Row row = sheet.getRow(i);
short lastCellNum = row.getLastCellNum();
for(int j=0;j<lastCellNum;j++){
if(row.getCell(j).getCellTypeEnum().equals(CellType.NUMERIC)){
//System.out.print(row.getCell(j).getNumericCellValue()+"###");
System.out.print(numOfImport(row.getCell(j))+"###");
}else if(row.getCell(j).getCellTypeEnum().equals(CellType.STRING)){
System.out.print(row.getCell(j).getStringCellValue()+"###");
}
}
System.out.println();
}
System.out.println("nono33333333333");
try {
workBook.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("nono44444444444444");
return "ok";
}

使用apach的fileupload.jar包上传Excel,主要处理流(直接request.getInputStream()的流是没经过处理的,所以采用该jar包处理流问题)

<%
if(request.getMethod().equalsIgnoreCase("post")){ try {
FileItemFactory factory = new DiskFileItemFactory();
// 文件上传核心工具类
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(10 * 1024 * 1024); // 单个文件大小限制
upload.setSizeMax(50 * 1024 * 1024); // 总文件大小限制
upload.setHeaderEncoding("UTF-8"); // 对中文文件编码处理 if (ServletFileUpload.isMultipartContent(request)) {
List<FileItem> list = upload.parseRequest(request);
// 遍历
for (FileItem item : list) {
if (!item.isFormField()) {
TestExcel.ImportExcel(item.getInputStream());
}
}
}
out.print("成功");
} catch (Exception e) {
out.print("失败");
} } %>

5.导出(下载)Excel(jsp需要使用 response.reset() 来清除首部的空白行)

  https://www.cnblogs.com/zml-java/p/6146421.html

  https://blog.csdn.net/xingkong22star/article/details/39207015

<button><a href="exportExcel.jsp">下载</a></button>
<body>
<%
TestExcel.xiazai(response);
%>
</body>
 public static void xiazai(HttpServletResponse response) throws IOException{
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("well down 我的测试结果"); ServletOutputStream outputStream = response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename="+URLEncoder.encode("容杰龙测试", "UTF-8")+".xlsx");
response.setContentType("application/msexcel");
wb.write(outputStream); outputStream.flush();
outputStream.close();
wb.close(); }

6.XSSFWorkbook、HSSFWorkbook导出EXCEL数据和图片

  https://blog.csdn.net/sun_cherish/article/details/79712975

  https://blog.csdn.net/chenssy/article/details/20524563

  https://blog.csdn.net/joyous/article/details/8780112

  https://blog.csdn.net/joyous/article/details/9664739

     public static void ExportPic() throws IOException{
XSSFWorkbook wb = new XSSFWorkbook();
String sheetName = "excel导出图片测试";
XSSFSheet RZ_TXSheet = wb.createSheet(sheetName); ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//图片绝对路径
BufferedImage user_headImg = ImageIO.read(new File("C:\\Users\\Administrator\\Desktop\\boy.jpg"));
ImageIO.write(user_headImg, "jpg", byteArrayOut);
//sheet只能获取一个
XSSFDrawing patriarch = RZ_TXSheet.createDrawingPatriarch();
//设置图片的属性
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 255, 255,(short) 0, 0, (short) 5, 8);
anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_DONT_RESIZE);
//插入图片
patriarch.createPicture(anchor,wb.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG)); FileOutputStream fileOut = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\测试Excel.xlsx");
// 写入excel文件
wb.write(fileOut);
wb.close();
}
     public static void ExportTest() throws FileNotFoundException, IOException{
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet xssfSheet = workbook.createSheet("abc");
XSSFDrawing patriarch = xssfSheet.createDrawingPatriarch();
XSSFClientAnchor anchor=new XSSFClientAnchor(0, 0, 255, 255, 2, 2, 8, 8);
byte[] by=IOUtils.toByteArray(new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\boy.jpg")));
int pictureIndex = workbook.addPicture(by, Workbook.PICTURE_TYPE_JPEG);
patriarch.createPicture(anchor, pictureIndex); FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\Users\\Administrator\\Desktop\\tupian.xlsx"));
workbook.write(fileOutputStream);
fileOutputStream.close();
workbook.close();
}

  多张图片示例:

     public static void ExportPic() throws IOException{
XSSFWorkbook wb = new XSSFWorkbook();
String sheetName = "excel导出图片测试";
XSSFSheet RZ_TXSheet = wb.createSheet(sheetName); ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
//图片绝对路径
BufferedImage user_headImg = ImageIO.read(new File("C:\\Users\\Administrator\\Desktop\\boy.jpg"));
ImageIO.write(user_headImg, "jpg", byteArrayOut);
//sheet只能获取一个
XSSFDrawing patriarch = RZ_TXSheet.createDrawingPatriarch();
//设置图片的属性
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 255, 255,(short) 0, 0, (short) 5, 8);
anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_DONT_RESIZE);
//插入图片
patriarch.createPicture(anchor,wb.addPicture(byteArrayOut.toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG));
//插入第二张图片
int pictureIndex = wb.addPicture(byteArrayOut.toByteArray(), Workbook.PICTURE_TYPE_JPEG);
XSSFClientAnchor anchor2 = patriarch.createAnchor(0, 0, 255, 255, 1, 10, 10, 15);
patriarch.createPicture(anchor2, pictureIndex); FileOutputStream fileOut = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\测试Excel.xlsx");
// 写入excel文件
wb.write(fileOut);
wb.close();
}

7.poi获取excel中的图片

  https://blog.csdn.net/delongcpp/article/details/8833995

  https://www.cnblogs.com/colaclicken/p/8058719.html

    public static void ReadPictureFromExcel() throws Exception{
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\tupian.xlsx");
Workbook workbook = WorkbookFactory.create(fileInputStream);
List<? extends PictureData> pictures = workbook.getAllPictures();
int i=1;
for (PictureData pictureData : pictures) {
byte[] bs = pictureData.getData();
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\"+i+".jpg");
fileOutputStream.write(bs);
fileOutputStream.close();
i++;
}
}

8.poi读取一个excel中的图片到另一个excel中

     public static void main(String[] args) throws Exception, IOException {

         WritePicToExcel(ReadPictureFromExcel2());
} public static Map<String, XSSFPictureData> ReadPictureFromExcel2() throws Exception {
Map<String, XSSFPictureData> map = new HashMap<String, XSSFPictureData>();
FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Administrator\\Desktop\\tupian.xlsx");
XSSFWorkbook workbook = (XSSFWorkbook) new XSSFWorkbook(fileInputStream);
// List<? extends PictureData> pictures = workbook.getAllPictures();
XSSFSheet sheet = workbook.getSheetAt(0);
List<POIXMLDocumentPart> list = sheet.getRelations();
System.out.println(list.size());
for (POIXMLDocumentPart poixmlDocumentPart : list) {
System.out.println(poixmlDocumentPart instanceof XSSFDrawing);
if (poixmlDocumentPart instanceof XSSFDrawing) {
XSSFDrawing drawing = (XSSFDrawing) poixmlDocumentPart;
List<XSSFShape> shapes = drawing.getShapes();
System.out.println("图的数量:"+shapes.size());
for (XSSFShape shape : shapes) {
XSSFPicture picture = (XSSFPicture) shape;
XSSFClientAnchor anchor = picture.getPreferredSize();
//CTMarker marker = anchor.getFrom();
//String key = marker.getRow() + "-" + marker.getCol();
String key =anchor.getDx1()+"-"+anchor.getDy1()+"-"+anchor.getDx2()+"-"+anchor.getDy2()+"-"+anchor.getCol1()+"-"+anchor.getRow1()+"-"+anchor.getCol2()+"-"+anchor.getRow2();
System.out.println(key);
//System.out.println(anchor.getDx1()+"-"+anchor.getDy1()+"-"+anchor.getDx2()+"-"+anchor.getDy2()+"-"+anchor.getCol1()+"-"+anchor.getRow1()+"-"+anchor.getCol2()+"-"+anchor.getRow2());
map.put(key, picture.getPictureData());
}
}
}
workbook.close();
return map;
} public static void WritePicToExcel(Map<String, XSSFPictureData> map) throws Exception{
FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\图片print.xlsx");
XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
XSSFSheet xssfSheet = xssfWorkbook.createSheet("print");
Set<Entry<String, XSSFPictureData>> entrySet = map.entrySet();
//注意!!!
XSSFDrawing patriarch = xssfSheet.createDrawingPatriarch();
for (Entry<String, XSSFPictureData> entry : entrySet) {
String key = entry.getKey();
System.out.println(key);
String[] strings = key.split("-");
//int row = Integer.parseInt(strings[0]);
//int column = Integer.parseInt(strings[1]);
//System.out.println("row:"+row+" column:"+column);
int dx1=Integer.parseInt(strings[0]);
int dy1=Integer.parseInt(strings[1]);
int dx2=Integer.parseInt(strings[2]);
int dy2=Integer.parseInt(strings[3]);
int col1=Integer.parseInt(strings[4]);
int row1=Integer.parseInt(strings[5]);
int col2=Integer.parseInt(strings[6]);
int row2=Integer.parseInt(strings[7]); XSSFPictureData xssfPictureData = entry.getValue();
//XSSFRow xssfRow = xssfSheet.createRow(row); //XSSFClientAnchor anchor=new XSSFClientAnchor();
XSSFClientAnchor anchor = new XSSFClientAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2);
anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_DONT_RESIZE);
//anchor.setRow1(row);
//anchor.setCol1(column);
int pictureIndex=xssfWorkbook.addPicture(xssfPictureData.getData(), Workbook.PICTURE_TYPE_JPEG);
patriarch.createPicture(anchor, pictureIndex);
//FileOutputStream outputStream = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\图片print"+row+".jpg");
//outputStream.write(xssfPictureData.getData());
//outputStream.close();
}
xssfWorkbook.write(fileOutputStream);
fileOutputStream.close();
xssfWorkbook.close();
}

POI操作Excel(xls、xlsx)的更多相关文章

  1. POI操作Excel

    POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...

  2. poi操作excel的基本用法

    这周公司要用excel作为数据存储格式做一个文具申请的功能,感觉以前本来很简单的功能变复杂了不少,但是还是记录一下一些excel的基本用法. 写在最前面:这里只介绍一些excel的基本存储方式(读,写 ...

  3. 自己封装的poi操作Excel工具类

    自己封装的poi操作Excel工具类 在上一篇文章<使用poi读写Excel>中分享了一下poi操作Excel的简单示例,这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完 ...

  4. 自己的包poi操作Excel工具

    在前面的文章<使用poi读写Excel>中分享了一下poi操作Excel的简单演示样例.这次要分享一下我封装的一个Excel操作的工具类. 该工具类主要完毕的功能是:读取Excel.汇总E ...

  5. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  6. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  7. 利用Apache POI操作Excel

    最近在做接口,有个功能是利用Excel导入汽车发动机所需零件信息到线上系统中.简单回顾一下之前学过的用java操作Excel. 1.maven配置Apache POI pom.xml中配置POIjar ...

  8. Java POI操作Excel注意点

    excel的行索引和列索引都是从0开始,而行号和列号都是从1开始 POI·操作excel基本上都是使用索引 XSSFRow对象的 row.getLastCellNum() 方法返回的是当前行最后有效列 ...

  9. 使用POI操作Excel时对事先写入模板的公式强制执行

    场景:POI读取Excel模板. 当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel是被执行, 而事先手工写入Excel模板文件的公式则不自动被调用,必须手动双击该Cell才能生 ...

随机推荐

  1. BZOJ2226:LCMSum(欧拉函数)

    Description Given n, calculate the sum LCM(1,n) + LCM(2,n) + .. + LCM(n,n), where LCM(i,n) denotes t ...

  2. 包、继承、Super、方法重写

    1 包_继承 1.1 包 包(package) 用于管理程序中的类,主要用于解决类的同名问题.包可以看出目录. 包的作用 [1] 防止命名冲突. [2] 允许类组成一个单元(模块),便于管理和维护 [ ...

  3. scrapy模拟登陆的几种方法

    方法一: 方法二: 方法三:

  4. MediaPlayer: Couldn't open /storage/emulated/0/kgmusic/download/独家记忆.mp3: java.io.FileNotFoundExcept

    写了一个音乐播放器,播放的时候,会出现这样的问题:比如说我点击第三首歌曲,结果没有播放第三首歌曲,而直接播放了第四首歌曲.看了一下日志.发现报错:MediaPlayer: Couldn't open ...

  5. 压缩tar: Removing leading `/’ from member names

    这个错误根据网上的很多说法都是谁 缺少-P参数造成的,只需要使用 -zcvfP即可解决问题,经验证并不是 网上很多文章都是互相抄写的,我引起的这个问题的原因是参数使用的方式不对 -f参数是用来制定压缩 ...

  6. (二)基于阿里云的MQTT远程控制(购买阿里云,在云端安装MQTT,测试MQTT远程通信)

    QQ名称为Friday~的网友把他自己买MQTT的过程截图发给了我,今天就说一下如何购买阿里云,安装MQTT可以参考 http://www.cnblogs.com/yangfengwu/p/77646 ...

  7. Eclipse-设置启动JDK版本

    打开eclipse安装目录下的eclipse.ini文件,将红色内容加入 -vm ../Java/jdk1.6.0_26/bin (或者指向具体目录:D:/software/jdk_1.8u91/bi ...

  8. odoo开发历史订单需求整体思路

    第一步:找到客户对应页面,并找到他所下过的销售订单,用数据库语句查出所有数据,并去除重复数据,显示在前端, sql="select DISTINCT t2.product_id as pro ...

  9. c# C#获取屏幕鼠标坐标点颜色

    [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hwnd); [DllImport(&quo ...

  10. 2017-2018-2 20155230《网络对抗技术》实验9:Web安全基础

    实践过程记录 下载wegot并配置好java环境后 输入java -jar webgoat-container-7.0-SNAPSHOT-war-exec.jar 在浏览器输入localhost:80 ...