2009年2月10日
本人代做PHP毕业设计(设计附讲解,主要是讲解整个程序的设计及编码),价格从优.非诚勿扰.QQ 827816475
1 在类的前边输入///然后按回车键,将添加XML注释。
2 把常用代码放入工具箱。
每个项目中都有一些会反复使用的代码段或文本,比如你需要在每个文件开头放置的版权页眉,或者一小段用于实现常用功能的代码。选中你所需的文字,把它拖进工具箱的“常规”选项卡下即可。
3 创建矩形选区
按住Alt键,再选择即可。
4 在视图之间切换
设计视图和HTML代码
Ctrl+PgUp,Ctrl+PgDn
页面和后台代码
F7或Shift+F7
摘要: 上一篇写了一个简单的自定义分页控件,当时写的不够完善,不能自定义控件的样式.
现在完善了,望同大家共同探讨.
现在已经在网上发布的分页控件特别多,而且大多都功能特别强,但是之所以选择自己写,主要是因为自己写可
以根据自己的要求来设计,不用的功能就功能免了.
本控件可以自定义样式,而且传入的参数和其它常用的分页控件差不多,记录总数和一页的数量,是否自定义样式,
当...
阅读全文
1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文)
1.9 取中文日期显示——年月日时分
string strY=currentTime.ToString("f"); //不显示秒
1.10 取中文日期显示_年月
string strYM=currentTime.ToString("y");
1.11 取中文日期显示_月日
string strMD=currentTime.ToString("m");
1.12 取中文年月日
string strYMD=currentTime.ToString("D");
1.13 取当前时分,格式为:14:24
string strT=currentTime.ToString("t");
1.14 取当前时间,格式为:2003-09-23T14:46:48
string strT=currentTime.ToString("s");
1.15 取当前时间,格式为:2003-09-23 14:48:30Z
string strT=currentTime.ToString("u");
1.16 取当前时间,格式为:2003-09-23 14:48
string strT=currentTime.ToString("g");
1.17 取当前时间,格式为:Tue, 23 Sep 2003 14:52:40 GMT
string strT=currentTime.ToString("r");
1.18获得当前时间 n 天后的日期时间
DateTime newDay = DateTime.Now.AddDays(100);
2、Int32.Parse(变量) Int32.Parse("常量")
字符型转换 转为32位数字型
3、 变量.ToString()
字符型转换 转为字符串
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.00%
4、变量.Length 数字型
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量, str是求测的字串的变量名
5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转为比特码
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比特长度:
len = bytStr.Length;
6、System.Text.StringBuilder("")
字符串相加,(+号是不是也一样?)
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和国");
7、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2);
8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远程用户IP地址
9、穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}
10、 Session["变量"];
存取Session值;
如,赋值: Session["username"]="小布什";
取值: Object objName=Session["username"];
String strName=objName.ToString();
清空: Session.RemoveAll();
11、String str=Request.QueryString["变量"];
用超链接传送变量。
如在任一页中建超链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx页中取值:String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新建节点名");
创建XML文档新节点
13、父节点.AppendChild(子节点);
将新建的子节点加到XML文档父节点下
14、 父节点.RemoveChild(节点);
删除节点
15、Response
Response.Write("字串");
Response.Write(变量);
向页面输出。
Response.Redirect("URL地址");
跳转到URL指定的页面
16、char.IsWhiteSpce(字串变量,位数)——逻辑型
查指定位置是否空字符;
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //结果为:True, 第一个字符是0位,2是第三个字符。
17、char.IsPunctuation('字符') --逻辑型
查字符是否是标点符号
如:Response.Write(char.IsPunctuation('A')); //返回:False
18、(int)'字符'
把字符转为数字,查代码点,注意是单引号。
如:
Response.Write((int)'中'); //结果为中字的代码:20013
19、(char)代码
把数字转为字符,查代码代表的字符。
如:
Response.Write((char)22269); //返回“国”字。
20、 Trim()
清除字串前后空格
21 、字串变量.Replace("子字串","替换为")
字串替换
如:
string str="中国";
str=str.Replace("国","央"); //将国字换为央字
Response.Write(str); //输出结果为“中央”
再如:(这个非常实用)
string str="这是<script>脚本";
str=str.Replace("<","<font><</font>"); //将左尖括号替换为<font> 与 < 与 </font> (或换为<,但估计经XML存诸后,再提出仍会还原)
Response.Write(str); //显示为:“这是<script>脚本”
如果不替换,<script>将不显示,如果是一段脚本,将运行;而替换后,脚本将不运行。
这段代码的价值在于:你可以让一个文本中的所有HTML标签失效,全部显示出来,保护你的具有交互性的站点。
具体实现:将你的表单提交按钮脚本加上下面代码:
string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit。
用此方法还可以简单实现UBB代码。
22、Math.Max(i,j)
取i与j中的最大值
如 int x=Math.Max(5,10); // x将取值 10
23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法:
(1)、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); }
(2)、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.
(3)、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.
24、IndexOf() 、LastIndexOf()
查找字串中指定字符或字串首次(最后一次)出现的位置,返回索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)
25、Insert()
在字串中指定索引位插入指定字符。如:
str1.Insert(1,"字");在str1的第二个字符处插入“字”,如果str1="中国",插入后为“中字国”;
26、PadLeft()、PadRight()
在字串左(或右)加空格或指定char字符,使字串达到指定长度,如:
<%
string str1="中国人";
str1=str1.PadLeft(10,'1'); //无第二参数为加空格
Response.Write(str1); //结果为“1111111中国人” , 字串长为10
%>
27、Remove()
从指定位置开始删除指定数的字符
<%
string str1="我是萨达姆的崇拜者之一";
Response.Write(str1.Remove(5,4)); //结果为“我是萨达姆之一”
%>
把字符串转化为字节流
byte[] bwrite=Encoding.GetEncoding("GB2312").GetBytes("中国1234".ToCharArray());
MessageBox.Show(bwrite.Length.ToString());
for(int i=0;i<bwrite.Length;i++)MessageBox.Show(bwrite[i].ToString());
把字符串写入文件
FileStream fs1=new FileStream(".\\test.dll",FileMode.OpenOrCreate);
byte[] ch=Encoding.Default.GetBytes(" 我爱北京天安门!\r\n".ToCharArray());
fs1.Write(ch,0,ch.Length); fs1.Close();
把字节流转化为字符串
string str;
byte[] bStr=new byte[3]{48+7,48+8,48+9};
str=Encoding.Default.GetString(bStr);
MessageBox.Show(str);
字符串转化为其base64编码
string s="cuidexuan";
byte[] by=Encoding.Default.GetBytes(s.ToCharArray());
s=Convert.ToBase64String(by);
MessageBox.Show(s);
有关文件名的处理
string s=Path.GetTempPath();
线程
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconthreading.htm
and
ms-help://MS.VSCC/MS.MSDNVS.2052/cpsamples/html/threading.htm
选择一个目录
public class FolderBrowser : System.Windows.Forms.Design.FolderNameEditor
{
public string ShowDialog()
{
FolderBrowser fb = new FolderBrowser();
fb.Description = "请选择一个目录:";
//fb.Style=FolderNameEditor.FolderBrowserStyles.RestrictToFilesystem;
fb.ShowDialog();
string dirPath=fb.DirectoryPath;
fb.Dispose();
return dirPath;
}
}
复制目录
private int dirCopy(string dirFrom,string dirTo)
{
if(!Directory.Exists(dirFrom)) throw(new Exception(dirFrom+" not exists"));
if(Directory.Exists(dirTo)) throw(new Exception(dirTo+" exists"));
Directory.CreateDirectory(dirTo);
try
{
foreach(string f in Directory.GetFiles(dirFrom))
{
File.Copy(f,dirTo+"\\"+Path.GetFileName(f));
}
foreach(string d in Directory.GetDirectories(dirFrom))
{
dirCopy(d,dirTo+"\\"+Path.GetFileName(d));
}
return 0;
}
catch(Exception){ return -1;}
}
/// <summary>
/// 计算两个日期的时间间隔
/// </summary>
/// <param >第一个日期和时间</param>
/// <param >第二个日期和时间</param>
/// <returns></returns>
private string DateDiff(DateTime DateTime1, DateTime DateTime2)
{
string dateDiff = null;
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
dateDiff = ts.Days.ToString()+"天"
+ ts.Hours.ToString()+"小时"
+ ts.Minutes.ToString()+"分钟"
+ ts.Seconds.ToString()+"秒";
return dateDiff;
}说明:
1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点59分59秒之间的具体日期时刻。因此,你可以用DateTime值类型来描述任何在想象范围之内的时间。一个DateTime值代表了一个具体的时刻
2.TimeSpan值包含了许多属性与方法,用于访问或处理一个TimeSpan值
下面的列表涵盖了其中的一部分:
Add:与另一个TimeSpan值相加。
Days:返回用天数计算的TimeSpan值。
Duration:获取TimeSpan的绝对值。
Hours:返回用小时计算的TimeSpan值
Milliseconds:返回用毫秒计算的TimeSpan值。
Minutes:返回用分钟计算的TimeSpan值。
Negate:返回当前实例的相反数。
Seconds:返回用秒计算的TimeSpan值。
Subtract:从中减去另一个TimeSpan值。
Ticks:返回TimeSpan值的tick数。
TotalDays:返回TimeSpan值表示的天数。
TotalHours:返回TimeSpan值表示的小时数。
TotalMilliseconds:返回TimeSpan值表示的毫秒数。
TotalMinutes:返回TimeSpan值表示的分钟数。
TotalSeconds:返回TimeSpan值表示的秒数。
ASP.NET常用函数
Abs(number) 取得数值的绝对值。
Asc(String) 取得字符串表达式的第一个字符ASCII 码。
Atn(number) 取得一个角度的反正切值。
CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。
CBool(expression) 转换表达式为Boolean 型态。
CByte(expression) 转换表达式为Byte 型态。
CChar(expression) 转换表达式为字符型态。
CDate(expression) 转换表达式为Date 型态。
CDbl(expression) 转换表达式为Double 型态。
CDec(expression) 转换表达式为Decimal 型态。
CInt(expression) 转换表达式为Integer 型态。
CLng(expression) 转换表达式为Long 型态。
CObj(expression) 转换表达式为Object 型态。
CShort(expression) 转换表达式为Short 型态。
CSng(expression) 转换表达式为Single 型态。
CStr(expression) 转换表达式为String 型态。
Choose (index, choice-1[, choice-2, ... [, choice-n]]) 以索引值来选择并传回所设定的参数。
Chr(charcode) 以ASCII 码来取得字符内容。
Close(filenumberlist) 结束使用Open 开启的档案。
Cos(number) 取得一个角度的余弦值。
Ctype(expression, typename) 转换表达式的型态。
DateAdd(dateinterval, number, datetime) 对日期或时间作加减。
DateDiff(dateinterval, date1, date2) 计算两个日期或时间间的差值。
DatePart (dateinterval, date) 依接收的日期或时间参数传回年、月、日或时间。
DateSerial(year, month, day) 将接收的参数合并为一个只有日期的Date 型态的数据。
DateValue(datetime) 取得符合国别设定样式的日期值,并包含时间。
Day(datetime) 依接收的日期参数传回日。
Eof(filenumber) 当抵达一个被开启的档案结尾时会传回True。
Exp(number) 依接收的参数传回e 的次方值。
FileDateTime(pathname) 传回档案建立时的日期、时间。
FileLen(pathname) 传回档案的长度,单位是Byte。
Filter(sourcearray, match[, include[, compare]]) 搜寻字符串数组中的指定字符串,凡是数组元素中含有指定字符串,会将它们结合成新的字符串数组并传回。若是要传回不含指定字符串的数组元素,则include 参数设为False。compare 参数则是设定搜寻时是否区分大小写,此时只要给TextCompare 常数或1 即可。
Fix(number) 去掉参数的小数部分并传回。
Format(expression[, style[, firstdayofweek[, firstweekofyear]]]) 将日期、时间和数值资料转为每个国家都可以接受的格式。
FormatCurrency(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 将数值输出为金额型态。
numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
FormatDateTime(date[,namedformat]) 传回格式化的日期或时间数据。
FormatNumber(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 传回格式化
的数值数据。Numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
FormatPercent(expression[,numdigitsafterdecimal [,includeleadingdigit]]) 传回转换为百分比格式的数值数据。numdigitsafterdecimal 参数为小数字数,includeleadingdigit 参数为当整数为0 时是否补至整数字数。
GetAttr(filename) 传回档案或目录的属性值。
Hex(number) 将数值参数转换为16 进制值。
Hour(time) 传回时间的小时字段,型态是Integer。
Iif(expression, truepart, falsepart) 当表达式的传回值为True 时执行truepart 字段的程序,反之则执行falsepart 字段。
InStr([start, ]string1, string2) 搜寻string2 参数设定的字符出现在字符串的第几个字符,start 为由第几个字符开始寻找,string1 为欲搜寻的字符串,string2 为欲搜寻的字符。
Int(number) 传回小于或等于接收参数的最大整数值。
IsArray(varname) 判断一个变量是否为数组型态,若为数组则传回True,反之则为False。
IsDate(expression) 判断表达式内容是否为DateTime 型态,若是则传回True,反之则为False。
IsDbNull(expression) 判断表达式内容是否为Null,若是则传回True,反之则为False。
IsNumeric(expression) 判断表达式内容是否为数值型态,若是则传回True,反之则为False。
Join(sourcearray[, delimiter]) 将字符串数组合并唯一个字符串,delimiter 参数是设定在各个元素间加入新的字符串。
Lcase(string) 将字符串转换为小写字体。
Left(string, length) 由字符串左边开始取得length 参数设定长度的字符。
Len(string) 取得字符串的长度。
Log(number) 取得数值的自然对数。
Ltrim(string) 去掉字符串的左边空白部分。
Mid(string, start[, length]) 取出字符串中strat 参数设定的字符后length 长度的字符串,若length 参数没有设定,则取回start 以后全部的字符。
Minute(time) 取得时间内容的分部分,型态为Integer。
MkDir(path) 建立一个新的目录。
Month(date) 取得日期的月部分,型态为Integer。
MonthName(month) 依接收的月份数值取得该月份的完整写法。
Now() 取得目前的日期和时间。
Oct(number) 将数值参数转换为8 进制值。
Replace(expression, find, replace) 将字符串中find 参数指定的字符串转换为replace 参数指定的字符串。
Right(string,length) 由字符串右边开始取得length 参数设定长度的字符。
RmDir(path) 移除一个空的目录。
Rnd() 取得介于0 到1 之间的小数,如果每次都要取得不同的值,使用前需加上Randomize 叙述。
Rtrim(string) 去掉字符串的右边空白部分。
Second(time) 取得时间内容的秒部分,型态为Integer。
Sign(number) 取得数值内容是正数或负数,正数传回1,负数传回-1,0 传回0。
Sin(number) 取得一个角度的正弦值。
Space(number) 取得number 参数设定的空白字符串。
Split(expression[, delimiter]) 以delimiter 参数设定的条件字符串来将字符串分割为字符串数组。
Sqrt(number) 取得一数值得平方根。
Str(number) 将数字转为字符串后传回。
StrReverse(expression) 取得字符串内容反转后的结果。
Tan(number) 取得某个角度的正切值。
TimeOfDay() 取得目前不包含日期的时间。
Timer() 取得由0:00 到目前时间的秒数,型态为Double。
TimeSerial(hour, minute, second) 将接收的参数合并为一个只有时间Date 型态的数据。
TimaValue(time) 取得符合国别设定样式的时间值。
Today() 取得今天不包含时间的日期。
Trim(string) 去掉字符串开头和结尾的空白。
TypeName(varname) 取得变量或对象的型态。
Ubound(arrayname[, dimension]) 取得数组的最终索引值,dimension 参数是指定取得第几维度的最终索引值。
Ucase(string) 将字符串转换为大写。
Val(string) 将代表数字的字符串转换为数值型态,若字符串中含有非数字的内容则会将其去除后,合并为一数字。
Weekday(date) 取的参数中的日期是一个星期的第几天,星期天为1、星期一为2、星期二为3 依此类推。
WeekDayName(number) 依接收的参数取得星期的名称,可接收的参数为1 到7,星期天为1、星期一为2、星期二为3 依此类推。
初学编程的朋友往往喜欢收集一些很“奇妙”的编程技巧,然而,技巧的积累往往并没有提高程序质量,反而引导一些编程者一味追求奇和新,忘记了基本编程习惯的培养,不利于团队的合作,可能,这也是中国并不缺少聪明的程序员,但是缺少聪明的开发团队的一个原因吧。在ASP.NET的开发中,可以学习的技巧不少,但是,一些基本的编程习惯我们一定要养成,这样不但能根本上提高程序质量和开发效率,而且,也利于程序的阅读和团队开发。如果自己写的程序只有自己可以看懂或者只有几个人可以看懂,即使程序技巧神乎其技,对于程序的升级和维护都是致命问题。
一、 错误(以外)的处理
程序健壮性最基本要求就是程序错误的处理与捕捉,在ASP.NET中,错误的处理有和其他编程语言一样的机制,可以使用Try…Catch…Finally等方式,这一点和ASP相比具有较大的进步。而且,使用这些错误处理方法,可以大大提高程序的可读性和程序调试速度,在这几个优势结合的情况下,我们更加应该注意这一点。
关于错误的处理,我们可以参考这篇文章(英文):
http://www.123aspx.com/redir.aspx?res=28336
二、 字符串的处理
网页设计中,字符串的处理几乎是最常见的了。使用ASP.NET以后,字符串的处理比ASP的速度快,而且,在ASP.NET中,专门增加一个字符串处理类StringBulider,使用这个类可以完成一些常见的字符串操作,而最主要的,使用StringBuilder可以大大提高字符串处理速度。
在ASP.NET中,最常见的就是使用“&”来连接两个字符串:
Dim myOutputString As String = "My name is"
Dim myInputString As String = " Alex"
myOutputString = myOutputString & myInputString
Response.Write(myoutputString)
现在,我们来看看StringBuilder的使用,在使用StringBuilder的时候,我们对字符串可以做一些基本的操作,比如Append、Replace、Insert、Remove等,现在我们来看具体举例。
(1)StringBuilder中Append的使用
Append和其他语言的Append一样,就是在字符串最后增加其他字符。
Dim sb as StringBuilder = New StringBuilder()
sb.append( "<table border=''1'' width=''80%''>" )
For i = 0 To RowCount - 1
sb.Append("<tr>")
For k = 0 To ColCount - 1
sb.Append("<td>")
sb.Append( dt.Rows(i).Item(k, DataRowVersion.Current).toString())
sb.Append( "</td>" )
Next
sb.Append("<tr>")
Next
sb.Append( "</table>")
Dim strOutput as String = sb.ToString()
lblCompany.Text = strOutput
在以上的程序中,用Append方法实现了一个表格的输出,需要注意的一点是,StringBulider必须首先使用ToString()方法将其转化为String类型才可以直接输出。在以上的举例中,我们看到的全部是Append一个直接的字符串,其实,这个方法有一个很方便的功能,那就是可以直接Append其他类型的变量,比如可以直接Appemd一个Integer类型的数值,当然,我们输出以后自动转化为一个字符串:
Sub Page_Load(Source As Object, E As EventArgs)
Dim sb As System.Text.StringBuilder
Dim varother As Integer
varother=9999
sb =new System.Text.StringBuilder()
sb.append("<font color=''blue''>可以Append其他类型:</font>")
sb.append(varother)
Response.write(sb.toString())
End Sub
(2)字符串中其他方法的使用
我们还可以使用其他方法,我们来看看常见的:
Insert方法,可以在指定位置插入其他字符,使用方法:Insert(插入位置,插入字符);
Remove方法,可以在指定位置删除指定字数字符,使用方法:Remove(其实位置,字符数);
Replace方法,可以替换指定字符,使用方法:replace(被替换字符串,替换字符串)
字符串的具体介绍和使用方法可以参考以下文章(英文):
http://aspfree.com/aspnet/stringbuilder.aspx
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemTextStringBuilderClassTopic.asp
三、 数据库链接Connection和DataReader的关闭
在使用ASP编程的时候,我们就已经知道,在使用数据库连接以后,一定要将连接关闭,然后设置为NoThing。在Asp.NET中,我们仍然需要这样使用,不过,在ASP.NET中,由于使用了ADO.NET,所以,在一些相关的处理方面,实际还是有一些细微的区别,而这些区别,往往也就是我们设计的时候最需要注意的。现在,我们通过举例,来看看在常见的ADO.NET操作中,需要注意哪些问题。
(1)举例一
Dim myConnection As SqlConnection = new SqlConnection(ConfigurationSettings.AppSettings("DSN_pubs"))
Dim myCommand As SqlCommand = new SqlCommand("Select pub_id, pub_name From publishers", myConnection)
Dim myDataReader As SqlDataReader
Try
myConnection.Open()
myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
DropDownList1.DataSource = myDataReader
DropDownList1.DataBind()
Catch myException As Exception
Response.Write("An error has occurred: " & myException.ToString())
Finally
If Not myDataReader Is Nothing Then
''关闭DataReader
myDataReader.Close()
End If
End Try
在以上的举例中,我们注意到,这里只关闭了DataReader,并没有关闭Connection。为什么呢?仔细观察以上的ExecuteReader方法,原来,设置了ExecuteReader参数,当执行完ExecuteReader以后,会自动关闭Connection。所以,这样设置以后,就没有必要再手动关闭Connection了。
asp.net页面自动跳转
Response.Redirect("http://www.blogjava.net/royjohnson");
<meta http-equiv="refresh" content="5;url=../index.asp">
content="* \\选择秒数
url=*" \\ 选择要跳转的页面
这段代码是html基本代码.
最佳方案:
Server.Trans ("page")
本人代做.net毕业设计(设计附讲解,主要是讲解整个程序的设计及编码),价格从优.非诚勿扰.QQ 827816475
本人代做ASP.NET毕业设计(设计附讲解,主要是讲解整个程序的设计及编码),价格从优.非诚勿扰.QQ 827816475
本人代做ASP.NET毕业论文,价格从优.非诚勿扰.QQ 827816475
本人代做JSP毕业论文,价格从优.非诚勿扰.QQ 827816475
本人代做JSP毕业设计(设计附讲解,主要是讲解整个程序的设计及编码),价格从优.非诚勿扰.QQ 827816475
Struts框架详解
struts-config.xml Struts配置文件
ActionServlet 控制器
Action Class 包含事务逻辑
ActionForm 显示模块数据
ActionMapping 帮助控制器将请求映射到操作
ActionForward 用来指示操作转移的对象
ActionError 用来存储和回收错误
Struts标记库 可以减轻开发显示层次的工作
struts框架的优势
1.良好的架构和设计
2.可重用,模块化,扩展性好
3.Open source
struts-config.xml
Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。
FormBean部分
<struts-config>
<!-- Form Bean Definitions -->
<form-beans>
<form-bean name=“testform" type="com.cjea.test.TestForm" />
</form-beans>
全局转发部分
<!-- Global Forward Definitions -->
<global-forwards>
<forward name="failure" path="bad.jsp"/>
<forward name="success" path="/good.jsp" />
</global-forwards>
action部分
<action-mappings>
<action path=“/test/test.jsp" type=“com.cjea.test.testAction" name="testform" scope="request">
<forward name="success" path="/test/good.jsp" />
</action>
<action-mappings>
</struts-config>
ActionServlet
ActionServlet 是struts框架 MVC 实现的 controller 部分,它是这一框架的核心。
ActionServlet 创建并使用 Action、ActionForm 和 ActionForward。
ActionServlet的基本功能
截获用户的Http请求
把这个请求映射到相应的Action类。
创建一个ActionForm bean实例,将form请求放入formbean的实例中
调用Action实例的perform()方法
将ActioForm bean,Action Mapping对象,request和response对象传给Action的perform()方法
perform返回一个ActionForword对象,根据方法执行情况转到相应的jsp页面.
Action Classes
Action 类是业务逻辑的一个包装。Action 类的用途是将 HttpServletRequest 转换为业务逻辑。
ActionForm
ActionForm 维护 Web 应用程序的会话状态。
ActionForm 是一个抽象类,必须为每个输入表单模型创建该类的子类。
ActionForm的使用
假定有一个由 HTML 表单设置的 TestActionForm。Struts 框架将执行以下操作:
检查 TestActionForm是否存在;如果不存在,它将创建该类的一个实例。
Struts 将使用 HttpServletRequest 中相应的域设置 TestActionForm的状态。
Struts 框架在将 TestActionForm传递给TestAction 之前将更新它的状态。
struts-config.xml 文件控制 HTML 表单请求与 ActionForm 之间的映射关系。
可将多个请求映射到 TestActionForm 。
Struts标记库
Struts框架包括自定义标签库,它可以用 在很多方面。尽管这些库并不要求用框 架,但使用它们会有助于程序的开发。
Struts标记库
struts-bean taglib:包含在访问bean和bean属性时使用的tag,也包含一些消息显示的tag。
struts-html taglib:包含用来生成动态HTML用户界面和窗体的tag。
struts-logic taglib :包含的tag用来管理根据条件生成输出文本,和其它一些用来控制的信息。
struts-template taglib包含的tag用来定义模板机制。
Bean Taglib
用于定义新bean、访问bean及其属性的标记
在struts-bean.tld中定义了它的标记库描述器
Bean Taglib主要功能
创建和复制bean的标记
脚本变量定义标记
bean翻译标记
消息国际化标记
Bean复制标记 (<bean:define>)
可定义新bean,可复制现有bean,还可从现有bean复制属性。
定义新字符串常数
将现有的bean复制到新定义的bean对象
复制现有bean的属性来创建新的bean
<bean:define>标记属性:
Id 新定义的bean脚本变量名称,必须设置
Type 定义引入脚本变量的类
Value 为id属性定义的脚本变量分配一个新的对象
<bean:define>标记属性:
Name 目标bean的名称。若value属性没有设置,这个属性就必须设置
property Name属性定义的bean的属性名称,用来定义新的bean
Scope 源bean的作用域。若没有设置,搜索范围是从页作用域到应用程序作用域
toScope 目标bean的作用域。若没有设置,默认值是页作用域
举例
定义一个bean:
<bean:define id="test" value="this is a test"/>
源bean在页作用域中被拷贝到请求作用域中的另一个bean:
<bean:define id="targetBean" name="sourceBean"
scope="page" toScope="request"/>
脚本变量的标记
从多种资源中定义和生成脚本变量,这些资源包括cookie,请求参数,HTTP标头等等。
脚本变量的标记属性:
Id 脚本变量和要定义的页作用域 属性的名称
Name cookie/标头/参数的名称
Value 如果没有匹配的cookie或 数值,就返回这个属性指 定的默认值
脚本变量的标记属性:
multiple 如果这个属性设置了任意一个数值,所有匹配的cookie都会被积累并存储到一个Cookie[](一个数组)类型的bean里 若无设置,指定cookie的第一个值将作为Cookie类型的值
举例
<bean:cookie id="myCookie" name="userName"/>
脚本变量名称是myCookie,用来创建这个属性的cookie的名称是userName。
<bean:header id="myHeader" name="Accept-Language"/>
脚本变量名称是myHeader,请求标头的名称是Accept-Language.
举例
<bean:parameter id="myParameter" name="myParameter">
脚本变量名称是myPatameter,它保存的请求参数的名称也是myParameter
逻辑标记
Struts逻辑标签库包含的标记能够有条件地产生输出文本
在对象集合中循环从而重复地产生输出文本,以及应用程序流程控制
它也提供了一组在JSP页中处理流程控制的标记
逻辑标记封装在文件名为struts-logic.tld的标记包中
逻辑标记库的功能
条件逻辑
重复
转发/重定向响应
条件逻辑标记
第一类可以比较下列实体与一个常数的大小
第二类在计算标记体之前判断特定的项目是否存在
第三类根据模板匹配的结果检查标记体的内容
第一类条件逻辑标记
<equal> 如果常数与被定义的实体相等,返回true
<notEqual> 如果常数与被定义的实体不相等,返回true
<greaterEqual> 如果常数大于等于被定义的实体,返回true
第一类条件逻辑标记
<lessEqual> 如果常数小于等于被定义的实体,返回true
<lessThan> 如果常数小于被定义的实体,返回true
<greaterThan> 如果常数大于被定义的实体,返回true
举例
判断名为"name"的请求参数的值是否是"SomeName"。
<logic:equal parameter="name" value="SomeName">
The entered name is SomeName
</logic:equal>
举例
判断在页的作用域中是否有一个名为"bean"的bean,它有一个prop属性,这个属性的值是否大于7。
如果这个属性能够转化为数值,就进行数值比较,否则就进行字符串比较。
<logic:greaterThan name="bean" property="prop" scope="page" value="7">
The value of bean.Prop is greater than 7
</logic:greaterThan>
第二类条件逻辑标记
<logic:present>
<logic:notPresent>
第三类条件逻辑标记
<logic:match>
<logic:notMatch>
重复标记<logic:iterate>
它能够根据特定集合中元素的数目对标记体的内容进行重复的检查
集合的类型
java.util.Iterator
java.util.Collection
java.util.Map
java.util.List
数组
举例
Strlst是一个包含字符串的List,现在要将他内部的字符串全都显示在浏览器里
<logic:iterate id="element" name="strlst" indexId="index">
<%=(String)element)%>
</logic:iterate>
转发标记
<logic:forward>标记能够将响应转发给重定向到特定的全局ActionForward上
ActionForward的类型决定了是使用PageContext转发响应,还是使用sendRedirect将响应进行重定向
此标记只有一个"name"属性,用来指定全局ActionForward的名称,例如:
<logic:forward name="myGlobalForward"/>
重定向标记
<logic:redirect>标记是一个能够执行HTTP重定向的强大工具。
根据指定的不同属性,它能够通过不同的方式实现重定向。
它还允许开发人员指定重定向URL的查询参数。
HTML标记
Struts HTML标记可以大致地分为以下几个功能:
显示表单元素和输入控件
显示错误信息
显示其他HTML元素
模板标记
Struts模板标记可以大致地分为以下几个功能:
插入标记<template:insert>
放置标记<template:put>
获得标记<template:get>
Struts 初始化处理流程
根据在web.xml中配置的初始化参数,Servlet容器将决定在在容器的第一次启动,或第一次客户请求ActionServlet 的时机加载ActionServlet ,不管哪种方式加载,和其它Servlet一样,ActionServlet 的init( )方法将被调用,开始初始化过程。让我们来看看在初始化过程中将发生些什么,理解了这些,对于我们debug和扩展自己的应用更加得心应手。
1 初始化框架的内部消息绑定,这些消息用来输出提示,警告,和错误信息到日志文件中。
org.apache.struts.action.ActionResources用来获取内部消息;
2 加载web.xml中定义的不同参数,用以控制ActionServlet 的不同行为,这些参数包括 config, debug, detail, and convertNull ;
3 加载并初始化web.xml中定义的servlet 名称和servlet映射信息。通过初始化,框架的各种DTD被注册,DTD用来在下一步校验配置文件的有效性;
4、为默认应用加载并初始化Struts配置文件,配置文件即初始化参数config指定的文件。默认配置文件被解析, 产生一个ApplicationConfig对象存于ServletContext 中。可以通过关键字 org.apache.struts.action.APPLICATION 从ServletContext 中获取ApplicationConfig;
5 Struts配置文件中指定的每一个消息资源都被加载,初始化,并存在ServletContext 的合适区域(基于每个message-resources元素的key 属性),如果key 属性没有设置,则为org.apache.struts.action.MESSAGE;
6 Struts配置文件中声明的每一个数据源被加载并且初始化,如果没有配置数据源,这一步跳过;
7 加载并初始化Struts配置文件中指定的插件。每一个插件的init()方法被调用;
8 当默认应用加载完成,init()方法判断是否有应用模块需要加载,如果有,重复4—7完成应用模块的加载。
很多新手都不知道如何开始学习JSP,本人就个人学习的一些经历在这里简单得谈一下。
首先,你得对WEB应用开发感兴趣,因为兴趣是最好的老师,更是你学习前进的动力,如果只是抱这学学看的态度,本人建议不要开始学。那样既浪费了时间又浪费了精力。有了兴趣,一切就好说了,学得多快那就看你个人的能力了。
从HTML开始下手,一星期即可搞定HTML。因为开发WEB应用要求你能看懂网页代码,然后是Java语言基础,Java语言学习的时间可能要长些。等前面这两项熟悉了,就要开始学习JavaScript和CSS,当然作为后台程序员后面这两项了解即可。
再接下来就要学习一下JDBC的技术了。数据库建议先学习Mysql,然后再学习Mssql,Oracle,最后还要熟悉WEB服务器,初学者建议学习Tomcat,等这些都熟悉了。开始尝试着开发几个系统,比如信息管理系统,聊天室,论坛等。
再往后就要学习Struts,Hibernate,Spring等高级技术了。
今后我会逐步介绍以上技术,最后还会教大家开发一个基于Struts+Hibernate+Spring的实例。大家希望看到那方面的知识或有何好的建议。可以给我留言,或发表在评论里。