Struts+Hibernate+Spring

三大框架:Struts+Hibernate+Spring

Java三大框架主要用来做WEN应用。

Struts主要负责表示层的显示

Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作)

Hibernate主要是数据持久化到数据库

再用jsp的servlet做网页开发的时候有个 web.xml的映射文件,里面有一个mapping的标签就是用来做文件映射的。当你在浏览器上输入URL得知的时候,文件就会根据你写的名称对应到一 个JAVA文件,根据java文件里编写的内容显示在浏览器上,就是一个网页。

查看更多内容...

Posted in Web开发 at July 31, 2017. by 傻猫 .    Views: 469    No Comments

NET Framework4.0注册

C:\Inetpub\AdminScripts>cd

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis.exe -i

Start installing ASP.NET (4.0.30319).

.......

Finished installing ASP.NET (4.0.30319).

Posted in Web开发 at March 29, 2016. by 傻猫 .    Views: 2791    No Comments

android平台获取手机IMSI、IMEI 、序列号和手机号的方法

android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法

1)获取运营商sim卡imsi号:
String android_imsi = telephonyManager.getSubscriberId();//获取手机IMSI号

String IMSI = android.os.SystemProperties.get(
android.telephony.TelephonyProperties.PROPERTY_IMSI);
2)获取IME标识两种方法(手机唯一的标识)
String imei = ((TelephonyManager) context.getSystemService(TELEPHONY_SERVICE)).getDeviceId();

String IMEI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI)

不过纯APP开发SystemProperties,TelephonyProperties汇报错误,因为android.os.SystemProperties在SDK的库中是没有的,需要把Android SDK 目录下data下的layoutlib.jar文件加到当前工程的附加库路径中,就可以Import。

如果Android Pad没有IMEI,用此方法获取设备ANDROID_ID:
String android_id = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID);

  1. 获取手机号
    TelephonyManager tm= (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
    String number = tm.getLine1Number();

如下使用例子:
public static String getIMEI() {
return ((TelephonyManager) AppXiKang.getApp().getSystemService(
Context.TELEPHONY_SERVICE)).getDeviceId();
}

public static String getAndroidId() {
return android.provider.Settings.Secure.getString(
AppXiKang.getApp().getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);
}

public static String getSimSerialNumber() {
return ((TelephonyManager) AppXiKang.getApp().getSystemService(
Context.TELEPHONY_SERVICE)).getSimSerialNumber();
}

public static String getSerialNumber1() {
return android.os.Build.SERIAL;
}

/**

  • getSerialNumber
  • @return result is same to getSerialNumber1()
    */
    public static String getSerialNumber(){
    String serial = null;
    try {
    Class<?> c = Class.forName("android.os.SystemProperties");
    Method get = c.getMethod("get", String.class);
    serial = (String) get.invoke(c, "ro.serialno");
    } catch (Exception e) {
    e.printStackTrace();
    }
    return serial;
    }

public static void displayDevice(){
String dest_imei = getIMEI();
String androidId = getAndroidId();
Log.i(TAG, "isTestDevice: "
+" \nIMEI:"+dest_imei
+" \nANDROID ID:" + androidId
+" \nSerialNumber:" + getSerialNumber()
+" \nSimSerialNumber:" + getSimSerialNumber()
);
}
运行结果示例:
IMEI:868331011992179
ANDROID ID:5a3b287f2b13bef8
SerialNumber:021YLJ212C001879
SimSerialNumber:898600810110

  1. 获取一个能唯一标识每台Android设备的序号与服务器通信

所以如果你想得到设备的唯一序号, TelephonyManager.getDeviceId() 就足够了。但很明显暴露了DeviceID会使一些用户不满,所以最好把这些id加密了。实际上加密后的序号仍然可以唯一的识别该设备,并且不会明显的暴露用户的特定设备,例如,使用
String.hashCode() ,结合UUID:

String getuniqueId(){

            TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);

String imei=tm.getDeviceId();
String simSerialNumber=tm.getSimSerialNumber();
String androidId = android.provider.Settings.Secure.getString(
getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
UUID deviceUuid =new UUID(androidId.hashCode(), ((long)imei.hashCode() << 32) | simSerialNumber.hashCode());
String uniqueIuniqueId d = deviceUuid.toString();
returnuniqueId;
}

最后的deviceID可能是这样的结果: 00000000-54b3-e7c7-0000-000046bffd97

得到设备独一无二的标识: 可以用于客户端与服务端通信的唯一标识

Posted in Web开发 at January 7, 2016. by 傻猫 .    Views: 2966    No Comments

typecho主题常用代码

typecho是一款不错的php博客系统,轻便而功能完备,也有许多的支持者;但博客除了后台功能外,最重要的应该算得上是博客外观了,可是别人所作的模版一般都不大可能完全符合自己的使用习惯、或是品味。我们有必要自己制作、或者至少:能够对已有的模版进行一些个性化的定制,那么,下面的这些小小的技巧也就是必不可少的了。你可以用它们对typecho模版进行一些人性化、个性化的改进。

1,文章title设置

使得对搜索引擎足够友好
示例一:
首页-- 名称 - 描述 - 归档 - 日期 - 名称
文章-- 标题 - 博客 - 页面 - 标题 - 名称
分类-- 分类 - 博客 - 标签 - 标签 - 名称

<title>
<?php if($this->is('index')): ?><?php $this->options->title(); ?>-<?php $this->options->description(); ?>
<?php elseif($this->is('archive')): ?><?php $this->archiveTitle('/','',' - '); ?><?php $this->options->title(); ?>
<?php else: ?><?php $this->archiveTitle('','',' - '); ?><?php $this->options->title(); ?><?php endif; ?>
</title>

示例二:
首页: 博客名称
页面:页面标题 - 博客名称
分类:分类名称 - 博客名称
标签:标签 - 博客名称
存档:存档: XXXX/XX - 博客名称
其它:(日志页)页面标题

<title>
<?php if ($this->is('index')){$this->options->title();}
elseif($this->is('page')){$this->archiveTitle('','',' - ');$this->options->title();}
elseif($this->is('category')){$this->archiveTitle('','',' - ');$this->options->title();}
elseif($this->is('tag')){$this->archiveTitle('','Tag: ',' - ');$this->options->title();}
elseif($this->is('archive')){$this->archiveTitle('年','存档: ','月 - ');$this->options->title();}
else{$this->archiveTitle('','','');}?>
</title>

或使用(默认):

<?php $this->archiveTitle('', '', ' - '); ?><?php $this->options->title(); ?>-<?php $this->options->description(); ?>

最后给出一个较全面的判断:

<?php if($this->is('index')){ ?>
    <?php $this->options->title(); ?>&#160;&#45;&#160;<?php $this->options->description(); ?>
    <?php if($this->_currentPage>1) echo '第 '.$this->_currentPage.' 页 '; ?>
<?php }  else if($this->is('category')) { ?>
    Category: <?php $this->archiveTitle(' &lt; ','',''); ?>&#160;&#45;&#160;<?php $this->options->title(); ?>
<?php } else if($this->is('tag')) { ?>   
    Tag: <?php $this->archiveTitle(' &lt; ','',''); ?>&#160;&#45;&#160;<?php $this->options->title(); ?>
<?php } else if($this->is('archive'))  { ?>   
    Keyword: <?php $this->archiveTitle(' &lt; ','',''); ?>&#160;&#45;&#160;<?php $this->options->title(); ?>
<?php } else if($this->is('attachment')) {?>
    Attachment: <?php $this->archiveTitle(' &lt; ','',''); ?>&#160;&#45;&#160;<?php $this->options->title(); ?>
<?php } else  { ?> 
    <?php $this->archiveTitle('', '', ''); ?>&#160;&#45;&#160;<?php $this->options->title(); ?>
<?php } ?>

查看更多内容...

Posted in Web开发 at April 8, 2015. by 傻猫 .    Views: 1898    No Comments

Struts2 漏洞修复方案

详见官方修复方案

360 WebSafe修复方案

Posted in Web开发 at May 28, 2014. by 傻猫 .    Views: 2619    No Comments

c#的DateTime.Now函数详解

//2008年4月24日
System.DateTime.Now.ToString("D");
//2008-4-24
System.DateTime.Now.ToString("d");
//2008年4月24日 16:30:15
System.DateTime.Now.ToString("F");
//2008年4月24日 16:30
System.DateTime.Now.ToString("f");
//2008-4-24 16:30:15
System.DateTime.Now.ToString("G");
//2008-4-24 16:30
System.DateTime.Now.ToString("g");
//16:30:15
System.DateTime.Now.ToString("T");
//16:30
System.DateTime.Now.ToString("t");
//2008年4月24日 8:30:15
System.DateTime.Now.ToString("U");
//2008-04-24 16:30:15Z
System.DateTime.Now.ToString("u");
//4月24日
System.DateTime.Now.ToString("m");
System.DateTime.Now.ToString("M");
//Tue, 24 Apr 2008 16:30:15 GMT
System.DateTime.Now.ToString("r");
System.DateTime.Now.ToString("R");
//2008年4月
System.DateTime.Now.ToString("y");
System.DateTime.Now.ToString("Y");
//2008-04-24T15:52:19.1562500+08:00
System.DateTime.Now.ToString("o");
System.DateTime.Now.ToString("O");
//2008-04-24T16:30:15
System.DateTime.Now.ToString("s");
//2008-04-24 15:52:19
System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
//2008年04月24 15时56分48秒
System.DateTime.Now.ToString("yyyy年MM月dd HH时mm分ss秒");
//星期二, 四月 24 2008
System.DateTime.Now.ToString("dddd, MMMM dd yyyy");
//二, 四月 24 ’08
System.DateTime.Now.ToString("ddd, MMM d "’"yy");
//星期二, 四月 24
System.DateTime.Now.ToString("dddd, MMMM dd");
//4-08
System.DateTime.Now.ToString("M/yy");
//24-04-08
System.DateTime.Now.ToString("dd-MM-yy");
//字符型转换转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500
//本年度销售额、本季度利润、本月新增客户
 //今天
DateTime.Now.Date.ToShortDateString();
//昨天,就是今天的日期减一
DateTime.Now.AddDays(-1).ToShortDateString();
//明天,同理,加一
DateTime.Now.AddDays(1).ToShortDateString();
//本周(要知道本周的第一天就得先知道今天是星期几,从而得知本周的第一天就是几天前的那一天,要注意的是这里的每一周是从周日始至周六止
DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
//如果你还不明白,再看一下中文显示星期几的方法就应该懂了
//由于DayOfWeek返回的是数字的星期几,我们要把它转换成汉字方便我们阅读,有些人可能会用switch来一个一个地对照,其实不用那么麻烦的
string[] Day = new string[]{ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Day[Convert.ToInt16(DateTime.Now.DayOfWeek)];
//上周,同理,一个周是7天,上周就是本周再减去7天,下周也是一样
DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
//下周
DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
//本月,很多人都会说本月的第一天嘛肯定是1号,最后一天就是下个月一号再减一天。当然这是对的
//一般的写法
DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1"; //第一天
DateTime.Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1").AddMonths(1).AddDays(-1).ToShortDateString();//最后一天
//巧用C#里ToString的字符格式化更简便
DateTime.Now.ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString();
//上个月,减去一个月份
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//下个月,加去一个月份
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();
//7天后
DateTime.Now.Date.ToShortDateString();
DateTime.Now.AddDays(7).ToShortDateString();
//7天前
DateTime.Now.AddDays(-7).ToShortDateString();
DateTime.Now.Date.ToShortDateString();
//本年度,用ToString的字符格式化我们也很容易地算出本年度的第一天和最后一天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();
//上年度,不用再解释了吧
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToShortDateString();
//下年度
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();
//本季度,很多人都会觉得这里难点,需要写个长长的过程来判断。其实不用的,我们都知道一年四个季度,一个季度三个月
//首先我们先把日期推到本季度第一个月,然后这个月的第一天就是本季度的第一天了
DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 22)).ToString("yyyy-MM-01");
//同理,本季度的最后一天就是下季度的第一天减一
DateTime.Parse(DateTime.Now.AddMonths(22 - ((DateTime.Now.Month - 1) % 22)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//下季度,相信你们都知道了。。。。收工
DateTime.Now.AddMonths(22 - ((DateTime.Now.Month - 1) % 22)).ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 22)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
//上季度
DateTime.Now.AddMonths(-22 - ((DateTime.Now.Month - 1) % 22)).ToString("yyyy-MM-01");
DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 22)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();

Posted in Web开发 at December 31, 2013. by 傻猫 .    Views: 2667    No Comments

WordPress已成為全球19%網站基礎平臺

過去12個月,WordPress的軟體下載量已超過4600萬次,新增了336個主題,超過去年同期的2.3倍。此外,用戶的外掛程式申請達到9334個,而WordPress已批准其中6758個。到目前為止,WordPress的外掛程式庫中已有2.6萬個外掛程式。對於移動版,過去12個月中WordPress發佈了15個更新,其中包括3個iOS更新、6個Android更新和6個Windows Phone更新。

Automattic此前還對使用者使用WordPress的情況進行了調查,共有3萬人參與了這一調查。結果顯示,31%使用者將WordPress平臺用於iOS應用,30%用於Android手機,18%用於Android平板電腦,12%用於桌面應用。

此外69%受訪者表示,主要將WordPress用作內容管理系統,20%將其同時用作博客平臺和內容管理系統,6%將其用作博客平臺,7%將其用作應用平臺。穆倫維格表示,WordPress被用作應用平臺是一個全新的情況。


面向WordPress網站的主機服務提供者WP Engine也進行了自己的調查。結果顯示,有29.3%的美國人聽說過WordPress。

穆倫維格此次還表示,WordPress平臺已成為全球18.9%網站的基礎平臺,這一數字較2012年同期增長2.2%。

Automattic正計畫發佈新的3.6版WordPress。穆倫維格表示,這一代號為“Oscar”的新版本將很快發佈,並將原生地支援視頻和音訊檔在文本行中的使用,並提供更新的版本管理功能。

穆倫維格指出,WordPress已從單純的博客平臺發展成為內容管理系統,以及進一步的應用平臺。他認為,WordPress能成為許多服務的基礎,這就像是樂高積木。為了實現這一目標,穆倫維格此次宣佈將推出一個開發者資源網站。

WordPress將於今年10月和12月發佈3.7和3.8版本,新版本將更好地支撐WordPress向這一方向發展。

Posted in Web开发 at July 28, 2013. by 傻猫 .    Views: 2908    No Comments

JS延迟加载(JS后加载)加快网页打开速度

第一,JS延迟加载

代码如下:
程序代码
<script language="JavaScript" src="" id="my"></script>
<script>
setTimeout("document.getElementById('my').src='include/php100.php'; ",3000);//延时3秒
</script>

 

第二,JS最后加载

在需要插入JS的地方插入以下代码:

程序代码
<SPAN id=L4EVER>LOADING...</SPAN>

当然,那个LOADING…你可以换成自己喜欢的小图片.看起来很有AJAX效果呢.

然后在页面最底端插入:

程序代码
<SPAN class=spanclass id=AD_L4EVER>
你的JS代码在这里!</SPAN>
<script>L4EVER.innerHTML=AD_L4EVER.innerHTML;AD_L4EVER.innerHTML="";</script>

 

第三,JS最后加载

想要显示广告的位置
<div id="guangg1"></div>

想要显示的广告内容
<div id="ggad1" style="display:none"><script language="javascript"

src="/frontpage/include/php100.js"></script></div>

判断要显示的广告位置是否存在
<script>
function chkdiv(divid){
var chkid=document.getElementById(divid);
if(chkid != null)
{return true; }
else
{return false; }
} 最后就是显示广告了
if (chkdiv('guangg1')) {
document.getElementById('guangg1').innerHTML= document.getElementById('ggad1').innerHTML;
document.getElementById('ggad1').innerHTML="";
}
</script>


Posted in Web开发 at July 23, 2013. by 傻猫 .    Views: 2826    No Comments