- 博客(35)
- 资源 (1)
- 收藏
- 关注
原创 后台数据校验hibernate-validator
hibernate-validator提供了类似长度校验等。用法如下1、pojo类上注解: @Length(max = 11, min = 11, message = "手机号的长度必须是11位.") private String phone; @Email(message = "邮箱不符合规则!") private String email;2、在control
2017-07-31 15:40:40 2610
原创 自定义的token为什么没有写入cookie中?
在使用nginx时,登录系统(sso系统,sso.a.com)和前台系统(www.a.com),当登录系统写入cookie后,跳转到前台系统时,正常情况下是不可能把cookie写入前台系统的。那怎么办?1、在nginx中的sso.a.com的server中追加proxy_set_header Host $host;重启。因为nginx会让tomcat压根不知道请求的真实域名是啥。这样写tomc
2017-07-31 15:33:56 2788
原创 SpringMVC的一个小坑
当请求是.html结尾的,那么是不能返回json的,要改变的方法是,在web.xml中DispatcherServlet追加一个,使它不是以.html结尾的,比如/xxx/*
2017-07-31 15:19:05 212
原创 Cookie、Token、Redis混合使用
在集群中,我们一般不会使用session,我们一般构造一个Cookie放入cookie和redis中。这里的token不是restful中的token,而是通过浏览器访问的token。restful的token不需要cookie,就是用responseEntity返回的。Cookie的生命周期如果创建时不指定(也就是默认值<0),那么是指到浏览器关闭时,cookie就消失了。所以这里就要...
2017-07-31 15:14:12 3705
原创 @Value用法注意事项
spring 不允许/不支持把值注入到静态变量中所以 @Value("${jdbc.url}") public static String JDBC_URL; 是不会成功的,只会得到null。如果非要使用静态,只能用非静态setter 方法注入静态变量:public static String JDBC_URL; @
2017-07-28 16:06:51 3487
原创 继承的一种应用
后台系统提供一个实体类Item,其中某个String类型的变量为image,数据库中是字符串,含逗号分隔。前台系统通过api返回这个实体类。用el表达式返回到前端,但是前端需要一个images参数,即item.images,它是一个数组。那么前台系统应该怎么做?写一个实体类继承ItemNew,添加getImages()方法,因为el表达式调用的是get方法,所以在getImages()方法
2017-07-28 09:05:08 213
原创 log4j与slf4j共存
当我们框架中使用log4j时,即通过org.springframework.web.util.Log4jConfigListener时,如果引入了slf4j-api那么将会使log4j部分失效,那怎么办?可以再添加如下依赖就可以了。org.slf4jslf4j-log4j121.7.25
2017-07-27 13:37:16 1098
原创 使用redis进行缓存
前台系统访问后台管理系统,如果要使用缓存,那么缓存逻辑一定放在后台系统。且要放在业务层。当使用redis缓存时,要注意,在业务代码(service类)中,首先先从redis中去获取,然后return。但是这里要用try-catch。因为我们的业务不能因缓存服务器宕机而抛异常。我们在使用redis作缓存时,如果使用以下方式private JdkSerializationRedisSeri
2017-07-27 11:16:36 16205
原创 spring整合redis集群配置
POM.xml org.springframework.dataspring-data-redis1.7.4.RELEASEredis.clientsjedis2.9.0org.springframeworkspring-test4.2.8.RELEASE----------------------------------------
2017-07-26 19:20:34 2979
原创 centos7下redis伪集群安装
在redis主从复制安装的基础上。我们可以实现集群安装。所谓集群,redis需要3主3从以上。我们在一台虚机上就是用6379至6384这6个端口。配置文件中在《redis主从复制安装》基础上增加的修改是1、cluster-enabled 设为true;2、bind 设为192.168.48.131 127.0.0.1(前者为本虚机IP)目的是为了后面spring和redis集群时能够连
2017-07-26 19:17:16 685
原创 前台系统首页面的广告问题
前台系统广告问题看似复杂,其实它的本质只是通过两张表来玩的。第一张表是内容类目表,主要包括类目id、父类目、类目名。比如首页->广告位->大广告...第二张表是内容表,通过类目id关联到内容类目表,它可以存储多条数据对应一个内容类目表。比如很多条含图片信息内容对应一个大广告。到时前台系统的大广告区域就会调用api查询到这多条数据,然后显示出来,达到轮播的功能。内容类目表和内容表的增删改
2017-07-25 18:53:39 487
原创 前台系统使用resttemplate调用后台系统显示注意事项
这里不使用jsonp形式,而是使用resttemplate去请求。要注意的是在解析返回的String时,将它封装成前台系统前端需要的格式,比如[{"xxx":"xxx"},{}]。那么前台系统后端在使用ObjectMapper解析后,要按照这个格式即List>的格式添加,等添加完毕后,使用ObjectMapper的writeValueAsString(list)来返回json串。最后再co
2017-07-25 18:38:30 639
原创 jsonp问题
jsonp是处理跨域问题的,其原理是html的<script>能够跨域访问js脚本,即后台返回一个字符串比如callback(xxx),并且前台正好定义了callback函数,那么就能被执行,里面的字符串可以解析成对象用。我们利用这个性质让后台返回一个String类型的回调函数让前台接收。这就要求我们在使用@responseBody时返回String,为了防止乱码,我们还得自定义消息转...
2017-07-24 17:29:59 321
原创 eclipse使用tomcat maven插件 Edit Source Lookup Path
使用 mvn tomcat:run 启动web应用,在debug模式下代码执行到断点处,不能显示对应的源码,出现 Source not found的错误警告,手动Edit Source Lookup Path后,源码闪一下就消失了。解决方法:安装dynamic-source-lookup插件,update地址:http://ifedorenko.github.com/m2e-extras/
2017-07-24 17:11:34 1842
原创 spring消息转化器
使用@responseBody时,如果返回类型是String,那么它是不会使用jackson去解析的,而是使用StringHttpMessageConverter。我们配置了,那么定位到AnnotationDrivenBeanDefinitionParser类的getMessageConverters方法,可以看到它默认加载了很多MessageConverter,其中有一个就是String
2017-07-24 15:16:25 393
原创 关于HA的一些概念
多个nginx之间集群不能互相通信,只能依靠多个keepalived。keepalived能相互通信,所以能感知。keepalived上层可以使用一个HAProxy做负载均衡。多个mysql之间也是不能感知,多个mycat之间也不能感知(一个mycat可以处理多台mysql的读写分离。多个mycat的目的理解为随机使用一个mycat来处理)所以在多个mycat上面可以使用多个k
2017-07-21 15:10:45 830
原创 规格参数设计思路
一个商品类目下的规格参数应该一致,只是数据不同。比如手机,规格参数应该一致,但值不一致。如果规格参数不一致,则使用版本号。如何实现?方案一:对每个类目创建一个表,写上字段。这样表就太对了,不推荐方案二:使用模板的思想。创建两张表,一张表是类目与规格参数的表。这个表中,规格参数不是多个字段,而是一个字段param,里面是json字符串比如:[{"group":"主体","params
2017-07-21 13:38:09 367
原创 RESTful 表单提交和ajax提交
如果是表单提交,那么后台参数基本就是对象。如果是ajax的post提交,比如data:{"paramData":JSON.stringify(json对象)},后台用@RequestParam("paramData") String xxx接收,当然也能用String paramData接收。前者一般用在java类中的请求,如restTemplate
2017-07-21 10:03:10 2385
原创 spring父子容器与读取properties文件
读取properties文件中的内容,可以使用@Value比如@Value("${url}")public String url;properties文件内容是 url=xxxxxx但是它只能在它所在容器中使用。比如spring容器中加载了properties文件,但你这个注解使用在springmvc容器(子容器)的Controller中,那么是获取不到的。--------
2017-07-20 11:29:27 1312
原创 springmvc上传图片以及nginx+tomcat动静分离
nginx作为web服务器不能解析jsp等页面,只能处理js、css、html等静态资源。所以可以使用nginx反向代理来找到图片来显示(后面会写),图片在数据库就保存为反向代理所指定的路径。前台使用kindeditor富编辑器来完成图片上传的前台代码以及回显(href一个图片地址,比如image.xxx.com)。后台使用springmvc处理:1、commons-fileu
2017-07-20 09:08:29 2334
原创 一种基于抽象类的思想
如果CRUD是很多Service要做的,那么可以抽象出一个BaseService抽象父类,里面去实现一些CRUD方法(非抽象方法)。但会有一个问题,就是里面的DAO(Mapper)是不一样的,抽象类也不能用注入,那怎么办?解决方法:在抽象父类中提供一个获取DAO(Mapper)的抽象方法(比如getMapper()),让子类各自实现。那么抽象父类的CRUD方法中就可以使用getMapper()
2017-07-19 10:49:37 291
原创 windows安装nginx(不常用)
http://nginx.org/en/download.html去下载windows版本,放到英文目录下。
2017-07-19 10:06:40 279
原创 关于linux服务
如果安装了服务(如rpm安装的),启动时可以使用systemctl start xxx来启动,可以使用ps -ef | grep xxx来查询启动状态如果没有注册服务,比如yum安装的zookeeper等,不能使用systemctl start xxx来启动,但可以使用ps -ef | grep xxx来查询启动状态
2017-07-18 21:21:36 121
原创 安装单个Nginx
1、yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-developenssl openssl-devel 2、将nginx-1.6.4.tar.gz 放到自定义目录,比如/usr/local/src3、进入/usr/local/src ,命令 tar -zxvf ngi
2017-07-18 19:52:52 136
原创 使用eclipse创建父子工程
如果在eclipse中创建了pom工程,然后再创建一个maven工程并指定父工程,那么这个工程其实和父工程是平级的。后者只有在创建maven module工程时指定父工程,才能保证这个工程的目录在父工程中。此时工程pom中也会有一个 子工程名 只有有这个,才算能使用聚合功能。否则只有parent的话,只有继承功能
2017-07-17 14:32:00 1514
原创 使用token和SpringMVC来实现安全的RESTFul接口
首先写一个Controller,专门用于获取token的@Autowiredprivate UserService userService;@RequestMapping(value = "/token", method = RequestMethod.POST)@ResponseBodypublic ResponseEntity<TokenResult> getToken(@Requ...
2017-07-11 11:07:05 9482
原创 mysql单实例和多实例下跨主机备份
单实例: mysqldump -h192.168.48.131 -uroot -proot --opt dbname1 | mysql -h192.168.48.1 -uroot -proot -C dbname2; 从131服务器上将dbname1数据库备份到1上。多实例:mysqldump -h192.168.48.131 -S /var/lib/mysql1/mysql.sock -ur
2017-07-10 20:46:50 2360
原创 使用SpringSecurity和SpringMVC来实现安全的RESTFul接口
可以使用SpringSecurity在请求到@RequestMapping之前进行拦截。题外话:Spring的Interceptor(拦截器)是在@RequestMapping之后进行拦截的。
2017-07-10 17:47:45 2674
原创 使用SpringMVC实现RESTFul接口
当我们要返回状态码时, @ResponseBody下的方法返回类型要使用ResponseEntity,如ResponseEntity,ResponseEntity等,这样状态码会被写到响应头中,而不是响应体中查询:返回ResponseEntity @RequestMapping(value = "{id}", method = RequestMethod.GET) @Res
2017-07-10 15:28:10 1951
原创 何为REST
http://127.0.0.1/xxx/query/1GET http://127.0.0.1/xxx/save POSThttp://127.0.0.1/xxx/update POST http://127.0.0.1/xxx/delete GET/POST 以前我们的uri上都会指定一些描述参数,类似query、save、update、delete来表示增删改查,但其实是没必
2017-07-10 14:16:57 197
原创 前台encodeURIComponent,后台 URLDecoder.decode问题
spring在经过requestmapping后,会调用getParameter或其他方法,当我们用XssHttpServletRequestWrapper进行过滤时,要注意如果前台是经过encodeURIComponent传过来的那么参数会变为类似codeData=%7B%22jobgroup%22%3A...那么就必须使用 URLDecoder.decode进行解码,但是问题也来了。如果参数值
2017-07-07 14:17:31 2605
原创 redis的哨兵模式
在/myredis(存放redis6379.conf、redis6380.conf、redis6381.conf配置文件的地方)创建一个sentinel.conf文件,添加sentinel monitor host6379 127.0.0.1 6381 1sentinel monitor host6380 127.0.0.1 6381 1sentinel monitor host6
2017-07-06 18:52:10 266
原创 centos7下redis主从复制安装
在yum安装完redis后,我的bin目录在/usr/local/bin。从解压的文件中拷贝三份redis.conf到新建的/myredis下,可以重命名为6379.conf,6380.conf,6381.conf。这三个文件主要修改的地方是port(6379,6380,6381)、pidfile名(pidfile "/var/run/redis6379.pid",pidfile "/
2017-07-06 18:15:10 745
原创 centos7下mysql5.6的多实例实践
1、使用rpm安装后,会有三个重要目录1)var/lib/mysql 这是datadir,存数据库,存socket2)etc/my.cnf 这是从usr/share/mysql中的my-default复制过来的3)usr/bin/xxx xxx为一些mysql脚本命令2、将var/lib/mysql 复制成mysql1、mysql2,并chmod -R 777 var/lib/my
2017-07-06 17:21:22 1552
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人