createTree(1, orgNodeTree, sameOrgNodes, 0);
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class NodeTree {
private String pName;
private String name;
private int level;
private List<NodeTree> children;
}
private boolean createTree(int level, List<NodeTree> parentNodes, List<NodeVo> childNodes, int beginIndex) {
//構建樹
List<NodeTree> nextLevelNodes = new ArrayList<>();
for (int i = beginIndex; i < childNodes.size(); i++) {
int parentCount = 1;
for (NodeTree pNode : parentNodes) {
List<NodeTree> children = pNode.getChildren();
if (CollectionUtils.isEmpty(children)) {
children = new ArrayList();
pNode.setChildren(children);
}
if (children.size() >= 3) {
if(parentCount >= parentNodes.size()){
return createTree(++level, nextLevelNodes, childNodes, beginIndex);
}
} else {
if (beginIndex >= childNodes.size()) {
return true;
}
NodeTree child = new NodeTree();
child.setLevel(level);
child.setPName(pNode.getName());
NodeVo node = childNodes.get(beginIndex);
child.setName(node.getNodeName());
pNode.getChildren().add(child);
nextLevelNodes.add(child);
beginIndex++;
}
parentCount++;
}
}
return true;
}
元注解的作用就是負責注解其他注解。Java5.0定義了4個標準的meta-annotation類型,它們被用來提供對其它 annotation類型作說明。Java5.0定義的元注解:
1.@Target,
2.@Retention,
3.@Documented,
4.@Inherited
@Target(TYPE)
@Retention(RUNTIME)
public @interface Table {
/**
* (Optional) The name of the table.
* <p/>
* Defaults to the entity name.
*/
String name() default "";
}
@Target({METHOD, FIELD})2、定義實體類:
@Retention(RUNTIME)
public @interface Column {
/**
* (Optional) The name of the column. Defaults to
* the property or field name.
*/
String name() default "";
}
@Table(name = "t_s_user")
public class User {
@Column(name="name")
private String name;
@Column(name="pwd")
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
public static void print() {
System.out.println("table's name:" + User.class.getAnnotation(Table.class).name());
Field[] fields = User.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
System.out.println("field's type:" + field.getType().getName());
System.out.println("field's columnName:" + field.getAnnotation(Column.class).name());
}
}
@SpringBootApplication2、修改pom文件:
@ComponentScan
@Import({DBConfiguration.class, ResourceConfiguration.class,AppConfiguration.class})
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-legacy</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
gooole瀏覽器內核已經(jīng)有webkit內核移步到Bilnk開發(fā)屬于Chromium Projects 的版本,下面為完整教程。
目錄
Jxl官網(wǎng):http://www.andykhan.com/jexcelapi/index.html
一、Jxl的API
Jxl的API主要有三個包,jxl,jxl.format,jxl.write。如果單獨的分析API,可能對于更明確的了解此API沒有太多的幫助,我們還是從Excel文件的層次來剝離此API吧。
一個excel文件由一個工作簿組成,一個工作簿又由n個工作表組成,每個工作表又由多個單元格組成。對應于Jxl中的結構為
讀文件(包jxl) | 寫文件(包jxl.write) | 說明 |
Workbook | WritableWorkbook | 工作簿 |
Sheet | WritableSheet | 工作表 |
Cell/Image/Hyperlink | WritableCell/WritableImage//WritableHyperlink | 單元格/圖像/超鏈接 |
單元格(此處指文本單元格,圖像及鏈接和單元格做為一個層次)分為好多種,所以在API的設計中將Cell作為一個接口而存在。 對應的jxl中的結構為:
讀文件(包jxl) | 寫文件(包jxl.write) | 說明 |
Cell | WritableCell | 單元格 |
BooleanCell | Boolean | 布爾值單元格 |
DateCell | DateTime | 時間單元格 |
ErrorCell |
| 形式錯誤的單元格 |
LabelCell | Label | 文本單元格 |
NumberCell | Number | 數(shù)字單元格 |
FormualCedll | Formual | 公式單元格 |
| Blank | 空格單元格 |
BooleanFormualCell |
| 布爾公式單元格 |
DateFormualCell |
| 時間公式單元格 |
ErrorFormualCell |
| 錯誤公式單元格 |
StringFormualCell |
| 文本公式單元格 |
NumberFormualCell |
| 數(shù)字公式單元格 |
而有的時候,我們可能將幾個單元格作為一個整體來處理,在API中對應的則是:
jxl.Range
雖然數(shù)據(jù)是電子表格的核心,但是同時其也需要一些輔助類,比如文件格式設置,工作表設置與顯示效果,單元格設置與顯示效果等。按照其層次,則依次有以下接口或類。
讀文件(包jxl) | 寫文件(包jxl.write) | 說明 |
WorkbookSettings | WorkbookSettings(包jxl) | 設置workbook屬性的bean |
SheetSettings | SheetSettings(包jxl) | 設置具體sheet的屬性的bean(比如表頭表底等) |
HeaderFooter | HeaderFooter(包jxl) | 表示表頭表底類 |
HeaderFooter.Contents | HeaderFooter.Contents(包jxl) | 具體表頭表底設置 |
CellFeatures | WritableCellFeautres | 表格內容相關設置(驗證) |
CellReferenceHelper |
| 得到引用單元格相關屬性 |
CellType |
| 表格相關類型 |
CellView | CellView(包jxl) | 表格視圖相關設置 |
CellFormat | WritableCellFormat | 表格顯示樣式設置 |
| BoldStyle | 邊框枚舉 |
| DateFormat | 時間格式 |
| DateFormats | 時間格式枚舉 |
| NumbreFormat | 數(shù)據(jù)格式 |
| NumbreFormats | 數(shù)字模式枚舉 |
| WritableFont | 字體設置 |
| WriteableFont.Fontname | 靜態(tài)字體內部類 |
最后,關于Jxl.format包,此包主要是一些與具體樣式有關的接口和枚舉,不進行具體描述。
文章摘自:http://blog.csdn.net/surgent/article/details/5836580
JSON轉換的四種各種情況:
1. //把java 對象列表轉換為json對象數(shù)組,并轉為字符串
2.//把java對象轉換成json對象,并轉化為字符串
String str=object.toString());
3.//把JSON字符串轉換為JAVA 對象數(shù)組
4.//把JSON字符串轉換為JAVA 對象
JSONObject jsonobject = JSONObject.fromObject(str);
str = "{\"lendperson\":\"李四\",\"lendcompany\":\"有限公司\",\"checkperson\":\"李四\",
創(chuàng)建可執(zhí)行的 JAR 文件包,制作一個可執(zhí)行的 JAR 文件包來發(fā)布你的程序是 JAR 文件包最典型的用法。
Java 程序是由若干個 .class 文件組成的。這些 .class 文件必須根據(jù)它們所屬的包不同而分級分目錄存放;運行前需要把所有用到的包的根目錄指定給 CLASSPATH 環(huán)境變量或者 java 命令的 -cp 參數(shù);運行時還要到控制臺下去使用 java 命令來運行,如果需要直接雙擊運行必須寫 Windows 的批處理文件 (.bat) 或者 Linux 的 Shell 程序。因此,許多人說,Java 是一種方便開發(fā)者苦了用戶的程序設計語言。其實不然,如果開發(fā)者能夠制作一個可執(zhí)行的 JAR 文件包交給用戶,那么用戶使用起來就方便了。在 Windows 下
安裝 JRE (Java Runtime Environment) 的時候,安裝文件會將 .jar 文件映射給 javaw.exe 打開。那么,對于一個可執(zhí)行的 JAR 文件包,用戶只需要雙擊它就可以運行程序了,和閱讀 .chm 文檔一樣方便 (.chm 文檔默認是由hh.exe 打開的)。那么,現(xiàn)在的關鍵,就是如何來創(chuàng)建這個可執(zhí)行的 JAR 文件包。
創(chuàng)建可執(zhí)行的 JAR 文件包,需要使用帶 cvfm 參數(shù)的 jar 命令,同樣以上述 test 目錄為例,命令如下:
jar cvfm test.jar manifest.mf test
這里 test.jar 和 manifest.mf 兩個文件,分別是對應的參數(shù) f 和 m,其重頭戲在 manifest.mf。因為要創(chuàng)建可
執(zhí)行的 JAR 文件包,光靠指定一個 manifest.mf 文件是不夠的,因為 MANIFEST 是 JAR 文件包的特征,可執(zhí)行的
JAR 文件包和不可執(zhí)行的 JAR 文件包都包含 MANIFEST。關鍵在于可執(zhí)行 JAR 文件包的 MANIFEST,其內容包含了
Main-Class 一項。這在 MANIFEST 中書寫格式如下:
Main-Class: 可執(zhí)行主類全名(包含包名)
例如,假設上例中的 Test.class 是屬于 test 包的,而且是可執(zhí)行的類
(定義了 public static void main(String[]) 方法),那么這個 manifest.mf 可以編輯如下:
Main-Class: test.Test <回車>
這個 manifest.mf 可以放在任何位置,也可以是其它的文件名,只需要有 Main-Class: test.Test 一行,且該
行以一個回車符結束即可。創(chuàng)建了 manifest.mf 文件之后,我們的目錄結構變?yōu)椋?/span>
==
|-- test
| `-- Test.class
`-- manifest.mf
這時候,需要到 test 目錄的上級目錄中去使用 jar 命令來創(chuàng)建 JAR 文件包。也就是在目錄樹中使用“==”表
示的那個目錄中,使用如下命令:
jar cvfm test.jar manifest.mf test
之后在“==”目錄中創(chuàng)建了 test.jar,這個 test.jar 就是執(zhí)行的 JAR 文件包。運行時只需要使用
java -jar test.jar 命令即可。
需要注意的是,創(chuàng)建的 JAR 文件包中需要包含完整的、與 Java 程序的包結構對應的目錄結構,就像上例一樣。
而 Main-Class 指定的類,也必須是完整的、包含包路徑的類名,如上例的 test.Test;而且在沒有打成 JAR 文件包
之前可以使用 java <類名> 來運行這個類,即在上例中 java test.Test 是可以正確運行的 (當然要在 CLASSPATH
正確的情況下)。
添加三個系統(tǒng)變量:
1、JAVA_HOME: C:\JDK
2、TOMCAT_HOME(或CATALINA_HOME): C:\Tomcat
3、CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib
4、path(編輯path時多個用";"隔開):C:\Program Files\Java\jdk1.6.0_16\bin(JDK的bin中)
機器上有CLASSPATH用分號隔開,然后加在后面。
Tomcat的環(huán)境變量就配置完畢了,下面檢驗Tomcat是否能夠運行:
在控制臺中轉到C:\Tomcat\bin這個目錄,運行startup,然后回出現(xiàn)一個窗口,連跳一大串東西,最后表示Server已經(jīng)運行
在瀏覽器中輸入http://localhost:8080,出現(xiàn)歡迎界面,則表示Tomcat沒問題了
然后和上面一樣,寫入你的第一個Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>");
out.println("This is my first Servlet");
out.println("</title></head><body>");
out.println("<h1>Hello,World!</h1>");
out.println("</body></html>");
}
}
然后照樣用javac HelloWorld.java來編譯這個文件,如果出現(xiàn)無法import javax.servlet.*
那么就是應該把C:\Tomcat\common\lib里面的servlet-api.jar(根據(jù)實際來看)文件拷貝到C:\JDK\jre\lib\ext中,再次編譯
然后在Tomcat目錄里面的C:\Tomcat\webapps\myweb(目錄名可任意)里面按如下的文件結構:
myweb\WEB-INF\web.xml
myweb\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在這個里面)
Servlet必須使用C:\Tomcat\webapps\myweb\WEB-INF這個目錄下面的web.xml文件進行注冊,用記事本打開這個web.xml文件,在里面加入
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
這樣的結構
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
表示指定包含的servlet類.
而以下的結構
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
表示指定HelloServlet應當映射到哪一種URL模式。
在修改web.xml完畢過后,重新啟動Server,然后再輸入http://localhost:8080/myweb/HelloWorld
public static Map<String,WorkerVO> WORKER_VO_MAP = new HashMap<String,WorkerVO>();public static Map<String,QuesterVO> QUESTER_VO_MAP = new HashMap<String,QuesterVO>();public static Map<String, List<QuesterVO>> WORKER_QUESTER_MAP = new HashMap<String, List<QuesterVO>>();public static Map<String, WorkerOnlineVO> WORKER_USER = new HashMap<String, WorkerOnlineVO>();