史上最全最强SpringMVC详细示例实战教程
一、SpringMVC基础入门,创建一个HelloWorld程序
二、配置解析
三、SpringMVC常用注解
四、自动匹配参数
五、自动装箱
六、使用InitBinder来处理Date类型的参数
七、向前台传递参数
八、使用Ajax调用
九、在Controller中使用redirect方式处理请求
十、文件上传
十一、使用@RequestParam注解指定参数的name
十二、RESTFul风格的SringMVC
十三、返回json格式的字符串
十四、异常的处理
十五、设置一个自定义拦截器
十六、表单的验证(使用Hibernate-validate)及国际化
十七、压轴大戏--整合SpringIOC和SpringMVC
十八、SpringMVC详细运行流程图
十九、SpringMVC运行原理
二十、SpringMVC与struts2的区别
PHP json_encode() 函数详解及中文乱码问题
在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。 这个函数的功能是将数值转换成json数据存储格式。 1 2 3 4 5 6 7 8 9 <?php $arr = array ( 'Name’=>’希亚', 'Age’=> ); $jsonencode = json_encode($arr); echo $jsonencode; ?> 程序运行结果如下: {"Name":null,"Age":} json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf- 编码,我认为是前端的 Javascript 也是 utf- 的原因。 1 2 3 4 5 6 7 8 <?php $array = array ( 'title’=>iconv('gb',’utf-',’这里是中文标题'), 'body’=>’abcd…' ); echo json_encode($array); ?> 这个程序的运行结果为: {"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd…"} 数组中所有中文在json_encode之后都不见了或者出现\u2353等。 解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 […]
View Detailsphp返回json数据函数实例
本文实例讲述了php返回json数据函数的用法,分享给大家供大家参考。具体方法如下: json_encode()函数用法: ? 1 echo json_encode(array('a’=>’bbbb',’c’=>’ddddd'); 这样就会生成一个标准的json格式的数据 ? 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 <?php //需要执行的SQL语句 //单条 $sql="select id,name from tbl_user where id=1"; //多条数据 //$sql="select id,name from tbl_user"; //调用conn.php文件进行数据库操作 require('Conn.php'); //提示操作成功信息,注意:$result存在于conn.php文件中,被调用出来 if($result) { // $array=mysql_fetch_array($result,MYSQL_ASSOC); /*数据集 $users=array(); $i=0; while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ echo $row['id'].'———--'.$row['name'].'</br>'; $users[$i]=$row; $i++; } echo json_encode(array('dataList’=>$users)); */ /*单条数据*/ $row=mysql_fetch_row($result,MYSQL_ASSOC); echo json_encode(array('jsonObj’=>$row)); } mysql_free_result($result); //释放结果 mysql_close(); //关闭连接 ?> […]
View Detailsphp保存base64图片
base64图片格式:$base64_url = data:image/jpeg;base64,xxxxxxxxxxxxxxxxxxxxxx 1,去除头部:$base64_body = substr(strstr($base64_url,','),1); 2,解码:$data= base64_decode($base64_body ); 3,存储or创建图片: file_put_contents($file_path,$data); 或$image = imagecreatefromstring($data); from:http://blog.csdn.net/suchfool/article/details/41312149
View Detailsphp生成UUID
UUID含义是 通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。 UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft’s Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字 UUID由以下几部分的组合: (1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。 (2)时钟序列。 (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。 UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。 而 标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。 第一种,PHP代码如下: function create_guid(){ $microTime = microtime(); list($a_dec, $a_sec) = explode(" ", $microTime); $dec_hex = dechex($a_dec* 1000000); $sec_hex = dechex($a_sec); ensure_length($dec_hex, 5); ensure_length($sec_hex, 6); $guid = ""; $guid .= $dec_hex; $guid .= create_guid_section(3); $guid .= '-'; $guid .= create_guid_section(4); […]
View DetailsPHP 时间与字符串的相互转化
1、求两个日期的差数,例如2007-3-5 ~ 2007-3-6 的日期差数 echo abs(strtotime("2007-3-5") – strtotime("2007-3-6"))/60/60/24; echo "天<br>"; 2、JS 获取当前日期 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当前星期X(0-6,0代表星期天) myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) myDate.getHours(); //获取当前小时数(0-23) myDate.getMinutes(); //获取当前分钟数(0-59) myDate.getSeconds(); //获取当前秒数(0-59) myDate.getMilliseconds(); //获取当前毫秒数(0-999) myDate.toLocaleDateString(); //获取当前日期 var mytime=myDate.toLocaleTimeString(); //获取当前时间 myDate.toLocaleString( ); //获取日期与时间 3、PHP 日期与时间戳相互转化 PHP时间大的来分有两种,一是时间戳类型(1228348800),二是正常日期格式(2008-12-4) 所以存到数据库也有两种形式了(真正不止,我的应用就两种),时间戳类型我是保存为字符串的,这个是比较方便的. 正常日期类型是保存为DATE型的. 这两个要注意一下,我平时用两种,所以,前几天建的表,把时间类型存为DATE的,我还一直用时间戳保存,一直资料写不进表,调试了好久的才知错误之处,是类型不符合,不给写入库. 像上面的时间戳是比较方便,但,显示的时候,不至于把这个1228348800串给客户看吧,GOD NOWS! 所以就用到了这两个的转换,先说一下如何取得当前的时间戳,$date1=time();这样就取得当前的时间戳了,要转回2008-12-4这种格式 呢, 用到date()这个函数了,在PHP中date()函数比较常用,如取得当前日期,可以用$date2=date('Y-m-d');,关于里面参数的 意思,如不懂就查一下php的手册了. 好,言归正传,把1228348800转成2008-12-4格式代码如下: $date3=date('Y-m-d H:i:s',"1228348800"); 这样就OK了,如还想得到小时,分钟秒,只要把’Y-m-d’改一下就可以了,不过要注意一下,PHP时间还像有8个小时的误差.加上就OK了. 时间戳转正常日期有了,反之呢,把正常日期格式转为时间戳呢,请看如下代码: $year=((int)substr("2008-12-04",0,4));//取得年份 $month=((int)substr("2008-12-04",5,2));//取得月份 $day=((int)substr("2008-12-04",8,2));//取得几号 echo mktime(0,0,0,$month,$day,$year); 这样就能把正常日期转成时间戳了,这里如果有时分秒也是同理, 注意:php5.1以上时间戳会与实际时间相差8小时,解决办法如下 1、最简单的方法就是不要用php5.1以上的版本--显然这是不可取的方法!!! 2、修改php.ini。打开php.ini查找date.timezone 去掉前面的分号= 后面加Asia/Shanghai,重启apache服务器即可--缺点就是如果程序 放到别人的服务器上,不能修改php.ini,那就奈何不得了。 3、在程序中添加时间的初始化的语句的 即:“date_default_timezone_set("Asia/Shanghai"); ”这个可以由程序员任意设置,我的推 荐。 时区标识符,大陆内地可用的值是:PRC,Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为中国,重庆,上海,乌鲁木齐) ,Etc/GMT-8,Asia/Harbin 港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北) […]
View DetailsMySQL server has gone away 问题的解决方法
mysql出现ERROR : (2006, 'MySQL server has gone away') 的问题意思就是指client和MySQL server之间的链接断开了。 造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert … values的语句过长, 这种情况可以通过修改max_allowed_packed的配置参数来避免,也可以在程序中将数据分批插入)。 产生这个问题的原因有很多,总结下网上的分析: 原因一. MySQL 服务宕了 判断是否属于这个原因的方法很简单,进入mysql控制台,查看mysql的运行时长 mysql> show global status like 'uptime'; +—————+———+ | Variable_name | Value | +—————+———+ | Uptime | 3414707 | +—————+———+ 1 row in set或者查看MySQL的报错日志,看看有没有重启的信息 如果uptime数值很大,表明mysql服务运行了很久了。说明最近服务没有重启过。 如果日志没有相关信息,也表名mysql服务最近没有重启过,可以继续检查下面几项内容。 原因二. mysql连接超时 即某个mysql长连接很久没有新的请求发起,达到了server端的timeout,被server强行关闭。 此后再通过这个connection发起查询的时候,就会报错server has gone away (大部分PHP脚本就是属于此类) mysql> show global variables like '%timeout'; +—————————-+———-+ | Variable_name | Value | +—————————-+———-+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | […]
View Detailsnginx中的超时设置
nginx使用proxy模块时,默认的读取超时时间是60s。 1. send_timeout syntax: send_timeout the time default: send_timeout 60 context: http, server, location Directive assigns response timeout to client. Timeout is established not on entire transfer of answer, but only between two operations of reading, if after this time client will take nothing, then nginx is shutting down the connection. 2. 负载均衡配置时的2个参数:fail_timeout和max_fails 这2个参数一起配合,来控制nginx怎样认为upstream中的某个server是失效的当在fail_timeout的时间内,某个server连接失败了max_fails次,则nginx会认为该server不工作了。同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。 个人认为,nginx不应该把这2个时间用同一个参数fail_timeout来控制,要是能再增加一个fail_time,来控制接下来的多长时间内,不再使用down掉的server就更好了~ 如果不设置这2个参数,fail_timeout默认为10s,max_fails默认为1。就是说,只要某个server失效一次,则在接下来的10s内,就不会分发请求到该server上 3. proxy模块的 proxy_connect_timeout syntax: proxy_connect_timeout timeout_in_seconds context: http, server, location This directive assigns a timeout for the connection to the proxyserver. This is not the time until the server returns the pages, this is the […]
View Detailsbootstrap中的焦点图实例
使用html属性标记,代码如下: <div id="myCarousel" class="carousel"> <!-- 要切换的内容--> <div class="carousel-inner"> <div class="active item">…</div> <div class="item">…</div> <div class="item">…</div> </div> <!-- 切换导航 --> <a class="carousel-control left" href="#myCarousel" data-slide="prev">‹</a> <a class="carousel-control right" href="#myCarousel" data-slide="next">›</a> </div> 也可以在使用了.carousel类的元素内部添加切换内容指示工具 <!-- 焦点图指示器--> <ol class="carousel-indicators"> <li data-target="#myCarousel" data-slide-to="0" class="active"></li> <li data-target="#myCarousel" data-slide-to="1"></li> <li data-target="#myCarousel" data-slide-to="2"></li> </ol> 方法 .carousel(options) 初始化轮播组件,接受一个对象做为可选参数并开始循环播放. 例如: $(".carousel").carousel({ interval:2000 }) .carousel('cycle') 从左向右循环播放 .carousel('pause')中止播放 .carousel(number)播放到某个特定的帧(与数组类似,从0开始计数). .carousel('prev') 回到上一帧 .carousel('next') 回到下一帧 轮播类提供了两个事件 slide 该事件在调用slide实例方法时立刻触发 slid 该事件在轮播项切换效果完成之后触发 本实例代码如下: <style>/*metro风格样式*/ div, input, select, textarea, span, img, table, td, th, p, a, button, ul, li { border–radius: 0 0 0 0 !important; } [class^="m-icon-"] { display: inline–block; width: 14px; height: 14px; margin–top: 4px; line–height: 14px; vertical–align: top; background–image: url(http://www.kuiyu.net/content/bootstrap/img/syncfusion-icons.png); background–position: 0 0; background–repeat: no–repeat; } [class^="m-icon-big-"] { display: inline–block; width: 30px; height: 30px; margin: 6px; vertical–align: top; background–image: url(http://www.kuiyu.net/content/bootstrap/img/syncfusion-icons.png); background–position: 0 0px; background–repeat: no–repeat; } .m–icon–white { background–image: url(http://www.kuiyu.net/content/bootstrap/img/syncfusion-icons-twhite.png); } /* Misc */ .btn.icn–only { min–width: 14px; } .btn.bigicn–only { min–width: 34px; } .m–icon–swapright { background–position: –27px –10px; […]
View DetailsC# 字符串按 ASCII码 排序,注意其中的小坑
在和银行做数据对接时,涉及到数据传输时的验签及加密。其中数据签名方案中就要求数据项根据属性名按 ASCII码 进行升序排序。C#中的ASCII码排序并不是表面上那么简单,一不小心就入坑了。因为C#的排序默认并不是按照ASCII码进行排序的。举个例子, 我有这样一个字符串数组,然后对其排序。
1 2 3 |
string[] vv = { "1", "2", "A", "a", "B", "b" }; Array.Sort(vv); //结果 1 2 a A b B |
如果是按照ASCII码进行排序的话,顺序应该是: 1, 2, A, B, a, b 而实际排序后的结果则是:1, 2, a, A, b, B . 这也就是说Sort()方法默认情况下并不是按ASCII码进行排序的。之后我也同样测试了C#中的OrderBy()的排序,发现它默认情况下也并不是按照ASCII码进行的排序。
1 2 3 |
string[] vv = { "1", "2", "A", "a", "B", "b" }; vv.OrderBy(x => x); //结果 1 2 a A b B |
那么既然默认排序不是按ASCII码进行的排序,我们要怎么做呢? 看下面代码,只需要在原来排序方法上再加个参数: string.CompareOrdinal。string.CompareOrdinal会把每个字符先转成相应的数值(如 a 转为数值 97),然后再对数值进行比较。
1 |
Array.Sort(vv, string.CompareOrdinal); //ASCII排序 |
注:掉入这个坑是因为起初不知道如何对字符做ASCII码排序,于是百度了一把。得到的结果就是这个 C# 参数按照ASCII码从小到大排序(字典序) 而当我采用这种方式时,银行验签那步始终通不过,调试发现我排序后的结果和银行那边的不同。这篇博文的博主可能自己也没发现这个坑吧。 from:http://www.cnblogs.com/similar/p/6739293.html
View Details