0%

前言

不知大家在平时的需求中有没有遇到需要实时处理信息的情况,如站内信,订阅,聊天之类的。在这之前我们通常想到的方法一般都是采用轮训的方式每隔一定的时间向服务器发送请求从而获得最新的数据,但这样会浪费掉很多的资源并且也不是实时的,于是随着HTML5的推出带来了websocket可以根本的解决以上问题实现真正的实时传输。

websocket是什么?

至于websocket是什么、有什么用这样的问题一Google一大把,这里我就简要的说些websocket再本次实例中的作用吧。
由于在本次实例中需要实现的是一个聊天室,一个实时的聊天室。如下图:

1.gif

Read more »

前言

webservice这个不知道大家首次接触的时候是怎么理解的,反正我记得我当时第一次接触这个东西的时候以为又是一个XX框架,觉得还挺高大上。然而这一切在之后我使用过后才发现这些全都是YY。
那么webservice到底是什么呢,根据我自己的理解:简单来说就像是一个公开的接口,其他系统不管你是用什么语言来编写的都可以调用这个接口,并可以返回相应的数据给你。就像是现在很多的天气应用,他们肯定不会自己去搞一个气象局之类的部门去监测天气,大多都是直接调用一个天气接口,然后返回天气数据,相关应用就可以将这些信息展示给用户了。
通常来说发布这类接口的应用都是用一两种语言来编写即可,但是调用这个接口应用可能会是各种语言来编写的,为了满足这样的需求webservice出现了。

简单来说webservice就是为了满足以上需求而定义出来的规范。


Spring整合CXF

在Java中实现webservice有多种方法,java本身在jdk1.7之后也对webservice有了默认的实现,但是在我们实际开发中一般还是会使用框架来,比如这里所提到的CXF就有着广泛的应用。
废话我就不多说了,直接讲Spring整合CXF,毕竟现在的JavaEE开发是离不开Spring了。
该项目还是基于之前的SSM进行开发的。

加入maven依赖

第一步肯定是要加入maven依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--cxf-->
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.6</version>
</dependency>
Read more »

0.jpg

前言

相比有做过企业级开发的童鞋应该都有做过权限安全之类的功能吧,最先开始我采用的是建用户表,角色表,权限表,之后在拦截器中对每一个请求进行拦截,再到数据库中进行查询看当前用户是否有该权限,这样的设计能满足大多数中小型系统的需求。不过这篇所介绍的Shiro能满足之前的所有需求,并且使用简单,安全性高,而且现在越来越的多企业都在使用Shiro,这应该是一个收入的你的技能库。


创建自定义MyRealm

有关Shiro的基础知识我这里就不过多介绍了,直接来干货,到最后会整合Spring来进行权限验证。
首先在使用Shiro的时候我们要考虑在什么样的环境下使用:

  • 登录的验证
  • 对指定角色的验证
  • 对URL的验证
Read more »

pexels-photo-257875.jpeg

前言

大家平时肯定都有用过全文检索工具,最常用的百度谷歌就是其中的典型。如果自己能够做一个那是不是想想就逼格满满呢。Apache就为我们提供了这样一个框架,以下就是在实际开发中加入Lucene的一个小Demo。


获取Maven依赖

首先看一下实际运行的效果图:

Read more »

ssmo1.jpeg

前言

最近这几年JetBrains公司开发的IDEA是越来越流行了,甚至Google的官方IDE都是IDEA来定制的,可见IDEA的发展趋势是越来越好,由于博主接触IDEA的时间也不长,所以有关IDEAEclipse的区别和优劣势请自行百度了。
借此机会我就使用IDEA来整合一下SSM,针对于初学者(初次使用IDEA和JAVAEE初学者)还是有帮助的。


新建SSM项目

哦对了,关于IDEA的版本问题强烈建议使用旗舰版,有条件的就购买,没条件的嘛。。天朝你懂的。
在欢迎界面点击Create New Project

Read more »

前言

由于博主的喜新厌旧,再经过一段时间对上一个主题的审美疲劳加上我专(zhuang)研(bi)的精神
于是就想找一个B格较高的主题。经过一段时间的查找发现NexT这个主题简洁而不失华丽,低调而不失逼格(就不收广告费了)特别适合我,接着就着手开干。


安装NexT主题

从Git上克隆主题

这里我就不介绍有关Hexo的东西了,默认是知道如何搭建Hexo博客的。还不太清楚的请自行百度。
首先将NexT主题先克隆到自己电脑上:

  • cd your-hexo-site
  • git clone https://github.com/iissnan/hexo-theme-next themes/next

安装主题

接下来我们只需要将站点下的_config.yml配置文件中的主题配置更换成Next,如下图:

其实这样主题就配好了,是不是很简单

Read more »

前言

相信很多朋友在实际工作中都会要将数据导出成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 »