以晴为主

最新文章»

VS2008学习研究

1.自动实现属性

class LightweightCustomer
{
    public double TotalPurchases { get; set; }
    public string Name { get; private set; } // read-only
    public int CustomerID { get; private set; } // read-only
}
2.对象和集合初始值设定项
private class Cat
{
    // Auto-implemented properties
    public int Age { get; set; }
    public string Name { get; set; }
}

static void MethodA()
{
    // Object initializer
    Cat cat = new Cat { Age = 10, Name = "Sylvester" };
}

List<Cat> cats = new List<Cat>
{
    new Cat(){ Name="Sylvester", Age=8 },
    new Cat(){ Name="Whiskers", Age=2},
    new Cat() { Name="Sasha", Age=14}
};

3.定义和调用扩展方法

 public static class StringExtension
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] {' ', '.','?'}, StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
int i = s.WordCount();

4.匿名类型

var v = new { Amount = 108, Message = "Hello" };

var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };

foreach (var v in productQuery)
{
    Console.WriteLine("Color={0}, Price={1}", v.Color, v.Price);
}

5.匿名方法

public class ListT
    {
        public delegate bool Filter(string item);//一个委托
        public List<string> GetResult(Filter filter){
            List<string> resultList = new List<string>();
            foreach (string str in MyList)
            {
                if (filter(str))//使用委托
                {
                    resultList.Add(str);
                }
            }
            return resultList;
        }
        public List<string> MyList { get; set; }
    }

List<string> resultList= t1.GetResult(delegate(string str)
            {
                if (str.IndexOf('a') >= 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            });//通过匿名方法直接实现

6.Lambda 表达式

Lambda 表达式一般与委托联合使用。

public delegate bool Equest(string a, string b,string c);//定义了一个委托

ListT.Equest e = (x, y, c) => x == y || x == c;//使用Lambda表达式实现委托

 

delegate void TestDelegate(string s);
…
TestDelegate myDel = n => { string s = n + " " + "World"; Console.WriteLine(s); };
myDel("Hello");//可以在Lambda表达式中写任意数量的语句

Func<string, bool> f = x => x == "a";//Fun是C#定义好的一个类

f("abc");

 

7.LINQ

             // Create the data source.
            string[] words2 = { "blueberry", "chimpanzee", 
                                  "abacus", "banana", 
                                   "apple", "cheese", 
                                     "elephant", "umbrella", "anteater" };
            // Create the query.
            var wordGroups2 =
                from w in words2
                group w by w[0] into grps
                orderby grps.Key descending
                select grps;
 
var innerGroupJoinQuery = from category in categories join prod in products on category.ID equals prod.CategoryID into prodGroup select new { CategoryName = category.Name, Products = prodGroup };

 


 

软件部工作计划

一. 建立统一的项目版本控制

根据对公司现有软件项目现状进行分析后,发现大部分项目都是由程序员在客户的服务器中直接进行代码修改,使公司内的项目代码不能与客户服务器中代码保持一致。如果这种情况持续发展下去,就会造成程序员修改代码无法在公司内完成,而要到客户服务器中进行修改,修改后的代码也不能进行有效的测试。为解决这一实际问题公司需要在服务器中建立软件项目版本控制,强制程序员在公司内修改代码,通过项目版本控制工具部署到公司服务器中,再使用客户服务器进行项目代码的更新操作。针对公司曾经使用过的项目版本控制工具进行分析研究后,发现公司软件项目大体采用了三种项目版本控制工具(VSS、CVS、SVN)。公司开发项目框架语言一般会采用.net或java语言,考虑到SVN版本控制工具对.NET与Java的开发框架都有很好的支持,所以推荐在公司服务器中安装SVN项目版本控制本服务端,并将开发过的软件项目都部署到新的SVN版本控制服务端中。

二. 软件项目测试

软件项目测试是开发过程中不可缺少的一部分,没有经过严格的测试的代码肯定会存在各种问题。为提高软件项目的质量,需要加强项目开发后的测试过程。根据对开发过程的实现情况分析研究后,归纳了三种测试方式。即“自动测试”、“相互测试”和“演示测试”。

自动测试是指利用计算机程序对软件项目进行测试工作。这种测试方式的优点是可以通过编写测试用例的方式覆盖软件项目的所有功能,其缺点是需要程序花费大量的时间编写测试用例。

相互测试是指当项目的多个功能模块开发完成后,由各模块的开发参与人员交换功能模块进行测试工作。并规定程序员至少要发现的bug的数量,可以加强测试的效果。

演示测试是指将软件项目的所有参与人员都聚集到会议室,由各个模块的开发人员对自己所编写的功能模块进行讲解。首先需要讲解是功能模块的客户需求,其次通过投影仪向其他程序员演示功能模块并讲解开发过程中遇到的问题及解决方式。其他参与人员可以在演示过程中提出疑问及修改意见。这样不仅可以完善软件项目,同时也加强了程序员之间的技术交流。

三. 解决项目开发与维护脱节的问题

软件项目开发的后期工作就是项目维护,在项目维护过程中出现了很多的问题。主要是维护人员对项目不了解。

一方面是由于项目没有设计文档或用户需求文档。有些项目即使有项目的设计文档但也就是数据库表的设计及大体框架的设计,实际在开发过程中也无法详细的将每一个程序员的设计思路都记录下来,很多设计思路也体现了该程序员的开发经验,这些经验只能通过后期维护人员在开发过程中不断的积累才得体会到。

另一方面维护人员没有参与该项目的开发。没有参与项目的开发过程会使维护人员无法了解客户需求以及项目的框架设计。

维护人员对项目进行修改的结果会导致越修改问题越多。其原因是有些维护人员把以前的代码直接copy过来,不作任何的修改。或是不管以前代码是怎么做的一律不要,全凭自己的经验随心所欲的自主研发,造成的结果就是错的还是错的、代码更加的混乱。

基于以上情况应对新的程序员进行定期的培训。由以前项目开发人员整理相关的项目文档及项目程序,在会议室通过投影仪讲解的形式进行培训。培训过程中被培训人员可以提出疑问,培训人员应尽量讲解明白项目的相关功能。培训结束后被培训人员要研读项目文档并在项目程序中实际操作相关的数据,将结果汇报给培训负责人。

四. 加强程序员间技术交流促进公司软件开发水平

软件项目的编程技术是不断更新的。需要程序员对新技术进行不断的学习。由于技术的多样性只靠个人的学习是不够的。只有加强程序员之间的交流才能促进公司整体技术实力的提升。建议定期或不定期的进行技术交流会,由每个程序员讲解近期学习到的新技术或开发经验。通过建立代码库,将每次的交流过程中的新技术都记录保存到代码库中。

提交新技术或新软件框架需要程序员撰写相关的文档。文档包括技术名称、简介、配制过程或使用方式。还需求提交演示代码并详细讲解演示代码的使用方式或作用。

技术交流会中除了讲解新技术,也可以预定技术话题进行技术探讨。比如“如何提高软件质量”等问题。

c#通过IMAP协议获取未读邮件数量

一.本文代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LumiSoft.Net.IMAP;
using LumiSoft.Net.IMAP.Client;

namespace CommonLibrary.Mail
{
    public class MailsInfo
    {
        /// <summary>
        /// 获取未读邮件数量
        /// </summary>
        /// <param name="mailServer">邮件服务器地址</param>
        /// <param name="username">邮箱用户名</param>
        /// <param name="password">邮箱密码</param>
        /// <returns></returns>
        public static int GetUnReadMails(string mailServer, string username, string password)
        {
            IMAP_Client IMAPServer = new IMAP_Client();
            try
            {
                //连接邮件服务器通过传入邮件服务器地址和用于IMAP协议的端口号
                IMAPServer.Connect(mailServer, 143);
                //登陆邮箱
                IMAPServer.Authenticate(username, password);
                IMAPServer.SelectFolder("INBOX");

                if (IMAPServer.GetUnseenMessagesCount() == 1)
                {
                    return 1;
                }
                else
                {
                    return IMAPServer.GetUnseenMessagesCount();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                IMAPServer.Disconnect();
            }
        }
    }
}

(说明:sina,126,qq等邮箱经测试好像都不支持IMAP协议连接,只有支持IMAP协议的邮件系统才可以使用IMAP协议获取邮件信息)

二.总结:

POP3协议,SMPT协议,IAMP协议介绍:

pop3:(Post Office Protocal 3),3是它的版本,是目前使用的主流版本。POP3是客户-服务器协议,其中电子邮件的接收需要一个收件服务器,邮件下载到本地计算机上所有一次,从而使离线阅读更轻松,可以指定是否保留副本的邮件在服务器上。 The default port number for POP3 is 110.默认端口数目为POP3是110.

SMTP(Simple Mail Transfer Protocal):简单Mail传输协议,是个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。 独立于特定的传输子系统,它可以是电子邮件从客户机传输到服务器;也可以是从某一个服务器传输到另一个服务器;且只需要可靠有序的数据流信道支持。SMTP 重要特性之一是其能跨越网络传输邮件,即SMTP 邮件中继。通常,一个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP 传输层协议组成。使用 SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。

IMAP ( Internet消息访问协议)是一种标准协议,用于访问电子邮件从您的本地服务器。的IMAP (最新版本的IMAP第4版)是一个客户机/服务器协议在电子邮件收到并为您举行的由您的因特网服务器。您(或您的电子邮件客户端)可以查看刚才的标题和发件人的信件,然后决定是否下载该邮件。您还可以创建和操纵多个文件夹或邮箱的服务器上,删除邮件,或寻找某些地区或整个说明。需要不断的IMAP访问期间服务器时,你的工作与您的邮件。

局域网共享教程

前言:局域网共享是个头疼的问题,只要找到的正确的设置方法,其实也很简单。原版也需要设置,否则也不能进行共享!

第一章:共享的前提工作:

1.更改不同的计算机名,设置相同的工作组!

2.我的电脑右键-管理-计算机管理-本地用户和组-用户:更改管理员用户名

3.手动设置IP,将ip设置在同一个网段,子网掩码和DNS解析相同

4.如何设置DNS解析:首先你可以使用自动获取,然后在开始-运行里面输入cmd后回车,在命令里面输入ipconfig/all后回车

5.运行里输入services.msc回车打开服务

第二章:共享的准备工作(注意设置完成后最好重启一下生效):

1.开始-设置-控制面板-防火墙-例外-勾选“文件和打印机共享”!当然你也可以关闭防火墙。

2.运行里面输入secpol.msc回车进入本地安全设置-本地策略-安全选项

将“网络访问:不允许SAM账户的匿名枚举”停用 注意此点只对来宾起效,将在第六章说到。

将“账户:使用空白密码的本地账户只允许进行控制台登录”停用

3.双击我的电脑打开资源管理器-工具-文件夹选项-查看-将“使用简单的文件夹共享”前面的勾去除!

4.设置共享文件夹或共享盘符(我这里设置D盘为共享盘符,当然你可以自己设置磁盘里面的任意文件夹为共享文件)

打开资源管理器-右键D盘-共享和安全-左键点选打开

注意:经过上两个图的共享资源设置,偶们进入对方的机子只有“只读”权限,只能看不能动的哦!

这可是XP默认的这安全性呵呵!当然你可以设置完全控制。这样你就可以为所欲为了哈哈。

第三章:用管理员登录的局域网共享方式

经过上面两章的设置,我们已经可以访问计算机today了

1.在主机中双击网上邻居-点击查看工作组计算机

2.双击today或是右键打开

3.还有一个更快捷的访问方法就是在主机的地址栏里面直接输入[url=file://\\today]\\today[/url]后回车,出现的界面和上面相同。

4.在登录框输入用户名play和密码(这里密码为空,所以不用输入),确定后就进入today的共享盘符了

小提示:以后我们再次登录today的时候就不用再输入用户名和密码了呵呵

第四章:以来宾登录的局域网共享方式

经过第一和第二两章的设置,我们还要进一步设置才能做到来宾共享

1.“我的电脑”右键-管理-本地用户和组-用户-启用来宾(注意:在这里启用来宾的效果和在控制面板-用户账户里面启用来宾是一样的。区别就是在此启用后面板里面的来宾还是显示没有启用的,而在面板里面启用来宾的话这里也就启用了。)

2..运行里输入secpol.msc启动“本地安全设置”-“用户权利指派”-将“拒绝从网络访问这台计算机”里面的guest用户删除。

3.运行里输入secpol.msc启动“本地安全设置”-“安全选项”-“网络访问:本地账户的共享和安全模式”-将“经典”改为“仅来宾”。

4.运行里输入secpol.msc启动“本地安全设置”-“用户权利指派”-将“拒绝作为服务器和批作业”里面的用户删除

注意:以上设置需重启后生效

5.我们现在可以象第三章的进入方法进入today的共享资源了。区别就是来宾登录的共享方式没有弹出登录框,不用输入用户名和密码就可以直接进入了。

小提示:从以上的设置方法我们可以看出,管理员登录的共享方式是狭义的共享,而来宾登录的共享方式就是广义的共享。

可以这么说:来宾共享里面已经包含了管理员共享的方式。不过启用来宾登录的方式就去除了管理员登录的方式了呵呵

第五章:用磁盘映射,将today的共享资源直接映射到主机中。以后在主机资源管理器里面就可以直接打开了。前提就是today在局域网内也必须开机。

1.在主机中右键“网上邻居”-点选“映射网络驱动器”

2.浏览today的共享盘符

3.完成后在主机里面出现了today的共享盘符

第六章:局域网访问常见的故障及解决方法

1.访问对方电脑时不弹出用户名框,打不开对方电脑上的共享文件夹

原因为本机的管理员用户名为Administrator,将其改为任意名即可!

注意:这个现象是用来宾登录的共享方式才会出现的。!

2.访问对方机子时,登录对话框中的用户名始终为灰色的guest不可选

解决方法:本地策略-安全选项-“网络访问:本地账户的共享和安全模式”改为“经典-本地用户以自己的身份验证”即可!

注意:以上这种现象是用来宾登录的共享方式以后,我们不注意禁用了来宾才出现的。禁用了来宾后我们就变成了以管理员登录的共享方式了呵呵!

3.以管理员登录的共享方式登录对方的机子时出现没有权限使用网络资源的现象

这是我们正常的共享使用之中因为在安装某些安全软件的时候给关闭了。我们只要再次把“使用简单的文件共享”前面的勾去除即可!

4.以来宾登录的共享方式在局域网使用中突然也会出现第3点的情况。原因也是使用了某些安全软件把我们的SAM账户恢复为默认的启用状态了。

我们只要进入组策略禁用后重启即可!

友情提示:需要注意的是我们安装有些软件比如金山杀毒软件,它会关闭了我们的共享设置里面的某些服务导致不能正常共享。我们只要按照以上各章的设置和本章的设置就可以解决了。

第七章:增加局域网安全性,为来宾用户设置密码。

其实我们在第二章的共享盘符设置里面已经提到权限的设置了,默认是只读这本身已经很安全了。

不过就是局域网内所有人都可以访问你。如果我们设置了密码,其他人就不可随意访问你的共享资源了。

1.运行里面输入control userpasswords2回车

2.设置密码后重启

3.设置密码后登录today出现灰色对话框,此对话框和第六章的故障可不同的哦。我们只要输入密码确定即可进入了。

4.在计算机管理里面-共享文件夹-会话里面就可以看到登录方式了

Struts2的标签的一些问题

generator标签的几个属性:
count:该属性是一个可选的属性,该属性指定生成集合中元素的总数。
separator:这是一个必填的属性,该属性指定用于解析字符串的分隔符。
val:这是一个必填的属性,该属性指定被解析的字符串。
converter:该属性是一个可选的属性,该属性指定一个转换器,该转换器负责将集合中的每个字符串转换成对象。
id:该属性是一个可选的属性,如果指定了该属性,则将生成的集合放在pageContext属性中。

问题:id将生成的集合放在了request中,而不是pageContext属性中

<table width="100" border="1">
<s:generator val="'音乐,语文,数学,地理'" separator=","  count="2">
<s:iterator status="st">
<tr <s:if test='#st.odd'>style="background-color:#bbbbbb"</s:if> >
<td><s:property value="#st.count" /><s:property /></td>
</tr>
</s:iterator>
</s:generator>
<s:generator val = "'Spring2.0宝典,轻量级J2EE企业应用实战,基于J2EE的Ajax宝典'" separator = "," id="bookes" count="2"/>
<%
java.util.Iterator i = (java.util.Iterator)request.getAttribute("bookes") ;  //应该是在pageContext中的,但是取出来这个Iterator i为null,反而我用request.getAttribute("bookes");却可以取到!

while( i.hasNext() ) {
String s = (String) i.next(); %>
<tr><td><%=s%></td></tr>
<%}
%>
</table>

s:combobox标签
<s:combobox label="请选择你喜欢的图书" theme="css_xhtml" labelposition="top"  list="{'j2ee','spring','ajax'}"
size="5" maxlength="3" name="book"
></s:combobox>

以下代码也可以实现s:combobox标签的功能
<script type="text/javascript">
function autoPopulate_url_book(targetElement) {
targetElement.form.elements['book'].value=targetElement.options[targetElement.selectedIndex].value;
}
</script>
<input type="text" name="book" size="20" maxlength="20" value="" id="url_book"/><br />
<select onChange="autoPopulate_url_book(this);">
<option value="j2ee">j2ee2</option>
<option value="spring">spring2</option>
<option value="ajax">ajax2</option>
</select>

struts2找不到datetimepicker标签,不显示控件的解决方

解决办法:

1:要在工程中加个struts2-dojo-plugin.jar
2:到JSP页面加上

<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>

3:在head中加入<sx:head/>

例如:

test.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<sx:head/>

</head>
<body>
<s:form theme="simple">
日期选择部件,指定toggleType属性,且指定value<br>
<sx:datetimepicker name="order.date" label="购买日期" toggleType="fade" value="%{'today'}" /><hr>
日期选择部件,指定format属性<br>
<sx:datetimepicker name="order.date" label="购买日期" displayFormat="yyyy年MM月dd日"/><hr>
日期选择部件,指定weekStartsOn属性<br>
<sx:datetimepicker name="order.date" label="购买日期" displayFormat="yyyy年MM月dd日" weekStartsOn="2"/><hr>
日期选择部件<br>
<sx:datetimepicker name="start" type="time" label="出发时间" value="%{'13:00'}"/><hr>
</s:form>

</body>
</head>

注意:value="%{'13:00'}" 的设置方式

用struts2.1.6的datetimepicker时,显示的时候月份从一月到八月都可以正常显示,而到九月,十月就乱码
这是 2.1.6 的一个 bug
解决办法:
1  ,这个方法可以解决乱码,但是 月份 都变成 1,2,3.... 了

在 <sd:head /> 中加入:extraLocales="UTF-8"
在 <sd:datetimepicker .../> 中加入:language="UTF-8"

问题:这个标签在不同的浏览器有不同的问题,不好解决啊

//用于截断s字符串前后空格的函数
function trim(s){

//使用正则表达式先截取签名空格,再截取后面空格
return s.replace(/^\s*/,"").replace(/\s*$/,"");

}

解决struts2中的中文问题

方法一:
1.在struts2-core-2.0.0-SNAPSHOT.jar包中路径为struts2-core-2.0.6\org\apache\struts2

有一个default.properties 文件,把struts.i18n.encoding=UTF-8改为

struts.i18n.encoding=GBK

2.在struts.xml文件内添加常量:

<constant name="struts.i18n.encoding" value="GBK"/>

3.jsp页面中<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

方法二:jsp页面中<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

s:doubleselect 的用法
出现以下异常的解决方法是在form中加上name属性:
exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:395)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)

root cause

expression_r_r parameters.formName is undefined on line 101, column 43 in template/simple/doubleselect.ftl. - Class: freemarker.core.TemplateObject
File: TemplateObject.java
Method: assertNonNull
Line: 124 - freemarker/core/TemplateObject.java:124:-1
org.apache.struts2.components.UIBean.end(UIBean.java:515)

例如:
%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

</head>
<body>
<s:form action="x" name="myname">

<s:doubleselect  label="请选择你喜欢的图书" name="author" list="{'李刚','Dvaid'}"
doubleList="top=='李刚'?{'j2ee','spring','java'}:{'JavaScript:The Definitive Guide'}"
doubleName="book" />
<s:set name="foobar"
value="#{'Java':{'Spring','Hibernate','Struts 2'},'.Net':{'Linq', ' ASP.NET 2.0'}, 'Database':{'Oracle', 'SQL Server', 'DB2', 'MySQL'}}" />
<s:doubleselect list="#foobar.keySet()"
doubleName="technology"
doubleList="#foobar[top]"
label="Technology" size="3" doubleSize="3" />

</s:form>

</body>
</html>

struts2 token标签的使用
1、使用Struts2的表单标签,其中需要增加token标签。如下:
……
<%@ taglib uri="/struts-tags" prefix="s" %>
……
<s:form action="page1" theme="simple">
<s:datetimepicker name="order.date" label="购买日期" toggleType="explode" value="today"/><br/>
<s:token/>
<s:reset/><s:submit/>
</s:form>

2、在struts配置文件中增加token拦截器。(token 和 token-session 拦截器的启用,是在 struts.xml 配置文件中,既可以为包启用,也可以单独为某个 action 启用)
2.1  为 Action 启用 token
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<package name="lee" extends="struts-default">
<action name="page1" class="org.bruce.Page1">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
<result>/page1.jsp</result>
<result name="invalid.token">/page1error.jsp</result>
</action>
</package>
</struts>

2.2 为包启用 token

注意,需要name为invaid.token的result。这是当拦截器判断是重复提交的时候,会转向的结果。
<package name="lee" extends="struts-default">
<interceptors>
<interceptor-stack name="myStack"> 
<interceptor-ref name="token"/> 
<interceptor-ref name="defaultStack" /> 
</interceptor-stack> 
</interceptors>
<default-interceptor-ref name="myStack" /> 
<action name="page1" class="org.bruce.Page1">
<result>/page1.jsp</result>
<result name="invalid.token">/page1error.jsp</result>
</action>
</package>

3、invaid.token页面打印错误信息,一样可以使用struts标签。如下:
<s:actionerror/>

理解:
1、JSP使用<s:token/>标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。
2、token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yukang_ky/archive/2009/02/05/3863798.aspx

读图片,判断大小和尺寸

java.io.File file = new java.io.File(name);

java.awt.image.BufferedImage bi = javax.imageio.ImageIO.read(file);
//大于最大宽度返回 2
int w = bi.getWidth(); //获得 宽度
if(w>65){
result=2;
}
//大于最大高度返回3
int h = bi.getHeight();//获得 高度
if(h>65&&result==0){
result=3;
}
//大于最大大小返回4
FileInputStream in = new FileInputStream(name);
if (in.available() / 1024 > 100&&result==0){
result=4;
}
if(result!=0){
if(file.exists()){
file.delete();
}
}

Powered by 我的英雄 | Theme: style1. 

返回顶点