0%

前言

相信很多朋友在实际工作中都会要将数据导出成Excel的需求,通常这样的做法有两种。
一是采用JXL来生成Excel,之后保存到服务器,然后在生成页面之后下载该文件。
二是使用POI来生成Excel,之后使用Stream的方式输出到前台直接下载(ps:当然也可以生成到服务器中再下载。)。这里我们讨论第二种。
*至于两种方式的优缺点请自行百度*。


Struts2的方式

通常我会将已经生成好的HSSFWorkbook放到一个InputStream中,然后再到xml配置文件中将返回结果更改为stream的方式。如下:

1
2
3
4
5
6
7
8
private void responseData(HSSFWorkbook wb) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
wb.write(baos);
baos.flush();
byte[] aa = baos.toByteArray();
excelStream = new ByteArrayInputStream(aa, 0, aa.length);
baos.close();
}
Read more »

前言

由于前段时间为了让部署在Linux中的项目访问另一台服务器的MySQL,经过各种折腾就把root用户给弄出问题了,导致死活登不上PS:Linux中的项目还是没有连上。。(这是后话了。)。经过各种查阅资料终于找到解决方法了。

报错如下:
Access denied for user 'root'@'localhost' (using password:YES)


关闭MySQL服务,修改MySQL初始文件

打开MySQL目录下的my-default.ini文件,如图:

在最后一行加入skip-grant-tables之后保存。
然后重启MySQL服务。

Read more »

前言

之前我们使用多线程要么是继承Thread类,要么是实现Runnable接口,然后重写一下run()方法即可。
但是只有的话如果有死锁、对共享资源的访问和随时监控线程状态就不行了,于是在Java5之后就有了Callable接口。


简单的实现有返回值的线程

代码如下:
CallableFuture

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package top.crosssoverjie.study.Thread;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CallableFuture {
public static void main(String[] args) {
//创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(3) ;

//创建三个有返回值的任务
CallableTest2 c1 = new CallableTest2("线程1") ;
CallableTest2 c2 = new CallableTest2("线程2") ;
CallableTest2 c3 = new CallableTest2("线程3") ;

Future f1 = pool.submit(c1) ;
Future f2 = pool.submit(c2) ;
Future f3 = pool.submit(c3) ;

try {
System.out.println(f1.get().toString());
System.out.println(f2.get().toString());
System.out.println(f3.get().toString());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}finally{
pool.shutdown();
}

}
}
Read more »

前言

花了几天时间终于把这个看似高大上的博客搞好了,但是发现只能通过在地址栏输入地址进行访问,这很明显和我装X装到底的性格,于是乎在查阅了嘟爷的博客,和我各种百度终于搞出来了。


让谷歌收录

让谷歌收录还是比较简单,首先我们肯定是要翻墙的(这个就不仔细说了,具体百度。)
由于我这里突然登不上google账号了,所以下次补充截图。同体来说就是以下步骤:

  • 下载google的html验证文件放到网站的根目录,使google能够访问得到。
  • 在谷歌站长工具里加上自己的站点地图。
Read more »

前言

本文主要讲解java多线程的基础,以及一些常用方法。关于线程同步、ExecutorService框架我会放到后续的文章进行讲解。


进程与线程的区别

进程

进程简单的来说就是在内存中运行的应用程序,一个进程可以启动多个线程。
比如在windows中一个运行EXE文件就是一个进程。

线程

同一个线程中的进程共用相同的地址空间,同时共享进程所拥有的内存和其他资源。

Read more »

前言

java反射机制指的是在java运行过程中,对于任意的类都可以知道他的所有属性以及方法,对于任意一个对象都可以任意的调用他的属性和方法,这种动态获取对象信息和动态调用对象方法的功能称为java反射机制,但是反射使用不当会造成很高的成本。

简单实例


反射获取类名称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package top.crosssoverjie.study;
public class Reflect {
public static void main(String[] args) {
Class<Reflect> c1 = Reflect.class;
System.out.println(c1.getName());

Reflect r1 = new Reflect() ;
Class<Reflect> c2 = (Class<Reflect>) r1.getClass() ;
System.out.println(c2.getName());

try {
Class<Reflect> c3 = (Class<Reflect>) Class.forName("top.crosssoverjie.study.Reflect");
System.out.println(c3.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Read more »

前言


昨天到今天一共花了差不多两天的时间终于把博客搭好了。还买了一个域名,现在就迫不及待的想把
这段内容写下来。


感谢


首先非常感谢 嘟爷的帮忙,没有这些资料我可能还得自己研究好一段时间。

Read more »

# 标题

表示标题 一个#号代表一级标题,以此类推。

* 无序列表

  • 无序列表

> 引用

引用

[http://www.baidu.com](http://www.baidu.com "百度")

百度

Read more »

前言

由于现在JAVA开发的很多应用都是部署到Linux系统上的,因此了解和掌握一些Linux的常用命令是非常有必要的,以下就是在Java开发过程中一些常用的命令。


常用命令

  1. 查找文件
    find / -name log.txt
    根据名称查找在 /目录下的 log.txt文件。

find .-name "*.xml"
递归查找所有的xml文件。

find .-name "*.xml"|xargs grep "hello"
递归查找所有包含hello的xml文件。

ls -l grep 'jar'
查找当前目录中的所有jar文件。

Read more »