- 浏览: 108501 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
ldwtill:
overwrite呢?
overload,overwrite和override比较 -
dafeiwang:
...
过滤器和拦截器的区别
内含upload.jsp,result.jsp
1)upload.jsp需要指定method="post"和enctype="multipart/form-data"
- <body>
- <form action="result.jsp" method="post" enctype="multipart/form-data">
- Information: <input type="text" name="info"><br>
- File: <input type="file" name="file"><br>
- <input type="submit" name="submit" value=" submit ">
- </form>
- </body>
<body> <form action="result.jsp" method="post" enctype="multipart/form-data"> Information: <input type="text" name="info"><br> File: <input type="file" name="file"><br> <input type="submit" name="submit" value=" submit "> </form> </body>
2)result.jsp(真正开发的时候不会这么去写的,这里为了了解这个过程)
- <body>
- <%
- InputStream is = request.getInputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String buffer = null;
- while((buffer = br.readLine()) != null)
- {
- out.print(buffer + "<br>");
- }
- %>
- </body>
<body> <% InputStream is = request.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String buffer = null; while((buffer = br.readLine()) != null) { out.print(buffer + "<br>"); } %> </body>
当然以前jsp可以用的是smartupload组件
二、纯apache的Commons项目内的FileUpload上传文件
基本它已经做好了90%,我们修改一下就可以!
struts2它可以选择三种方式
1、默认的就是apache的Commons项目内的FileUpload,从官方网站上下载commons-fileupload-bin.zip
commons-io-bin.zip,解压缩。里面包含了jar,文档api,源代码等
本部分来阐述FileUpdate的使用
2、源代码
1)upload2.jsp
- <body>
- <form action="/struts2/UploadServlet" method="post" enctype="multipart/form-data">
- username: <input type="text" name="username"><br>
- password: <input type="password" name="password"><br>
- file1: <input type="file" name="file1"><br>
- file2: <input type="file" name="file2"><br>
- <input type="submit" value="submit">
- </form>
- </body>
<body> <form action="/struts2/UploadServlet" method="post" enctype="multipart/form-data"> username: <input type="text" name="username"><br> password: <input type="password" name="password"><br> file1: <input type="file" name="file1"><br> file2: <input type="file" name="file2"><br> <input type="submit" value="submit"> </form> </body>
2)UploadServlet.java
- import java.io.File;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.util.List;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.fileupload.FileItem;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- import org.omg.CORBA.portable.InputStream;
- public class UploadServlet extends HttpServlet
- {
- @SuppressWarnings("unchecked")
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException
- { //先 生成一个工厂
- DiskFileItemFactory factory = new DiskFileItemFactory();
- String path = request.getRealPath("/upload");
- //若你上传的文件比较小几十k,那么会将文件直接放在内存中
- //当上传文件比较大时,那么会先放到一个临时目录中,setRepository就是来设置这个目录 的。
- factory.setRepository(new File(path));
- //当上传文件超出下面的大小时,那么会先放到一个临时目录中,setSizeThreshold就是来设置这个目录 的。
- factory.setSizeThreshold(1024 * 1024);
- //生成ServletFileUpload实例
- ServletFileUpload upload = new ServletFileUpload(factory);
- try
- {//list封装了客户端传过来所有属性
- List<FileItem> list = upload.parseRequest(request);
- for (FileItem item : list)
- {//item.isFormField()来判断是否简单 的类型,true表示简单的属性。
- if (item.isFormField())
- {
- String name = item.getFieldName();//获得字段名字
- String value = item.getString("gbk");//获得字段值
- System.out.println(name);
- request.setAttribute(name, value);
- }
- else
- {
- String name = item.getFieldName();
- String value = item.getName();
- //获得文件名,先去掉路径。(因为有的浏览器返回的全部路径+文件名;有的是光返回文件名)
- int start = value.lastIndexOf("\\");
- String fileName = value.substring(start + 1);
- request.setAttribute(name, fileName);
- //这一句话相当于以下注释的所有内容,是提供 的一个便捷的操作
- item.write(new File(path,fileName));
- // OutputStream os = new FileOutputStream(new File(path,
- // fileName));
- //
- // InputStream is = item.getInputStream();
- //
- // byte[] buffer = new byte[400];
- //
- // int length = 0;
- //
- // while ((length = is.read(buffer)) > 0)
- // {
- // os.write(buffer, 0, length);
- // }
- //
- // os.close();
- //
- // is.close();
- }
- }
- }
import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.omg.CORBA.portable.InputStream; public class UploadServlet extends HttpServlet { @SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //先 生成一个工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); String path = request.getRealPath("/upload"); //若你上传的文件比较小几十k,那么会将文件直接放在内存中 //当上传文件比较大时,那么会先放到一个临时目录中,setRepository就是来设置这个目录 的。 factory.setRepository(new File(path)); //当上传文件超出下面的大小时,那么会先放到一个临时目录中,setSizeThreshold就是来设置这个目录 的。 factory.setSizeThreshold(1024 * 1024); //生成ServletFileUpload实例 ServletFileUpload upload = new ServletFileUpload(factory); try {//list封装了客户端传过来所有属性 List<FileItem> list = upload.parseRequest(request); for (FileItem item : list) {//item.isFormField()来判断是否简单 的类型,true表示简单的属性。 if (item.isFormField()) { String name = item.getFieldName();//获得字段名字 String value = item.getString("gbk");//获得字段值 System.out.println(name); request.setAttribute(name, value); } else { String name = item.getFieldName(); String value = item.getName(); //获得文件名,先去掉路径。(因为有的浏览器返回的全部路径+文件名;有的是光返回文件名) int start = value.lastIndexOf("\\"); String fileName = value.substring(start + 1); request.setAttribute(name, fileName); //这一句话相当于以下注释的所有内容,是提供 的一个便捷的操作 item.write(new File(path,fileName)); // OutputStream os = new FileOutputStream(new File(path, // fileName)); // // InputStream is = item.getInputStream(); // // byte[] buffer = new byte[400]; // // int length = 0; // // while ((length = is.read(buffer)) > 0) // { // os.write(buffer, 0, length); // } // // os.close(); // // is.close(); } } }
3)web.xml增加以下内容
- <servlet>
- <servlet-name>UploadServlet</servlet-name>
- <servlet-class>com.test.servlet.UploadServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>UploadServlet</servlet-name>
- <url-pattern>/UploadServlet</url-pattern>
- </servlet-mapping>
- 注释掉<!-- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- -->
<servlet> <servlet-name>UploadServlet</servlet-name> <servlet-class>com.test.servlet.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/UploadServlet</url-pattern> </servlet-mapping> 注释掉<!-- <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> -->
4)result2.jsp
- <SPAN style="BACKGROUND-COLOR: #ffffff"><body>
- username: ${requestScope.username }<br>
- password: ${requestScope.password }<br>
- file1: ${requestScope.file1 }<br>
- file2: ${requestScope.file2 }
- </body></SPAN>
<body>
username: ${requestScope.username }<br>
password: ${requestScope.password }<br>
file1: ${requestScope.file1 }<br>
file2: ${requestScope.file2 }
</body>
三、Struts2文件上传(更加简单方便)
1、WebRoot目录下upload.jsp文件
- <s:form action="upload" theme="simple" enctype="multipart/form-data">
- <table align="center" width="50%" border="1">
- <tr>
- <td>
- username
- </td>
- <td>
- <s:textfield name="username"></s:textfield>
- </td>
- </tr>
- <tr>
- <td>
- password
- </td>
- <td>
- <s:password name="password"></s:password>
- </td>
- </tr>
- <tr>
- <td>
- file1
- </td>
- <td >
- <s:file name="file"></s:file>
- </td>
- </tr>
- <tr>
- <td>
- file2
- </td>
- <td >
- <s:file name="file"></s:file>
- </td>
- </tr>
- <tr>
- <td>
- file3
- </td>
- <td >
- <s:file name="file"></s:file>
- </td>
- </tr>
- <tr>
- <td>
- <s:submit value=" submit "></s:submit>
- </td>
- <td>
- <s:reset value=" reset "></s:reset>
- </td>
- </tr>
- </table>
- </s:form>
<s:form action="upload" theme="simple" enctype="multipart/form-data"> <table align="center" width="50%" border="1"> <tr> <td> username </td> <td> <s:textfield name="username"></s:textfield> </td> </tr> <tr> <td> password </td> <td> <s:password name="password"></s:password> </td> </tr> <tr> <td> file1 </td> <td > <s:file name="file"></s:file> </td> </tr> <tr> <td> file2 </td> <td > <s:file name="file"></s:file> </td> </tr> <tr> <td> file3 </td> <td > <s:file name="file"></s:file> </td> </tr> <tr> <td> <s:submit value=" submit "></s:submit> </td> <td> <s:reset value=" reset "></s:reset> </td> </tr> </table> </s:form>
2、struts.xml文件加入以下内容
- <action name="upload" class="com.test.action.UploadAction">
- <result name="success">/uploadResult.jsp</result>
- </action>
<action name="upload" class="com.test.action.UploadAction"> <result name="success">/uploadResult.jsp</result> </action>
3、uploadaction.java
- package com.test.action;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.List;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class UploadAction extends ActionSupport
- {
- private String username;
- private String password;
- private List<File> file;//file文件体
- private List<String> fileFileName;//fileFileName文件名
- private List<String> fileContentType;//fileContentType文件类型,
- //这三个名字命名不能改,上传多个文件时系统会一一对应
- public String getUsername()
- {
- return username;
- }
- public void setUsername(String username)
- {
- this.username = username;
- }
- public String getPassword()
- {
- return password;
- }
- public void setPassword(String password)
- {
- this.password = password;
- }
- public List<File> getFile()
- {
- return file;
- }
- public void setFile(List<File> file)
- {
- this.file = file;
- }
- public List<String> getFileFileName()
- {
- return fileFileName;
- }
- public void setFileFileName(List<String> fileFileName)
- {
- this.fileFileName = fileFileName;
- }
- public List<String> getFileContentType()
- {
- return fileContentType;
- }
- public void setFileContentType(List<String> fileContentType)
- {
- this.fileContentType = fileContentType;
- }
- @Override
- public String execute() throws Exception
- {
- for (int i = 0; i < file.size(); ++i)
- {//这里一定要用字节流,不要用字符流
- InputStream is = new FileInputStream(file.get(i));
- //获得当前应用的根路径,ServletActionContext对应Servlet的Action的上下文
- //也可以写绝对路径d:/doucument/
- String root = ServletActionContext.getRequest().getRealPath(
- "/upload");
- File destFile = new File(root, this.getFileFileName().get(i));
- //文件输出流,接受的参数表示目的文件
- OutputStream os = new FileOutputStream(destFile);
- byte[] buffer = new byte[400];
- int length = 0;
- while ((length = is.read(buffer)) > 0)
- {
- os.write(buffer, 0, length);
- }
- is.close();
- os.close();
- }
- return SUCCESS;
- }
- }
package com.test.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private String username; private String password; private List<File> file;//file文件体 private List<String> fileFileName;//fileFileName文件名 private List<String> fileContentType;//fileContentType文件类型, //这三个名字命名不能改,上传多个文件时系统会一一对应 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List<File> getFile() { return file; } public void setFile(List<File> file) { this.file = file; } public List<String> getFileFileName() { return fileFileName; } public void setFileFileName(List<String> fileFileName) { this.fileFileName = fileFileName; } public List<String> getFileContentType() { return fileContentType; } public void setFileContentType(List<String> fileContentType) { this.fileContentType = fileContentType; } @Override public String execute() throws Exception { for (int i = 0; i < file.size(); ++i) {//这里一定要用字节流,不要用字符流 InputStream is = new FileInputStream(file.get(i)); //获得当前应用的根路径,ServletActionContext对应Servlet的Action的上下文 //也可以写绝对路径d:/doucument/ String root = ServletActionContext.getRequest().getRealPath( "/upload"); File destFile = new File(root, this.getFileFileName().get(i)); //文件输出流,接受的参数表示目的文件 OutputStream os = new FileOutputStream(destFile); byte[] buffer = new byte[400]; int length = 0; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } is.close(); os.close(); } return SUCCESS; } }
4、uploadResult.jsp
- <body>
- username: <s:property value="username"/><br>
- password: <s:property value="password"/><br>
- file: <s:property value="fileFileName"/>
- </body>
<body> username: <s:property value="username"/><br> password: <s:property value="password"/><br> file: <s:property value="fileFileName"/> </body>
5、让系统字符集支持中文
在我们的struts.xml文件可以配置
<constant name="struts.i18n.encoding" value="gbk"></constant>
其实以后很多的strust框架中的default.properties文件中的很多内容都可以在我们的struts.xml通过<constant></constant>来赋值更改。
<constant name="struts.multipart.saveDir" value="c:\"></constant>
default.properties文件中部分字段说明
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
以上三行表示struts上传功能对应的三种方式,其中第三种对应对应apache的fileupload
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
表示上传后文件的保存路径和最大允许上传的文件为2M
三、Struts2文件上传(由客户端指定文件个数)
1、改写客户端文件WebRoot目录下upload.jsp文件
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
- <title>Insert title here</title>
- <script type="text/javascript">
- function addMore()
- {
- var td = document.getElementById("more");
- var br = document.createElement("br");
- var input = document.createElement("input");
- var button = document.createElement("input");
- input.type = "file";
- input.name = "file";
- button.type = "button";
- button.value = "Remove";
- button.onclick = function()
- {
- td.removeChild(br);
- td.removeChild(input);
- td.removeChild(button);
- }
- td.appendChild(br);
- td.appendChild(input);
- td.appendChild(button);
- }
- </script>
- </head>
- <body>
- <table align="center" width="50%">
- <tr>
- <td>
- <s:fielderror cssStyle="color:red" />
- </td>
- </tr>
- </table>
- <s:form action="upload" theme="simple" enctype="multipart/form-data">
- <table align="center" width="50%" border="1">
- <tr>
- <td>
- username
- </td>
- <td>
- <s:textfield name="username"></s:textfield>
- </td>
- </tr>
- <tr>
- <td>
- password
- </td>
- <td>
- <s:password name="password"></s:password>
- </td>
- </tr>
- <tr>
- <td>
- file
- </td>
- <td id="more">
- <s:file name="file"></s:file><input type="button" value="Add More.." onclick="addMore()">
- </td>
- </tr>
- <tr>
- <td>
- <s:submit value=" submit "></s:submit>
- </td>
- <td>
- <s:reset value=" reset "></s:reset>
- </td>
- </tr>
- </table>
- </s:form>
- </body>
<head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Insert title here</title> <script type="text/javascript"> function addMore() { var td = document.getElementById("more"); var br = document.createElement("br"); var input = document.createElement("input"); var button = document.createElement("input"); input.type = "file"; input.name = "file"; button.type = "button"; button.value = "Remove"; button.onclick = function() { td.removeChild(br); td.removeChild(input); td.removeChild(button); } td.appendChild(br); td.appendChild(input); td.appendChild(button); } </script> </head> <body> <table align="center" width="50%"> <tr> <td> <s:fielderror cssStyle="color:red" /> </td> </tr> </table> <s:form action="upload" theme="simple" enctype="multipart/form-data"> <table align="center" width="50%" border="1"> <tr> <td> username </td> <td> <s:textfield name="username"></s:textfield> </td> </tr> <tr> <td> password </td> <td> <s:password name="password"></s:password> </td> </tr> <tr> <td> file </td> <td id="more"> <s:file name="file"></s:file><input type="button" value="Add More.." onclick="addMore()"> </td> </tr> <tr> <td> <s:submit value=" submit "></s:submit> </td> <td> <s:reset value=" reset "></s:reset> </td> </tr> </table> </s:form> </body>
2、服务器端不用修改
四、Struts2文件上传(限制类型)
(限制类型),Struts2文件上传内部已经实现好了。
只需要在struts.xml文件中增加一个拦截器就好了,同时设置好相应的参数
- <action name="upload" class="com.test.action.UploadAction">
- <result name="success">/uploadResult.jsp</result>
- <result name="input">/upload.jsp</result><!--指strut处理错误时,自动地跳到input页面,此处需要配置-->
- <interceptor-ref name="fileUpload">
- <param name="maximumSize">409600</param><!--指每一个文件的大小-->
- <param name="allowedTypes">application/vnd.ms-powerpoint</param>
- </interceptor-ref>
- <interceptor-ref name="defaultStack"></interceptor-ref><!--只要你配置拦截器,默认的必须加上-->
- </action>
<action name="upload" class="com.test.action.UploadAction"> <result name="success">/uploadResult.jsp</result> <result name="input">/upload.jsp</result><!--指strut处理错误时,自动地跳到input页面,此处需要配置--> <interceptor-ref name="fileUpload"> <param name="maximumSize">409600</param><!--指每一个文件的大小--> <param name="allowedTypes">application/vnd.ms-powerpoint</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref><!--只要你配置拦截器,默认的必须加上--> </action>
说明:这里拦截器一般配置在result标签下面,
至于<param name="allowedTypes">application/vnd.ms-powerpoint</param>
里面的类型可以参考tomcat目录下的文件web.xml,该文件中的一个个<mime-type>类型都显示了这些类型的表示。例如
发表评论
-
struts2 工作原理(配合工作原理流程图)
2011-09-12 09:52 1409------------------------------- ... -
Struts通配符
2011-09-09 17:05 972如struts中配有如下几个action,Man ... -
struts2中使用ModelDriven
2011-09-09 16:19 761在Struts 2中,提供了另外一种直接使用领域对象的方式 ... -
OGNL使用小结
2011-09-08 16:24 709最近一直使用struts2,表现层采用JSP,用的st ... -
OGNL 详细资料
2011-05-05 16:46 1034OGNL是XWork引入的一个非常有效的数据处理的工具。我们已 ... -
OGNL学习笔记
2011-05-05 13:00 801Java代码 <%@ page ... -
sruts2.0 web.xml 配置文件
2011-05-04 16:51 1048任何MVC框架都需要与Web ... -
Sturt2-文件下载
2011-05-02 09:53 915Java代码 <body> ... -
搭建一个Struts2项目的开发环境,你知道多少呢?
2011-05-02 09:25 821搭建一个Struts2项目的开发环境时,我们一般需要做以下 ... -
仿百度、google分页的实现
2011-05-02 09:23 1092前段时间写了个仿百度、google分页,现 ... -
struts2详解(二)---->>单个文件上传
2011-05-02 09:20 804实现原理: Struts 2是通过Commons ... -
struts2文件上传的采用的三种方式解析
2011-05-02 09:18 733struts2文件上传的采用的三种方式解析 文件 ... -
基于 Struts 2 拦截器实现细粒度的基于角色的存取控制
2011-05-02 08:55 605本文介绍如何利用 Struts ... -
详解Struts1在web.xml中的基本配置
2011-05-02 08:53 981<servlet> <ser ... -
Struts 工作原理
2011-05-02 08:43 952MVC即Model-View-Controller的 ... -
struts1 struts-config.xml 详细介绍
2011-05-02 08:30 954关于struts1的struts-config.x ... -
struts1 struts2 区别 整理
2011-05-02 08:28 607Action 类:• Struts1要求Act ... -
struts2+fckeditor 注意要点
2011-05-01 18:46 837fckeditor是老外的东西,跟struts2配合时,要多注 ... -
过滤器和拦截器的区别
2011-05-01 18:23 1581Java代码 过滤器和拦截器的区别 ... -
jsp\struts1.2\struts2 中文件上传
2011-05-01 18:21 927刚刚做了三个文件上传的Demo a.在jsp中简单利用Comm ...
相关推荐
Sturt2多/单文件上传带进度条,可上传至服务器文件夹
本项目采用的是sturt2框架开发的、其中有分页功能和基本的几个增删查改功能!分页功能有点bug还未完善…
语言:English 利用我们强大的搜索功能,可以在Charles Sturt中找到任何东西。 在CSU内查找任何内容,并通过精选的博客供稿来了解大学内部和周围的最新动态。
该项目采用的是典型的struts2框架,在此框架之上实现了多文件上传的功能。
sturt classsturt classsturt classsturt classsturt class
spring,sturt2,linux,工作流
Struts2+Hibernate+Spring三大框架整合jar包
使用strut2+spring+jdbctemplate+ajax(jquery,ajaxanywhere)去实现的一个简易用户管理,和留言功能
用于帮助刚开始接触struts2上传的朋友
这是一个完整的例子,完全可以跑通,怎样使用及修改我写将这些说明写在一个文档里面
sturt标签学习select logic 等等
完整的增删改操作,适合刚开始学习sturts的朋友。
java+sturt+Hibernate
struts+hibernet用户登录注册,用户名跟密码从JSP页面传输到服务器上,接收请求的是ActionServlet,ActionServlet接收到请求后,会查找Struts-config.xml文件来确定服务器上是否有用户请求的操作,此处用户请求的操作...
sturts1 spring hibernate开发的详细介绍sturts1 spring hibernate开发的详细介绍sturts1 spring hibernate开发的详细介绍
关于Struts2 工作中相对应的需要的技术点的总结!是新手必备的Sturt2快速上手的很好的一个文档!
此系统虽然简单,但涉及的技术全面,struts,spring,hibernate,所有的方面,还具有分布功能!!!!!!!
非常小巧的ajax工具,附有源...个人以为此工具要比sturt2的ajax插件好用些,且struts2的ajax插件是依赖于struts2框架,可移植性不强。希望此工具能帮助大家简化ajax服务端开发,欢迎大家对此工具提出批评及改进意见。
本篇文章,小编将为大家介绍关于在Struts2中如何将父类属性序列化为JSON格式的解决方法,有需要的朋友可以参考一下
提供的库接口文件 src/library.tests。 * 所有测试,细分如下: library.tests.unit.* - 所有单元测试 library.tests.integration.* - 所有集成测试 library.tests.uat - 用于运行 UAT 测试的类 library.tests....