中显示提示信息
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<style type="text/css">
<!--
.#opstatdiv {
visibility: hidden;
background-color: #f7fcfe;
z-index: 100;
width: 200px;
height: 50px;
position: absolute;
text-align: left;
font-size: 12px;
color: #FF0000;
font-weight: bold;
vertical-align: middle;
}
-->
</style>
<script type="text/javascript">
function showOpstatView()
{
var msgStr = "提示信息";
var d_dialog = document.getElementById('opstatdiv');
d_dialog.innerHTML = msgStr;
d_dialog.style.posLeft = document.body.scrollLeft + event.clientX + 10;
d_dialog.style.posTop = document.body.scrollTop + event.clientY;
d_dialog.style.visibility='visible';
}
function opstatDivClose()
{
var d_dialog = document.getElementById('opstatdiv');
d_dialog.style.visibility='hidden';
}
</script>
</HEAD>
<BODY>
<div id="opstatdiv"></div>
<table>
<tr>
<td onmouseover="javascript:showOpstatView()" onmouseout="javascript:opstatDivClose()">>
靠近我
</td>
</tr>
</table>
</BODY>
</HTML>
C#操作Word中的表格
object oMissing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word._Application oWord;
Microsoft.Office.Interop.Word._Document oDoc;
oWord = new Microsoft.Office.Interop.Word.Application();
//显示word文档
oWord.Visible = true;
//取得word文件模板
object fileName = System.Windows.Forms.Application.StartupPath + "\\word.doc";
//根据模板生成一个新文档,相当于另存为
oDoc = oWord.Documents.Add(ref fileName, ref oMissing,
ref oMissing, ref oMissing);
//在这里操作表格中的文本
oDoc.Tables[1].Cell(1, 1).Range.Text = "cell11";
//MessageBox.Show(oDoc.Content.Paragraphs[3].Range.Text);
遇到的问题
1、开始时添加word动态链接库引用出错,在引用里面有黄色感叹号,在baidu上搜,找到原因,是因为,先安装的office,后安装的.net,默认没有安装.NET Programmability Support(.net可编程支持)。重新启动office安装程序,选修复,将.NET Programmability Support(.net可编程支持)选择安装到本机就OK了。
参考:http://hi.baidu.com/devzhao/blog/item/4248624ab27e102008f7ef2c.html
2、添加word引用的方法,在Program Files\Microsoft Office\OFFICE11中有个MSWORD.OLB文件,添加引用,就行了,还有中办法好象在com组件中找到Microsoft Word 11.0 Object Library也行。
3、操作word文档的代码参考:http://tmsoft.lsxy.com/index.php?load=read&id=334#comm_top
另外,还不知道,这样的代码对客户机配置有什么要求,office是肯定必须安装了,安装的版本有限制没,以后客户自己升级个office 2007会不会有问题????
高手看到了,麻烦告诉小弟一下,谢过!!!
vss for eclipse 显示签出状态老是无缘无故没了,还得每次到baidu上搜,这次记下来省得忘,呵呵
JPA(Java Persistence API)
JPA(Java Persistence API)作为Java EE 5.0平台标准的ORM规范,将得到所有Java EE服务器的支持。Sun这次吸取了之前EJB规范惨痛失败的经历,在充分吸收现有ORM框架的基础上,得到了一个易于使用、伸缩性强的ORM规范。
<%--
/**
*实现右键菜单功能
*/
--%>
<html>
<body oncontextmenu = showMenu('')>
<form name = "menuForm">
<!--隐藏框,用来保存选择的菜单的id值-->
<input type = "hidden" name = "id" value = "">
<table>
<tr>
<td><a href="javascript:clickMenu()" oncontextmenu = showMenu('0')>根目录</a></td>
</tr>
<tr>
<td><a href="javascript:clickMenu()" oncontextmenu = showMenu('1')>菜单一</a></td>
</tr>
<tr><td><a href="javascript:clickMenu()" oncontextmenu = showMenu('2')>菜单二</a></td></tr>
</table>
</form>
</body>
<!-- 这里用来定义需要显示的右键菜单 -->
<div id="itemMenu" style="display:none">
<table border="1" width="100%" height="100%" bgcolor="#cccccc" style="border:thin" cellspacing="0">
<tr>
<td style="cursor:default;border:outset 1;" align="center" onclick="parent.create()">
新增
</td>
</tr>
<tr>
<td style="cursor:default;border:outset 1;" align="center" onclick="parent.update();">
修改
</td>
</tr>
<tr>
<td style="cursor:default;border:outset 1;" align="center" onclick="parent.del()">
删除
</td>
</tr>
</table>
</div>
<!-- 右键菜单结束-->
</html>
<script language="JavaScript">
/**
*根据传入的id显示右键菜单
*/
function showMenu(id){
menuForm.id.value = id;
if("" == id){
popMenu(itemMenu,100,"100");
}
else{
popMenu(itemMenu,100,"111");
}
event.returnValue=false;
event.cancelBubble=true;
return false;
}
/**
*显示弹出菜单
*menuDiv:右键菜单的内容
*width:行显示的宽度
*rowControlString:行控制字符串,0表示不显示,1表示显示,如“101”,则表示第1、3行显示,第2行不显示
*/
function popMenu(menuDiv,width,rowControlString){
//创建弹出菜单
var pop=window.createPopup();
//设置弹出菜单的内容
pop.document.body.innerHTML=menuDiv.innerHTML;
var rowObjs=pop.document.body.all[0].rows;
//获得弹出菜单的行数
var rowCount=rowObjs.length;
//循环设置每行的属性
for(var i=0;i<rowObjs.length;i++){
//如果设置该行不显示,则行数减一
var hide=rowControlString.charAt(i)!='1';
if(hide){
rowCount--;
}
//设置是否显示该行
rowObjs[i].style.display=(hide)?"none":"";
//设置鼠标滑入该行时的效果
rowObjs[i].cells[0].onmouseover=function(){
this.style.background="#818181";
this.style.color="white";
}
//设置鼠标滑出该行时的效果
rowObjs[i].cells[0].onmouseout=function(){
this.style.background="#cccccc";
this.style.color="black";
}
}
//屏蔽菜单的菜单
pop.document.oncontextmenu=function() {
return false;
}
//选择右键菜单的一项后,菜单隐藏
pop.document.onclick=function(){
pop.hide();
}
//显示菜单
pop.show(event.clientX-1,event.clientY,width,rowCount*25,document.body);
return true;
}
function create(){
alert("create" + menuForm.id.value + "!");
}
function update(){
alert("update" + menuForm.id.value + "!");
}
function del(){
alert("delete" + menuForm.id.value + "!");
}
function clickMenu(){
alert("you click a menu!");
}
</script>
用上百度Hi 的朋友加我好友啊,嘿嘿i
在线等......
忙里偷闲
研究了一下webservice,做了个hello world
一点理解,xfire能把一个普通java类映射成web服务
首先要建立一个供外部调用的接口interface
然后建立一个类实现这个接口
再然后在service.xml中配置web服务的名字,名称空间,接口类名,实现接口的类名,这个service.xml文件要放在src/META-INF/xfire/services.xml
最后在web.xml中配置xfire 的servlet
OK了
===============接口HelloWorldService 类==================
package com.capinfo.xfire.pojo;
/**
* @author sing
* @explain:
* @datetime:Mar 26, 2008 4:48:19 PM
*/
public interface HelloWorldService {
public String sayHello();
}
==============接口实现类HelloWorldServiceImpl =====================
package com.capinfo.xfire.pojo;
/**
* @author sing
* @explain:
* @datetime:Mar 26, 2008 4:50:15 PM
*/
public class HelloWorldServiceImpl implements HelloWorldService {
public String sayHello() {
return "this.is.my first web service";
}
}
===============service.xml==================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorldService</name>
<namespace>http://capinfo.com/HelloWorldService</namespace>
<serviceClass>
com.capinfo.xfire.pojo.HelloWorldService
</serviceClass>
<implementationClass>
com.capinfo.xfire.pojo.HelloWorldServiceImpl
</implementationClass>
</service>
</beans>
==============web.xml=======================
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
===================Test.java========================
package com.capinfo.xfire.pojo;
import java.net.MalformedURLException;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
/**
* @author spring
* @explain:
* @datetime:Mar 26, 2008 5:50:02 PM
*/
public class Test {
public static void main(String [] args){
Service serviceModel = new ObjectServiceFactory().create(HelloWorldService.class);
try {
HelloWorldService service = (HelloWorldService)
new XFireProxyFactory().create(serviceModel, "http://localhost:8081/xfire/services/HelloWorldService");
System.out.println(service.sayHello());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
======================放jar包========================
"activation-1.1.jar"
"commons-codec-1.3.jar"
"commons-httpclient-3.0.jar"
"commons-logging-1.0.4.jar"
"jaxen-1.1-beta-9.jar"
"jdom-1.0.jar"
"mail-1.4.jar"
"spring-1.2.6.jar"
"stax-api-1.0.1.jar"
"wsdl4j-1.6.1.jar"
"wstx-asl-3.2.0.jar"
"xbean-spring-2.8.jar"
"xfire-all-1.2.6.jar"
参考资源:http://www.blogjava.net/fastzch/archive/2008/01/03/172535.html
早上打开电脑发现可以体验百度Hi了,第二个发现就是百度Hi不支持代理登录,完了,公司要代理才能上网,岂不是上不了?!郁闷,眼瞅着吧
ORA-01461: can bind a LONG value only for insert into a LONG column
原来好好的
突然报这样的错误
检查数据库驱动的版本是不是跟数据库一致,升级数据库驱动,问题没有再出现
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace psms.util
{
class Log
{
/// <summary>
/// 写日志文件
/// </summary>
/// <param name="sMsg"></param>
public static void WriteLog(string sMsg)
{
if (sMsg != "")
{
//Random randObj = new Random(DateTime.Now.Millisecond);
//int file = randObj.Next() + 1;
string filename = DateTime.Now.ToString("yyyyMM") + ".log";
try
{
FileInfo fi = new FileInfo(Application.StartupPath + "\\log\\" + filename);
if (!fi.Exists)
{
using (StreamWriter sw = fi.CreateText())
{
sw.WriteLine(DateTime.Now + "\n" + sMsg + "\n");
sw.Close();
}
}
else
{
using (StreamWriter sw = fi.AppendText())
{
sw.WriteLine(DateTime.Now + "\n" + sMsg + "\n");
sw.Close();
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
}
遇到这样一个问题
页面中有几个数据项用struts的<html:select>标签展示,今天提出新的需求,要不允许修改这几个<html:select>,那就禁用咯,这样问题发现了,这个页面是来自action,给<html:select>对应actionForm中的属性付了值,页面显示<html:select>自然就选中被赋值的选项,但是提交表单的时候,数据保存的确总是<html:select>列表中的第一个值,如果去掉禁用,就正常了。晕。
试着在onload中用js禁用也不行
在网上搜到一个这样的写法,实现readonly了 <select onbeforeactivate="return false" onfocus="this.blur()" onmouseover="this.setCapture()" onmouseout="this.releaseCapture()">
<option>1</option>
</select>
不过要用到<html:select>中要把 onbeforeactivate="return false" 去掉,<html:select>不认识这个属性,不过效果还是实现了。
今天周末,被头儿过来改bug
其中一个在hql查询的时候报org.hibernate.hql.ast.QuerySynt axException: unexpected token: ApplyInfo near line 1, column 23这样的错误,貌似看起来hibernate不认识ApplyInfo这个映射持久类,但是这个类非常确定的是已经映射了,而且在别处用的非常正常。郁闷,找啊找
在网上找org.hibernate.hql.ast.QuerySynt axException: unexpected token的错误有
1、持久类写错了,要不就是写成了数据库表名
2、hibernate3.0不支持select中嵌套查询,据说from中也不行,只支持where中嵌套查询,好像3.1支持了select中嵌套
3、sql语句中字段是用了保留关键字
然后就是我发现的这个隐蔽错误了
发现的from后的空格是一个全角的空格,半角 空格,全角 空格。距离比一样啊,原来就看出from后面的空格大了,还以为是两个空格呢。
隐蔽,太隐蔽了。
org.hibernate.hql.ast.QuerySynt axException: unexpected token: ApplyInfo near line 1, column 23 [SELECT contCount FROM ApplyInfo where applyId = (select applyId from com.capinfo.hibernate.person .pojo.AContinueInfo where id=25)]
at org.hibernate.hql.ast.ErrorCoun ter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTran slatorImpl.parse(QueryTranslatorImpl.java:244)
at org.hibernate.hql.ast.QueryTran slatorImpl.doCompile(QueryTranslatorImpl.java:155)
at org.hibernate.hql.ast.QueryTran slatorImpl.compile(QueryTranslatorImpl.java:109)
at org.hibernate.engine.query .HQLQueryPlan.<init>(HQLQueryPlan.java:75)
at org.hibernate.engine.query .HQLQueryPlan.<init>(HQLQueryPlan.java:54)
at org.hibernate.engine.query .QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
at org.hibernate.impl.AbstractSess ionImpl.getHQLQueryPlan(AbstractSessionImpl.java:134)
at org.hibernate.impl.AbstractSess ionImpl.createQuery(AbstractSessionImpl.java:113)
at org.hibernate.impl.SessionImpl .createQuery(SessionImpl.java:1602)
at com.capinfo.zgbm.print.dao .PrintQueryDAO.getContinueCount(PrintQueryDAO.java:273)
at com.capinfo.zgbm.print.action .PrintContinueCountAction .execute(PrintContinueCountAction.java:95)
at org.apache.struts.action .RequestProcessor.processAction Perform(RequestProcessor.java:484)
at org.apache.struts.action .RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action .ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action .ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet .service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet .service(HttpServlet.java:856)
at weblogic.servlet.internal .StubSecurityHelper$ServletServ iceAction.run(StubSecurityHelper.java:225)
at weblogic.servlet.internal .StubSecurityHelper.invokeServl et(StubSecurityHelper.java:127)
at weblogic.servlet.internal .ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal .TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal .FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.capinfo.util.LoginFilter .doFilter(LoginFilter.java:61)
at weblogic.servlet.internal .FilterChainImpl.doFilter(FilterChainImpl.java:42)
at com.capinfo.util.SetCharacterEn codingFilter.doFilter(SetCharacterEncodingFilter.java:67)
at weblogic.servlet.internal .FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal .WebAppServletContext$ServletIn vocationAction.run(WebAppServletContext.java:3212)
at weblogic.security.acl.internal .AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service .SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal .WebAppServletContext.securedEx ecute(WebAppServletContext.java:1983)
at weblogic.servlet.internal .WebAppServletContext.execute(WebAppServletContext.java:1890)
at weblogic.servlet.internal .ServletRequestImpl.run(ServletRequestImpl.java:1344)
at weblogic.work.ExecuteThread .execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Caused by: line 1:23: unexpected token: ApplyInfo
at org.hibernate.hql.antlr .HqlBaseParser.identPrimary(HqlBaseParser.java:4021)
at org.hibernate.hql.antlr .HqlBaseParser.primaryExpressio n(HqlBaseParser.java:861)
at org.hibernate.hql.antlr .HqlBaseParser.atom(HqlBaseParser.java:3422)
at org.hibernate.hql.antlr .HqlBaseParser.unaryExpression(HqlBaseParser.java:3200)
at org.hibernate.hql.antlr .HqlBaseParser.multiplyExpressi on(HqlBaseParser.java:3082)
at org.hibernate.hql.antlr .HqlBaseParser.additiveExpressi on(HqlBaseParser.java:2802)
at org.hibernate.hql.antlr .HqlBaseParser.concatenation(HqlBaseParser.java:570)
at org.hibernate.hql.antlr .HqlBaseParser.relationalExpres sion(HqlBaseParser.java:2586)
at org.hibernate.hql.antlr .HqlBaseParser.equalityExpressi on(HqlBaseParser.java:2449)
at org.hibernate.hql.antlr .HqlBaseParser.negatedExpressio n(HqlBaseParser.java:2413)
at org.hibernate.hql.antlr .HqlBaseParser.logicalAndExpres sion(HqlBaseParser.java:2331)
at org.hibernate.hql.antlr .HqlBaseParser.logicalOrExpress ion(HqlBaseParser.java:2296)
at org.hibernate.hql.antlr .HqlBaseParser.expression(HqlBaseParser.java:2082)
at org.hibernate.hql.antlr .HqlBaseParser.aliasedExpressio n(HqlBaseParser.java:2249)
at org.hibernate.hql.antlr .HqlBaseParser.selectedProperti esList(HqlBaseParser.java:1455)
at org.hibernate.hql.antlr .HqlBaseParser.selectClause(HqlBaseParser.java:1365)
at org.hibernate.hql.antlr .HqlBaseParser.selectFrom(HqlBaseParser.java:1106)
at org.hibernate.hql.antlr .HqlBaseParser.queryRule(HqlBaseParser.java:702)
at org.hibernate.hql.antlr .HqlBaseParser.selectStatement(HqlBaseParser.java:296)
at org.hibernate.hql.antlr .HqlBaseParser.statement(HqlBaseParser.java:159)
at org.hibernate.hql.ast.QueryTran slatorImpl.parse(QueryTranslatorImpl.java:238)
... 33 more
系统中有个功能用户点击一个按钮要调用webservice,可能会等待较长时间,如果用户不耐烦,再点按钮或点击别的功能就乱套了
想到屏蔽页面所有功能,思路是用户点击按钮,调用一个javascript方法,显示预先在页面中定义好的隐藏div,返回结果后再隐藏div,允许用户继续操作。
==========================================================
<html>
<head>
<title>半透明div</title>
<style>
.#mask {
visibility: hidden;
background-color: #cccccc;
left: 0px;
position: absolute;
top: 0px;
background-image: none;
filter: alpha(opacity : 50);
}
.#dialog {
visibility: hidden;
background-color: #f7fcfe;
z-index: 100;
width: 300px;
height: 50px;
position: absolute;
text-align: center;
font-size: 30px;
color: #FF0000;
font-weight: bold;
vertical-align: middle;
}
</style>
<script language="javaScript">
function show()
{
var d_mask=document.getElementById('mask');
var d_dialog = document.getElementById('dialog');
d_mask.style.width = document.body.clientWidth ;
d_mask.style.height=document.body.clientHeight;
//网页正文全文
//d_mask.style.width = document.body.scrollWidth ;
//d_mask.style.height=document.body.scrollHeight;
d_dialog.style.top = document.body.clientHeight / 2 - 60;
d_dialog.style.left =document.body.clientWidth / 2 -100;
d_mask.style.visibility='visible';
d_dialog.style.visibility='visible';
}
function divBlock_event_mousedown()
{
var e, obj, temp;
obj=document.getElementById('dialog');
e=window.event?window.event:e;
obj.startX=e.clientX-obj.offsetLeft;
obj.startY=e.clientY-obj.offsetTop;
document.onmousemove=document_event_mousemove;
temp=document.attachEvent?document.attachEvent('onmouseup',document_event_mouseup):document.addEventListener('mouseup',document_event_mouseup,'');
}
function document_event_mousemove(e)
{
var e, obj;
obj=document.getElementById('dialog');
e=window.event?window.event:e;
with(obj.style){
position='absolute';
left=e.clientX-obj.startX+'px';
top=e.clientY-obj.startY+'px';
}
}
function document_event_mouseup(e)
{
var temp;
document.onmousemove='';
temp=document.detachEvent?document.detachEvent('onmouseup',document_event_mouseup):document.removeEventListener('mouseup',document_event_mouseup,'');
}
window.onresize = function()
{
var d_mask=document.getElementById('mask');
var d_dialog = document.getElementById('dialog');
d_mask.style.width = document.body.clientWidth ;
d_mask.style.height=document.body.clientHeight;
}
</script>
</head>
<div id ="mask"></div>
<div id ="dialog" onmousedown="divBlock_event_mousedown()">处理中,请等待……</div>
<body>
<table border='0' width="100%" height="100%">
<tr>
<td>
测试
</td>
</tr>
<tr>
<td>
<input type="button" value="显示div" onclick="show()" />
</td>
</tr>
</table>
</body>
</html>
bea9\user_projects\domains\base_domain\servers\AdminServer\logs
2008年,元旦、春节、清明节、国际劳动节、端午节、中秋节、国庆节放假调休日期具体安排如下:
一、元旦:2007年12月30日-2008年1月1日放假,共3天。其中:1月1日(星期二)为法定节假日,12月30日(星期日)为公休日,12月29日(星期六)公休日调至12月31日(星期一),12月29日(星期六)上班。
二、春节:2月6日—12日(即农历除夕至正月初六)放假,共7天。其中,2月6日(除夕)、2月7日(春节)、2月8日(正月初二)为法定节假日,2月9日(星期六)、2月10日(星期日)照常公休,将2月2日(星期六)、2月3日(星期日)两个公休日调至2月11日(星期一)、2月12日(星期二),2月2日(星期六)、2月3日(星期日)上班。
三、清明节:4月4日—6日放假,共3天。其中:4月4日(清明节),为法定节假日,4月5日(星期六)、4月6日(星期日)照常公休。
四、“五一”国际劳动节:5月1日—3日放假,共3天。其中,5月1日为法定节假日,5月3日(星期六)为公休日,5月4日(星期日)公休日调至5月2日(星期五),5月4日(星期日)上班。
五、端午节:6月7日—9日放假,共3天。其中:6月7日(星期六)照常公休,6月8日(农历五月初五,端午节)为法定节假日,6月8日(星期日)公休日调至6月9日(星期一)。
六、中秋节:9月13日—15日放假3天。其中,9月13日(星期六)为公休日;9月14日(农历八月十五,中秋节)为法定节假日,9月14日(星期日)公休日调至9月15日(星期一)。
七、国庆节:9月29日—10月5日放假7天。其中,10月1日、2日、3日,为法定节假日,9月27日(星期六)、9月28日(星期日)两个公休日调至9月29日(星期一)、30日(星期二),9月27日(星期六)、9月28日(星期日)上班,10月4日(星期六)、5日(星期日)照常公休。
秋 23:58:43
哥也许我把你气坏了, 我从来都是这样的,妈也说过我那么多回让我改,我敢说我来北京以后脾气根在家我改了很多,每次回家我是多多少少干了一点,也有没有干的时候,我也不想说什么我干了什么和没有干什么了,没有用,我一周就回来了一次,不是天天在家闲着,要是那样我没有做也行,在家的时候我要是不想做饭了根妈说让妈做妈没有说你怎么不做饭等着吃呢,她也知道我想玩会, 我就是有点不服气,也就这么点事,本来明天回家了高兴得很, 今天我把米饭做好了, 说让你回来买点菜回来就行了,从你把面包丢给我我也看出来了,我也生气你要不就别给我,你让我拿电脑回去,我不愿意拿一是我不想拿,而是我还怕丢了,爸爸那人你又不是不知道说话就那样,你呢还非得跟他较劲,你拿回去爸爸能怎么想,他能高兴,他主要是不懂得电脑就以为坏了,其实他说的也没有错,本来你买的就没有他这个好,要是买一样的你也不能和他换,所以他也就是发泄2下,找明白人给他弄好了也就没有事了,不知道你还老抓住这个不放什么,非给他拿回去,说到我过年回来我不回来了,老师说过你不能每周都回去,也得要锻炼着自己独立,周日多出去转转,我也想了不回来也行,也省得你说我礼貌不到,因为是在家里我跟本就没有注意到也没有上心里去,说到爸把我交给你是个极大的错误, 我也说了让你不用管了,我比谁都后悔来到着,我当初也说过我宁愿在家受累也不想来这,我知道上好的话能改变自己的一生,我知道妈他们挣钱是多么的不容易,我也不能让这2万块钱白交,不管学多少我学了,我尽力了, 这点我很清楚,我在着呢也让你跟着操心,我知道,因为你是我哥,我有什么不对的地方咱都是家里人没有什么,回家的时候我看你和嫂子在厨房也不说话,我以为你们生气了,平常看你们闹那肯定什么事也没有,从周六我回来到今天我看你也不怎么高兴,今天回来也没有说话,我没有进厨房,你们俩在厨房了谁也不吱声,我也就没有进去,说了这么多也没有说到什么重点,我呢脾气就是这样僵,生气的时候什么话都能够说出来,清醒了知道自己错了,不管怎么样你是我哥,我也拿你当哥,我也会慢慢改脾气的,一下子是不能改过来的,这一快过年了我们也都希望全家都高高兴兴的过年,都是一家人,没有什么大不了的,都是亲的没有什么深仇大恨,我希望今天这页就掀过去了,惹你生气了,我也知道自己错了,明天我就回家了希望让妈他们看到我高兴的回去再来,和你们处得也融洽,不让妈担心,希望你回去以后也能够跟爸和和睦睦的,我们全家都过了好年,今年家里多了嫂子也是喜事,我呢也不说了,希望你能把今天的事忘了吧,要是能原谅妹子这次呢,就发个信息给我吧。不原谅就当我什么也没有说好吧。
当幸福来敲门 威尔-斯密斯
晚上没事,重温了《当幸福来敲门》的下半部分(上半个不知道怎么没弄没了,呵呵)
I like it
也许应该找点东西感动感动,要不然被周围的冷漠淹没了
奋斗是根本,想想自己的境况比Chris好一点,还没有落魄的在卫生间过夜,多亏了父母的肩膀啊,可也有过半夜搬家的日子,我们还没有Chris努力,所以我们也会没有Chris成功
但是我们还想成功,还想住大房子,开小车,可那不是大风刮来的
当幸福来敲门 多美的一句话
//dwr Message
function useLoadingMessage(message) {
var loadingMessage;
if (message) loadingMessage = message;
else loadingMessage = "Loading";
DWREngine.setPreHook(function() {
var disabledZone = $('disabledZone');
if (!disabledZone) {
disabledZone = document.createElement('div');
disabledZone.setAttribute('id', 'disabledZone');
disabledZone.style.position = "absolute";
disabledZone.style.zIndex = "1000";
disabledZone.style.left = "0px";
disabledZone.style.top = "0px";
disabledZone.style.width = "100%";
disabledZone.style.height = "100%";
document.body.appendChild(disabledZone);
var messageZone = document.createElement('div');
messageZone.setAttribute('id', 'messageZone');
messageZone.style.position = "absolute";
messageZone.style.top = "400px"; //定义显示加载信息层的位置
messageZone.style.left = "400px"; //定义显示加载信息层的位置
messageZone.style.width = "150"; //定义显示加载信息层的宽度
messageZone.style.height = "30"; //定义显示加载信息层的高度
messageZone.style.background = "red";//定义显示加载信息层的颜色
messageZone.style.color = "white";
messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";
messageZone.style.padding = "4px";
disabledZone.appendChild(messageZone);
var text = document.createTextNode(loadingMessage);
messageZone.appendChild(text);
}
else {
$('messageZone').innerHTML = loadingMessage;
disabledZone.style.visibility = 'visible';
}
});
DWREngine.setPostHook(function() {
$('disabledZone').style.visibility = 'hidden';
});
}
sql语句编写能力很差啊,总不用就忘啊,用了聚合函数的查询,得有group by
第一个行,第二个不行
SELECT
(select rowname from RPT_ROWCODE_SERVCORP rs where rs.rowcode = r.rowcode and tname = 'RPT_AGG_ST_SERV_01_2007') rowname,
r.rowcode,
sum(r.N01),sum(r.N02),sum(r.N03),sum(r.N04),sum(r.N05),sum(r.N06),sum(r.N07),
sum(r.N08),sum(r.N09),sum(r.N10),sum(r.N11),sum(r.N12),sum(r.N13),sum(r.N14),sum(r.N15)
FROM RPT_AGG_ST_SERV_01_2007 r
WHERE r.offino in ('0001') group by r.rowcode
order by r.rowcode
SELECT
rrs.rowcode,rrs.rowname,
sum(r.N01),sum(r.N02),sum(r.N03),sum(r.N04),sum(r.N05),sum(r.N06),sum(r.N07),
sum(r.N08),sum(r.N09),sum(r.N10),sum(r.N11),sum(r.N12),sum(r.N13),sum(r.N14),sum(r.N15)
FROM RPT_AGG_ST_SERV_01_2007 r,RPT_ROWCODE_SERVCORP rrs
WHERE rrs.rowcode = r.rowcode and rrs.tname = 'RPT_AGG_ST_SERV_01_2007' and r.offino in ('0001') group by r.rowcode
order by r.rowcode
//javascript 删除<select>中选中的选项
function AddClick(field)
{
if(field.selectedIndex != -1)
{
for (var i=0; i < field.options.length; ++i)
{
if (field.options[i].selected)
{
field.options[i] = null;
--i
}
}
}
}
function thisFormSubmit(){
var previewWindow = window.open("","colReport","resizable=yes, scrollbars=1,status=1,toolbar=0,left=100, top=70");
document.forms[0].target= "colReport"; //previewWindow.name
document.forms[0].submit();
}
公司买的报表工具,为了节省成本,将报表服务单独部署了一个应用,我们的业务系统调用报表应用展现报表,开发还算顺利,现在到了用户试用了,问题来了
其中有个功能叫报表反查,页面中包含了四个fream,用户在其中三个fream中设置查询条件,当点击查询按钮,调用javascript得到每个fream中的参数,并将参数赋值到第四个fream中的form中的隐藏属性中,然后提交这个form(这时的form是在业务系统中的jsp)调用报表服务器的action,返回报表(此时的是报表应用返回的页面,不再是业务系统中的jsp了)。
这涉及到了两个应用,再次点击查询按钮,Ie就会报“没有权限”错误。
在网上搜,一个结论,浏览器不允许javaScript跨域访问,据说为了安全,那咋办,得用啊?!
搜啊搜,找到一个文章专门讨论这事儿的,作者提出了三种解决方案:
1、在涉及到跨域访问的页面中加入
<script language="JavaScript">
<!--
document.domain = "mycompany.com"; //指定 document 所属的域
-->
</script>
这样可以蒙混过浏览器,但是这种方法必须满足一个条件,就是两个应用必须属于同一个父域,也就是,比如,abc.def.com父域就该是def.com,如果document.domain = "域名";设置的不是其父域,就会报“参数无效”的错误。
而问题是我们的报表服务器和业务系统服务器不在一个父域下,这条路是行不通了
召集了公司几个同事讨论,最后得出两个方案,一是改为弹出窗口,而是写webservice
考虑到工作量,修改要小,选择了弹出窗口。
2、是IE独有了,就是弹出showmodaldialog,这种方法因为IE升级又行不通了。
3、就是通过服务器处理了。
总结,现在看来,解决这个问题就是1和3两种方案,第一种是在客户端处理,局限就是两个应用必须在同一个父域下,还有就是好像不是所有的浏览器支持设置domain。第二种就是通过服务器处理,这种方法好像势必要刷新整个窗口,像我这种情况,一个页面中有几个fream的情况,像保留用户设置的参数,还么有想到好的解决方法。
还想到一条路就是用ajax,这倒是实现了无刷新,但是我们的报表页面展现是一个自定义的jsp标签,还是要服务器展现,这条路没走下去。
参考文章
<html>
<head>
<script type="text/javascript">
function blinklink()
{
if (!document.getElementById('message').style.color)
{
document.getElementById('message').style.color="red"
}
if (document.getElementById('message').style.color=="red")
{
document.getElementById('message').style.color="black"
}
else
{
document.getElementById('message').style.color="red"
}
timer=setTimeout("blinklink()",100)
}
function stoptimer()
{
clearTimeout(timer)
}
</script>
</head>
<body onload="blinklink()" onunload="stoptimer()">
<div id="message" >Message</div>
<div id="new_task">Message</a>
<script language="JavaScript">
<!-- Begin
function initArray() {
for (var i = 0; i < initArray.arguments.length; i++) {
this[i] = initArray.arguments[i];
}
this.length = initArray.arguments.length;
}
var colors = new initArray(
"red",
"blue",
"green",
"purple",
"black",
"tan",
"red");
delay = .5; // seconds
link = 0;
vlink = 0;
function linkDance() {
link = (link+1)%colors.length;
vlink = (vlink+1)%colors.length;
new_task.style.color = colors[link];
setTimeout("linkDance()",delay*1000);
}
function linkDance1() {
link = (link+1)%colors.length;
vlink = (vlink+1)%colors.length;
new_task1.style.color = colors[link];
setTimeout("linkDance1()",delay*1000);
}
linkDance();
// End -->
</script>
</body>
</html>
<script language="javaScript">
<!--
String.prototype.trim = function()
{
// 用正则表达式将前后空格
// 用空字符串替代。
return this.replace(/(^\s*)|(\s*$)/g, "");
}
buildTable.rows[1].cells[2].innerText.trim() == "已生成"
//-->
</script>
又到年了,google了张年的图片,贴上,添点年味,添点喜庆,祝所有~~元旦快乐
private void btnPrint_Click(object sender, EventArgs e)
{
SendKeys.Send("%{PRTSC}");
Application.DoEvents();
this.printDocument1.Print();
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
IDataObject iData = Clipboard.GetDataObject();
Image img = (Image)iData.GetData(DataFormats.Bitmap);
e.Graphics.DrawImage(img, 0, 0);
}
要回答这个问题不能一概而论,有时候使用Vector比较好;有时是ArrayList,有时候这两个都不是最好的选择。你别指望能够获得一个简单肯定答案,因为这要看你用它们干什么。下面有4个要考虑的因素:
l API
l 同步处理
l 数据增长性
l 使用模式
下面针对这4个方面进行一一探讨
API
在由Ken Arnold等编著的《Java Programming Language》(Addison-Wesley, June 2000)一书中有这样的描述,Vector类似于ArrayList.。所有从API的角度来看这两个类非常相似。但他们之间也还是有一些主要的区别的。
[b]同步性
Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
数据增长
从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度, Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
使用模式
在ArrayList 和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?
这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如, LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。
最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组 (Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。
Javascript技巧参考
事件源对象
event.srcElement.tagName
event.srcElement.type
捕获释放
event.srcElement.setCapture();
event.srcElement.releaseCapture();
事件按键
event.keyCode
event.shiftKey
event.altKey
event.ctrlKey
事件返回值
event.returnValue
鼠标位置
event.x
event.y
窗体活动元素
document.activeElement
绑定事件
document.captureEvents(Event.KEYDOWN);
访问窗体元素
document.all("txt").focus();
document.all("txt").select();
窗体命令
document.execCommand
窗体COOKIE
document.cookie
菜单事件
document.oncontextmenu
创建元素
document.createElement("SPAN");
根据鼠标获得元素:
document.elementFromPoint(event.x,event.y).tagName=="TD
document.elementFromPoint(event.x,event.y).appendChild(ms)
窗体图片
document.images[索引]
窗体事件绑定
document.onmousedown=scrollwindow;
元素
document.窗体.elements[索引]
对象绑定事件
document.all.xxx.detachEvent('onclick',a);
插件数目
navigator.plugins
取变量类型
typeof($js_libpath) == "undefined"
下拉框
下拉框.options[索引]
下拉框.options.length
查找对象
document.getElementsByName("r1");
document.getElementById(id);
定时
timer=setInterval('scrollwindow()',delay);
clearInterval(timer);
UNCODE编码
escape() ,unescape
父对象
obj.parentElement(dhtml)
obj.parentNode(dom)
交换表的行
TableID.moveRow(2,1)
替换CSS
document.all.csss.href = "a.css";
并排显示
display:inline
隐藏焦点
hidefocus=true
根据宽度换行
style="word-break:break-all"
自动刷新
<meta HTTP-EQUIV="refresh" CONTENT="8;URL=http://c98.yeah.net">
简单邮件
<a href="mailto:aaa@bbb.com?subject=ccc&body=xxxyyy">
快速转到位置
obj.scrollIntoView(true)
锚
<a name="first">
<a href="#first">anchors</a>
网页传递参数
location.search();
可编辑
obj.contenteditable=true
执行菜单命令
obj.execCommand
双字节字符
/[^\x00-\xff]/
汉字
/[\u4e00-\u9fa5]/
让英文字符串超出表格宽度自动换行
word-wrap: break-word; word-break: break-all;
透明背景
<IFRAME src="1.htm" width=300 height=180 allowtransparency></iframe>
获得style内容
obj.style.cssText
HTML标签
document.documentElement.innerHTML
第一个style标签
document.styleSheets[0]
style标签里的第一个样式
document.styleSheets[0].rules[0]
防止点击空链接时,页面往往重置到页首端。
<a href="javascript:function()">word</a>
上一网页源
asp:
request.servervariables("HTTP_REFERER")
javascript:
document.referrer
释放内存
CollectGarbage();
禁止右键
document.oncontextmenu = function() { return false;}
禁止保存
<noscript><iframe src="*.htm"></iframe></noscript>
禁 止选取<body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return false"onmouseup="document.selection.empty()>
禁止粘贴
<input type=text onpaste="return false">
地址栏图标
<link rel="Shortcut Icon" href="favicon.ico">
favicon.ico 名字最好不变16*16的16色,放虚拟目录根目录下
收藏栏图标
<link rel="Bookmark" href="favicon.ico">
查看源码
<input type=button value=查看网页源代码 onclick="window.location = 'view-source:'+ 'http://www.csdn.net/'">
关闭输入法
<input style="ime-mode:disabled">
自动全选
<input type=text name=text1 value="123" onfocus="this.select()">
ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">
文本框的默认值
<input type=text value="123" onfocus="alert(this.defaultValue)">
title换行
obj.title = "123 sdfs "
获得时间所代表的微秒
var n1 = new Date("2004-10-10".replace(/-/g, "\/")).getTime()
窗口是否关闭
win.closed
checkbox扁平
<input type=checkbox style="position: absolute; clip:rect(5px 15px 15px 5px)"><br>
获取选中内容
document.selection.createRange().duplicate().text
自动完成功能
<input type=text autocomplete=on>打开该功能
<input type=text autocomplete=off>关闭该功能
窗口最大化
<body onload="window.resizeTo(window.screen.width - 4,window.screen.height-50);window.moveTo(-4,-4)">
无关闭按钮IE
window.open("aa.htm", "meizz", "fullscreen=7");
统一编码/解码
alert(decodeURIComponent(encodeURIComponent("http://你好.com?as= hehe")))
encodeURIComponent对":"、"/"、";" 和 "?"也编码
表格行指示
<tr onmouseover="this.bgColor='#f0f0f0'" onmouseout="this.bgColor='#ffffff'">
//各种尺寸
s += "\r\n网页可见区域宽:"+ document.body.clientWidth;
s += "\r\n网页可见区域高:"+ document.body.clientHeight;
s += "\r\n网页可见区域高:"+ document.body.offsetWeight +" (包括边线的宽)";
s += "\r\n网页可见区域高:"+ document.body.offsetHeight +" (包括边线的宽)";
s += "\r\n网页正文全文宽:"+ document.body.scrollWidth;
s += "\r\n网页正文全文高:"+ document.body.scrollHeight;
s += "\r\n网页被卷去的高:"+ document.body.scrollTop;
s += "\r\n网页被卷去的左:"+ document.body.scrollLeft;
s += "\r\n网页正文部分上:"+ window.screenTop;
s += "\r\n网页正文部分左:"+ window.screenLeft;
s += "\r\n屏幕分辨率的高:"+ window.screen.height;
s += "\r\n屏幕分辨率的宽:"+ window.screen.width;
s += "\r\n屏幕可用工作区高度:"+ window.screen.availHeight;
s += "\r\n屏幕可用工作区宽度:"+ window.screen.availWidth;
//过滤数字
<input type=text onkeypress="return event.keyCode>=48&&event.keyCode<=57||(this.value.indexOf('.')<0?event.keyCode==46:false)" onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false">
//特殊用途
<input type=button value=导入收藏夹 onclick="window.external.ImportExportFavorites(true,'http://localhost');">
<input type=button value=导出收藏夹 onclick="window.external.ImportExportFavorites(false,'http://localhost');">
<input type=button value=整理收藏夹 onclick="window.external.ShowBrowserUI('OrganizeFavorites', null)">
<input type=button value=语言设置 onclick="window.external.ShowBrowserUI('LanguageDialog', null)">
<input type=button value=加入收藏夹 onclick="window.external.AddFavorite('http://www.google.com/', 'google')">
<input type=button value=加入到频道 onclick="window.external.addChannel('http://www.google.com/')">
<input type=button value=加入到频道 onclick="window.external.showBrowserUI('PrivacySettings',null)">
//不缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
//正则匹配
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
以下是例子:
利用正则表达式限制网页表单里的文本框输入内容:
用 正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
1.用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
2.用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
3.用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
//消除图像工具栏
<IMG SRC="mypicture.jpg" HEIGHT="100px" WIDTH="100px" GALLERYIMG="false">
or
<head>
<meta http-equiv="imagetoolbar" content="no">
</head>
//无提示关闭
function Close()
{
var ua=navigator.userAgent
var ie=navigator.appName=="Microsoft Internet Explorer"?true:false
if(ie)
{
var IEversion=parseFloat(ua.substring(ua.indexOf("MSIE ")+5,ua.indexOf(";",ua.indexOf("MSIE "))))
if(IEversion< 5.5)
{
var str = '<object id=noTipClose classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">'
str += '<param name="Command" value="Close"></object>';
document.body.insertAdjacentHTML("beforeEnd", str);
document.all.noTipClose.Click();
}
else
{
window.opener =null;
window.close();
}
}
else
{
window.close()
}
}
//取得控件得绝对位置(1)
<script language="javascript">
function getoffset(e)
{
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent)
{
t+=e.offsetTop;
l+=e.offsetLeft;
}
var rec = new Array(1);
rec[0] = t;
rec[1] = l;
return rec
}
</script>
//获得控件的绝对位置(2)
oRect = obj.getBoundingClientRect();
oRect.left
oRect.
//最小化,最大化,关闭
<object id=min classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=max classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=close classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" value="Close"></OBJECT>
<input type=button value=最小化 onclick=min.Click()>
<input type=button value=最大化 onclick=max.Click()>
<input type=button value=关闭 onclick=close.Click()>
//光标停在文字最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart('character',e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">
//页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使
用哪种特效,取值为1-23:
0 矩形缩小
1 矩形扩大
2 圆形缩小
3 圆形扩大
4 下到上刷新
5 上到下刷新
6 左到右刷新
7 右到左刷新
8 竖百叶窗
9 横百叶窗
10 错位横百叶窗
11 错位竖百叶窗
12 点扩散
13 左右到中间刷新
14 中间到左右刷新
15 中间到上下
16 上下到中间
17 右下到左上
18 右上到左下
19 左上到右下
20 左下到右上
21 横条
22 竖条
23
//网页是否被检索
<meta name="ROBOTS" content="属性值">
其中属性值有以下一些:
属性值为"all": 文件将被检索,且页上链接可被查询;
属性值为"none": 文件不被检索,而且不查询页上的链接;
属性值为"index": 文件将被检索;
属性值为"follow": 查询页上的链接;
属性值为"noindex": 文件不检索,但可被查询链接;
属性值为"nofollow":
//打印分页
<p style="page-break-after:always">page1</p>
<p style="page-break-after:always">page2</p>
//设置打印
<object id="factory" style="display:none" viewastext
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360"
></object>
<input type=button value=页面设置 onclick="factory.printing.PageSetup()">
<input type=button value=打印预览 onclick="factory.printing.Preview()">
<script language=javascript>
function window.onload()
{
// -- advanced features
factory.printing.SetMarginMeasure(2) // measure margins in inches
factory.printing.SetPageRange(false, 1, 3) // need pages from 1 to 3
factory.printing.printer = "HP DeskJet 870C"
factory.printing.copies = 2
factory.printing.collate = true
factory.printing.paperSize = "A4"
factory.printing.paperSource = "Manual feed"
// -- basic features
factory.printing.header = "居左显示&b居中显示&b居右显示页码,第&p页/共&P页"
factory.printing.footer = "(自定义页脚)"
factory.printing.portrait = false
factory.printing.leftMargin = 0.75
factory.printing.topMargin = 1.5
factory.printing.rightMargin = 0.75
factory.printing.bottomMargin = 1.5
}
function Print(frame) {
factory.printing.Print(true, frame) // print with prompt
}
</script>
<input type=button value="打印本页" onclick="factory.printing.Print(false)">
<input type=button value="页面设置" onclick="factory.printing.PageSetup()">
<input type=button value="打印预览" onclick="factory.printing.Preview()"><br>
<a href="http://www.meadroid.com/scriptx/docs/printdoc.htm?static" target=_blank>具体使用手册,更多信息,点这里</a>
//自带的打印预览
WebBrowser.ExecWB(1,1) 打开
Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
Web.ExecWB(4,1) 保存网页
Web.ExecWB(6,1) 打印
Web.ExecWB(7,1) 打印预览
Web.ExecWB(8,1) 打印页面设置
Web.ExecWB(10,1) 查看页面属性
Web.ExecWB(15,1) 好像是撤销,有待确认
Web.ExecWB(17,1) 全选
Web.ExecWB(22,1) 刷新
Web.ExecWB(45,1) 关闭窗体无提示
<style media=print>
.Noprint{display:none;}<!--用本样式在打印时隐藏非打印项目-->
.PageNext{page-break-after: always;}<!--控制分页-->
</style>
<object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2">
</object>
<center class="Noprint" >
<input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)>
<input type=button value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)>
<input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)>
</p>
<p> <input type=button value=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1)>
</center>
//去掉打印时的页眉页脚
<script language="JavaScript">
var HKEY_Root,HKEY_Path,HKEY_Key;
HKEY_Root="HKEY_CURRENT_USER";
HKEY_Path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
//设置网页打印的页眉页脚为空
function PageSetup_Null()
{
try
{
var Wsh=new ActiveXObject("WScript.Shell");
HKEY_Key="header";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
HKEY_Key="footer";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"");
}
catch(e){}
}
//设置网页打印的页眉页脚为默认值
function PageSetup_Default()
{
try
{
var Wsh=new ActiveXObject("WScript.Shell");
HKEY_Key="header";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&w&b页码,&p/&P");
HKEY_Key="footer";
Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"&u&b&d");
}
catch(e){}
}
</script>
<input type="button" value="清空页码" onclick=PageSetup_Null()>
<input type="button" value="恢复页码" onclick=PageSetup_Default()>
//浏览器验证
function checkBrowser()
{
this.ver=navigator.appVersion
this.dom=document.getElementById?1:0
this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom)?1:0;
this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
this.ie4=(document.all && !this.dom)?1:0;
this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
this.ns4=(document.layers && !this.dom)?1:0;
this.mac=(this.ver.indexOf('Mac') > -1) ?1:0;
this.ope=(navigator.userAgent.indexOf('Opera')>-1);
this.ie=(this.ie6 || this.ie5 || this.ie4)
this.ns=(this.ns4 || this.ns5)
this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns5 || this.ns4 || this.mac || this.ope)
this.nbw=(!this.bw)
return this;
}
//计算内容宽和高
<SCRIPT language="javascript">
function test(obj)
{
var range = obj.createTextRange();
alert("内容区宽度: " + range.boundingWidth
+ "px\r\n内容区高度: " + range.boundingHeight + "px");
}
</SCRIPT>
<BODY>
<Textarea id="txt" height="150">sdf</textarea><INPUT type="button" value="计算内容宽度" onClick="test(txt)">
</BODY>
//无模式的提示框
function modelessAlert(Msg)
{
window.showModelessDialog("javascript:alert(\""+escape(Msg)+"\");window.close();","","status:no;resizable:no;help:no;dialogHeight:height:30px;dialogHeight:40px;");
}
//屏蔽按键
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<noscript><meta http-equiv="refresh" content="0;url=about:noscript"></noscript>
<title>屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键</title>
</head>
<body>
<script language="Javascript"><!--
//屏蔽鼠标右键、Ctrl+N、Shift+F10、F11、F5刷新、退格键
//Author: meizz(梅花雨) 2002-6-18
function document.oncontextmenu(){event.returnValue=false;}//屏蔽鼠标右键
function window.onhelp(){return false} //屏蔽F1帮助
function document.onkeydown()
{
if ((window.event.altKey)&&
((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←
(window.event.keyCode==39))) //屏蔽 Alt+ 方向键 →
{
alert("不准你使用ALT+方向键前进或后退网页!");
event.returnValue=false;
}
/* 注:这还不是真正地屏蔽 Alt+ 方向键,
因为 Alt+ 方向键弹出警告框时,按住 Alt 键不放,
用鼠标点掉警告框,这种屏蔽方法就失效了。以后若
有哪位高手有真正屏蔽 Alt 键的方法,请告知。*/
if ((event.keyCode==8) || //屏蔽退格删除键
(event.keyCode==116)|| //屏蔽 F5 刷新键
(event.ctrlKey && event.keyCode==82)){ //Ctrl + R
event.keyCode=0;
event.returnValue=false;
}
if (event.keyCode==122){event.keyCode=0;event.returnValue=false;} //屏蔽F11
if (event.ctrlKey && event.keyCode==78) event.returnValue=false; //屏蔽 Ctrl+n
if (event.shiftKey && event.keyCode==121)event.returnValue=false; //屏蔽 shift+F10
if (window.event.srcElement.tagName == "A" && window.event.shiftKey)
window.event.returnValue = false; //屏蔽 shift 加鼠标左键新开一网页
if ((window.event.altKey)&&(window.event.keyCode==115)) //屏蔽Alt+F4
{
window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");
return false;
}
}
</script>
屏蔽鼠标右键、Ctrl+N、Shift+F10、Alt+F4、F11、F5刷新、退格键
</body>
</html>
//屏蔽打印
<style>
@media print{
* {display:none}
}
</style>
//移动的图层,拖动
1.<span style='position:absolute;width:200;height:200;background:red' onmousedown=MouseDown(this) onmousemove=MouseMove() onmouseup=MouseUp()>meizz</span>
<script language=javascript>
var Obj;
function MouseDown(obj)
{
Obj=obj;
Obj.setCapture();
Obj.l=event.x-Obj.style.pixelLeft;
Obj.t=event.y-Obj.style.pixelTop;
}
function MouseMove()
{
if(Obj!=null)
{
Obj.style.left = event.x-Obj.l;
Obj.style.top = event.y-Obj.t;
}
}
function MouseUp()
{
if(Obj!=null)
{
Obj.releaseCapture();
Obj=null;
}
}
</script>
2.
<div id="myDiv" src="logo.gif" ondrag="doDrag();" onmouseover="this.style.cursor='hand'" style="position:absolute;left=100;top=100;" onmousedown="doMouseDown();">
<a href="#" onclick="return false"><h1>wlecome</h1></a>
</div>
<script language="JavaScript" type="text/javascript">
var orgMouseX;
var orgMouseY;
var orgObjX;
var orgObjY;
function doDrag()
{
var myObject=document.all.myDiv;
var x=event.clientX;
var y=event.clientY;
myObject.style.left=x-(orgMouseX-orgObjX);
myObject.style.top=y-(orgMouseY-orgObjY);
}
function doMouseDown()
{
orgMouseX=event.clientX;
orgMouseY=event.clientY;
orgObjX=parseInt(document.all.myDiv.style.left);
orgObjY=parseInt(document.all.myDiv.style.top);
}
</script>
//文档状态改变
<iframe src="a.html" id="f" name="f" scrolling="no" frameborder=0 marginwidth=0 marginheight=0></iframe>
<script>
var doc=window.frames["f"].document;
function s(){
if (doc.readyState=="complete"){
document.all.f.style.height=doc.body.scrollHeight
document.all.f.style.width=doc.body.scrollWidth
}
}
doc.onreadystatechange=s
</script>
//刷新后不变的文本框
<HTML>
<HEAD>
<META NAME="save" CONTENT="history">
<STYLE>
.sHistory {behavior:url(#default#savehistory);}
</STYLE>
</HEAD>
<BODY>
<INPUT class=sHistory type=text id=oPersistInput>
</BODY>
</HTML>
//访问剪贴板
(1)拖拽访问
event.dataTransfer.setData("URL", oImage.src);
sImageURL = event.dataTransfer.getData("URL")
(2)普通访问
window.clipboardData.setData("Text",oSource.innerText);
window.clipboardData.getData("Text");
//操作COOKIE
function SetCookie(sName, sValue)
{
document.cookie = sName + "=" + escape(sValue) + "; ";
}
function GetCookie(sName)
{
var aCookie = document.cookie.split("; ");
for (var i=0; i < aCookie.length; i++)
{
var aCrumb = aCookie[i].split("=");
if (sName == aCrumb[0])
return unescape(aCrumb[1]);
}
}
function DelCookie(sName)
{
document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}
//setTimeout增加参数
<script>
var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay) {
if(typeof fRef == 'function'){
var argu = Array.prototype.slice.call(arguments,2);
var f = (function(){ fRef.apply(null, argu); });
return _st(f, mDelay);
}
return _st(fRef,mDelay);
}
function test(x){
alert(x);
}
window.setTimeout(test,1000,'fason');
</script>
//自定义的apply,call
Function.prototype.apply = function (obj, argu) {
if (obj) obj.constructor.prototype._caller = this;
var argus = new Array();
for (var i=0;i<argu.length;i++)
argus[i] = "argu[" + i + "]";
var r;
eval("r = " + (obj ? ("obj._caller(" + argus.join(",") + ");") : ("this(" + argus.join(",") + ");")));
return r;
};
Function.prototype.call = function (obj) {
var argu = new Array();
for (var i=1;i<arguments.length;i++)
argu[i-1] = arguments[i];
return this.apply(obj, argu);
};
//下载文件
function DownURL(strRemoteURL,strLocalURL)
{
try
{
var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
xmlHTTP.open("Get",strRemoteURL,false);
xmlHTTP.send();
var adodbStream=new ActiveXObject("ADODB.Stream");
adodbStream.Type=1;//1=adTypeBinary
adodbStream.Open();
adodbStream.write(xmlHTTP.responseBody);
adodbStream.SaveToFile(strLocalURL,2);
adodbStream.Close();
adodbStream=null;
xmlHTTP=null;
}
catch(e)
{
window.confirm("下载URL出错!");
}
//window.confirm("下载完成.");
}
//检验连接是否有效
function getXML(URL)
{
var xmlhttp = new ActiveXObject("microsoft.xmlhttp");
xmlhttp.Open("GET",URL, false);
try
{
xmlhttp.Send();
}
catch(e){}
finally
{
var result = xmlhttp.responseText;
if(result)
{
if(xmlhttp.Status==200)
{
return(true);
}
else
{
return(false);
}
}
else
{
return(false);
}
}
}
//POST代替FORM
<SCRIPT language="VBScript">
Function URLEncoding(vstrIn)
strReturn = ""
For i = 1 To Len(vstrIn)
ThisChr = Mid(vStrIn,i,1)
If Abs(Asc(ThisChr)) < &HFF Then
strReturn = strReturn & ThisChr
Else
innerCode = Asc(ThisChr)
If innerCode < 0 Then
innerCode = innerCode + &H10000
End If
Hight8 = (innerCode And &HFF00)\ &HFF
Low8 = innerCode And &HFF
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
End If
Next
URLEncoding = strReturn
End Function
Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
dim strA,oReq
strA = URLEncoding("submit1=Submit&text1=中文")
set oReq = CreateObject("MSXML2.XMLHTTP")
oReq.open "POST","http://ServerName/VDir/TstResult.asp",false
oReq.setRequestHeader "Content-Length",Len(strA)
oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"
oReq.send strA
msgbox bytes2BSTR(oReq.responseBody)
</SCRIPT>
//readyState是xmlhttp返回数据的进度,0=载入中,1=未初始化,2=已载入,3=运行中,4=完成
//组件是否安装
isComponentInstalled("{6B053A4B-A7EC-4D3D-4567-B8FF8A1A5739}", "componentID"))
//检查网页是否存在
function CheckURL(URL)
{
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("GET",URL, false);
try
{
xmlhttp.Send();
var result = xmlhttp.status;
}
catch(e) {return(false); }
if(result==200)
{
return true;
}
xmlhttp = null;
return false;
}
//连接数据库
<script language="javascript">
//用 JavaScript 写服务器端连接数据库的代码示例
var conn = new ActiveXObject("ADODB.Connection");
conn.Open("Provider=SQLOLEDB.1; Data Source=localhost; User ID=sa; "
+"Password=; Initial Catalog=pubs");
var rs = new ActiveXObject("ADODB.Recordset");
var sql="select * from authors";
rs.open(sql, conn);
shtml = "<table width='100%' border=1>";
shtml +="<tr bgcolor='#f4f4f4'><td>au_id</td><td>au_lname</td><td>au_fname</td><td>phone</td><td>address</td><td> city</td><td>state</td><td>zip</td></tr>";
while(!rs.EOF)
{
shtml += "<tr><td>" + rs("au_id") + "</td><td>" + rs("au_lname") + "</td><td>" + rs("au_fname") + "</td><td>" + rs("phone") + "</td><td>" + rs("address") + "</td><td>" + rs("city") + "</td><td>" + rs("state") + "</td><td>" + rs("zip") + "</td></tr>";
rs.moveNext;
}
shtml += "</table>";
document.write(shtml);
rs.close();
rs = null;
conn.close();
conn = null;
</script>
//使用数据岛
<html>
<body>
srno:<input type=text datasrc=#xmldate DataFLD=srno size="76"><BR>
times:<input type=text datasrc=#xmldate DataFLD=times size="76"><BR>
<input id="first" TYPE=button value="<< 第一条记录" onclick="xmldate.recordset.moveFirst()">
<input id="prev" TYPE=button value="<上一条记录" onclick="xmldate.recordset.movePrevious()">
<input id="next" TYPE=button value="下一条记录>" onclick="xmldate.recordset.moveNext()">
<input id="last" TYPE=button value="最后一条记录>>" onclick="xmldate.recordset.moveLast()">
<input id="Add" TYPE=button value="添加新记录" onclick="xmldate.recordset.addNew()">
<XML ID="xmldate">
<infolist>
<info ><srno>20041025-01</srno><times>null</times></info>
<info ><srno>20041101-09</srno><times>2004年10月1日2点22分0秒</times></info>
</infolist>
</XML>
</body>
</html>
//获得参数
<body>
<a href="javascript:location.href=location.href + '?a=1&b=2'">search</a>
<script language="JavaScript">
<!--
var a = location.search.substr(1);
if(a.length>0)
{
var re = /([^&]*?)\=([^&]*)/g
var s = a.match(re);
for(var i= 0;i<s.length;i++)
{
alert(s[i]);
alert(s[i].split("=")[1]);
}
}
//-->
</script>
</body>
//可编辑SELECT
<input type=text name=re_name style="width:100px;height:21px;font-size:10pt;"><span style="width:18px;border:0px solid red;"><select name="r00" style="margin-left:-100px;width:118px; background-color:#FFEEEE;" onChange="document.all.re_name.value=this.value;">
<option value="1">11111111<option>
<option value="2">222222</option>
<option value="3">333333</option>
</select>
</span>
===========ValueObject.cs============
using System;
using System.Collections.Generic;
using System.Text;
namespace psms.util
{
class ValueObject
{
private string value;
private string text;
public ValueObject(string v, string t)
{
this.value = v;
this.text = t;
}
public string Value
{
get { return this.value;}
}
public string Text
{
get { return this.text; }
}
}
}
===============绑定数据===============
this.combIn_Acc.Items.Add(new util.ValueObject("", ""));
this.combIn_Acc.Items.Add(new util.ValueObject("0","未做帐"));
this.combIn_Acc.Items.Add(new util.ValueObject("1", "已做帐"));
this.combIn_Acc.ValueMember = "value";
this.combIn_Acc.DisplayMember = "text";
this.combIn_Acc.SelectedIndex = 0;
================取值==================
if (this.combIn_Acc.SelectedIndex >= 0)
{
if (((util.ValueObject)this.combIn_Acc.SelectedItem).Value.ToString() != "")
{
condition.Append(" and in_acc = ").Append(((util.ValueObject)this.combIn_Acc.SelectedItem).Value.ToString()).Append(" ");
}
}
不知道为什么this.combIn_Acc.SelectedValue总是报空指针异常,想不明白,换了上面的取值方法终于可行了
conn = getConnection();
conn.setAutoCommit(false);
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement("INSERT INTO user(id,name) VALUES(?, ?)");
for (int i = 0; i < 10000; i++) {
ps.setInt(1,i);
ps.setString(2,"name_"+String.valueOf(i));
ps.addBatch();
//ps.clearParameters(); 这句话报空指针异常,不知为什么
}
ps.executeBatch();
conn.commit();
数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……
方法一
declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
方法二
有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
1、对于第一种重复,比较容易解决,使用
select distinct * from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)
我同时打开了多个文件,我编辑哪个文件,在解决方案管理器中就选中哪个文件
我记得可以的,忘了在哪设了
原来在这 ,呵呵
DECLARE @T_SQL varchar(8000)
set @T_SQL=''
select @T_SQL=@T_SQL + name +'=ltrim(rtrim('+ name + ')),' from syscolumns where id=object_id('vipinfo') and name <> 'id'
set @T_SQL = 'update vipinfo set ' + left(@T_SQL,len(@T_SQL)-1)
exec (@T_SQL)
#region 执行查询语句返回影响行数
public static int ExecuteNonQuery(string str_cmd,out string str_error)
{
int i=0;
str_error=string.Empty;
SqlConnection conn=CreateConn();
SqlCommand cmd=new SqlCommand(str_cmd,conn);
try
{
conn.Open();
i=cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
str_error=ex.Message;
}
finally
{
conn.Close();
}
return i;
}
#endregion
#region 返回第一行第一列
public static string ExecuteScalar(string str_cmd,out string str_error)
{
string str_value=string.Empty;
str_error=string.Empty;
SqlConnection conn=CreateConn();
SqlCommand cmd=new SqlCommand(str_cmd,conn);
try
{
conn.Open();
str_value=cmd.ExecuteScalar().ToString();
}
catch(Exception ex)
{
str_error=ex.Message;
}
finally
{
conn.Close();
}
return str_value;
}
#endregion
#region 返回datatbale from datareader
public static DataTable ExecuteReader(string str_cmd,out string str_error)
{
DataTable dt=new DataTable();
SqlDataReader dr=null;
str_error=string.Empty;
SqlConnection conn=CreateConn();
SqlCommand cmd=new SqlCommand(str_cmd,conn);
try
{
conn.Open();
dr=cmd.ExecuteReader();
dt=DataReaderToTable(dr);
}
catch(Exception ex)
{
str_error=ex.Message;
}
finally
{
conn.Close();
}
return dt;
}
#region 循环SqlDataReader填入Table
private static DataTable DataReaderToTable(SqlDataReader dr)
{
DataTable dt=new DataTable();
int count=dr.FieldCount;
int index=1;
if(count>0)
{
for(int i=0;i<count;i++)
{
dt.Columns.Add(dr.GetName(i),dr.GetFieldType(i));
}
dt.Columns.Add("id");//编号
dt.BeginLoadData();
while(dr.Read())
{
object[] objectRow=new object[count+1];
for(int i=0;i<count;i++)
{
objectRow[i]=dr[dr.GetName(i)];
}
objectRow[count]=index;//编号
dt.LoadDataRow(objectRow,true);
index++;
}
dt.EndLoadData();
}
return dt;
}
#endregion
public static SqlConnection CreateConn()
{
//string str_conn="server=.;database=bidding;user id=sa;pwd=jhc;";
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnStr"]);
return conn;
}
C# 中的“事件”是当对象满足一定条件,发生某些事情时,类向该类的客户提供通知的一种方法。使用事件,拥有该事件的对象不必知道需要通知谁,一旦满足了某个条件,将自动调用该事件,正确通知每个需要通知的对象。通过使用事件,提高了程序的模块化程度。
要在程序中使用自定义事件,需按以下步骤进行:
1、声明事件
要在类内声明事件,首先必须声明该事件的委托类型:
public delegate void SelectionChangedEventHandler(object sender,
SelectionChangedEventArgs e);
说明:由于本示例程序需在事件中传递数据,因此定义了EventArgs的派生类SelectionChangedEventArgs。
public class SelectionChangedEventArgs : EventArgs
{
private string m_selection;
//本属性用于传递事件数据
public string Selection
{
get { return m_selection; }
}
public SelectionChangedEventArgs(string selection)
{
m_selection = selection;
}
}
委托类型定义传递给处理该事件的方法的一组参数。多个事件可共享相同的委托类型,因此仅当尚未声明任何合适的委托类型时才需要执行该步骤。
接下来,声明事件本身:
public event SelectionChangedEventHandler SelectionChanged;
2、调用事件
如果没有任何客户将委托与该事件挂钩,该字段将为空;否则该字段引用应在调用该事件时调用的委托。因此,调用事件时通常先检查是否为空,然后再调用事件。
public class Form2 : System.Windows.Forms.Form
{
... ...
public event SelectionChangedEventHandler SelectionChanged;
... ...
private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
if (SelectionChanged != null)
{
SelectionChangedEventArgs E = new SelectionChangedEventArgs(comboBox1.Text);
SelectionChanged(this, E);
}
}
}
3、与事件挂钩
为了开始接收事件调用,客户代码先创建事件类型的委托,该委托引用应从事件调用的方法。然后它使用 += 将该委托写到事件可能连接到的其他任何委托上。
public class Form1 : System.Windows.Forms.Form
{
... ...
private Form2 m_frm2;
... ...
public Form1()
{
... ...
m_frm2 = new Form2();
//与事件挂钩
m_frm2.SelectionChanged += new SelectionChangedEventHandler(frm2_SelectionChanged);
}
... ...
private void button1_Click(object sender, System.EventArgs e)
{
m_frm2.ShowDialog();
}
private void frm2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//获取事件传递过来的数据
textBox1.Text = e.Selection;
}
}
错误 1 “GenerateResource”任务意外失败。
System.Reflection.ReflectionTypeLoadException: 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。
在 Microsoft.Build.Shared.ExceptionHandling.RethrowUnlessFileIO(Exception e)
在 Microsoft.Build.Tasks.GenerateResource.NeedSeparateAppDomain()
在 Microsoft.Build.Tasks.GenerateResource.Execute()
在 Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask(ExecutionMode howToExecuteTask, Hashtable projectItemsAvailableToTask, BuildPropertyGroup projectPropertiesAvailableToTask, Boolean& taskClassWasFound)
vs.net 2005保存时报这样的错误,之前所作的是更改了窗体的背景图片,不知所云,关了vs.net 2005,重新打开又好了,莫名其妙,啥子原因?
偷来的知识 嘿嘿
document.getElementById("apple") 以ID来访问对象,且一个ID在页面中必须是唯一的
document.getElementsByTagName("div")[0] 以标签名来访问对象
1.setAttribute(string name, string value):增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。
设置对象的属性则应该采用:
document.getElementById("apple").setAttribute("width","100")
document.getElementsByTagName("div")[0].setAttribute("width","100")
访问对象的属性则采用:
document.getElementById("apple").getAttribute("width")
document.getElementsByTagName("div")[0].getAttribute("width")
我们经常需要在JavaScript中给Element动态添加各种属性,这可以通过使用setAttribute()来实现,这就涉及到了浏览器的兼容性问题。
var bar = document.getElementById("foo");
bar.setAttribute("onclick", "javascript:alert('This is a test!');");
这里利用setAttribute指定e的onclick属性,简单,很好理解。但是IE不支持,IE并不是不支持setAttribute这个函数,
而是不支持用setAttribute设置某些属性,例如对象属性、集合属性、事件属性,也就是说用setAttribute设置style和onclick这些属性
在IE中是行不通的。为达到兼容各种浏览器的效果,可以用点符号法来设置Element的对象属性、集合属性和事件属性。
document.getElementById("foo").className = "fruit";
document.getElementById("foo").style.cssText = "color: #00f;";
document.getElementById("foo").style.color = "#00f";
document.getElementById("foo").onclick= function () { alert("This is a test!"); }
2、关于class和className
class属性在W3C DOM中扮演着很重要的角色,但由于浏览器差异性仍然存在。使用setAttribute("class", vName)语句动态设置
Element的class属性在firefox中是行的通的,在IE中却不行。因为使用IE内核的浏览器不认识"class",要改用"className";
同样,firefox 也不认识"className"。所以常用的方法是二者兼备:
element.setAttribute("class", vName);
element.setAttribute("className", vName); //for IE
关于IE下TABLE无法插入新行的问题
IE下TABLE无论是用innerHTML还是appendChild插入<tr>都没有效果,而其他浏览器却显示正常。解决他的方法是,将<tr>加到TABLE的<tbody>元素中,如下面所示:
var row = document.createElement("tr");
var cell = document.createElement("td");
var cell_text = document.createTextNode("香蕉不吃苹果");
cell.appendChild(cell_text);
row.appendChild(cell);
document.getElementsByTagName("tbody")[0].appendChild(row);
window.event
IE:有window.event对象
FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event)
鼠标当前坐标
IE:event.x和event.y。
FF:event.pageX和event.pageY。
通用:两者都有event.clientX和event.clientY属性。
鼠标当前坐标(加上滚动条滚过的距离)
IE:event.offsetX和event.offsetY。
FF:event.layerX和event.layerY。
标签的x和y的坐标位置:style.posLeft 和 style.posTop
IE:有。
FF:没有。
通用:object.offsetLeft 和 object.offsetTop。
窗体的高度和宽度
IE:document.body.offsetWidth和document.body.offsetHeight。注意:此时页面一定要有body标签。
FF:window.innerWidth和window.innerHegiht,以及document.documentElement.clientWidth和document.documentElement.clientHeight。
通用:document.body.clientWidth和document.body.clientHeight。
添加事件
IE:element.attachEvent("onclick", func);。
FF:element.addEventListener("click", func, true)。
通用:element.onclick=func。虽然都可以使用onclick事件,但是onclick和上面两种方法的效果是不一样的, onclick只有执行一个过程,而attachEvent和addEventListener执行的是一个过程列表,也就是多个过程。例如: element.attachEvent("onclick", func1);element.attachEvent("onclick", func2)这样func1和func2都会被执行。
标签的自定义属性
IE:如果给标签div1定义了一个属性value,可以div1.value和div1["value"]取得该值。
FF:不能用div1.value和div1["value"]取。
通用:div1.getAttribute("value")。
父节点、子节点和删除节点
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。
CSS:透明
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。
设置CSS 的STYLE
document.getElementById('look').style.cssText="display:none;";//通用
document.getElementById('look').setAttribute("style","display:none;");//firefox
哈哈 ,周五的晚上,明天周末,有些松懈
这是今天晚上唯一的成果
执行SqlTranaction成功了
下面的错误不是执行事务的关系
见到 “将截断字符串或二进制数据。\r\n语句已终止。”的错误信息开始有些不知所措,在网上查,原来是超了数据库字段长度所致,调整数据库字段长度,果然如此。
好长时间不用vs.net刚开始都不知道怎么查看运行中变量的信息,突然想起来在 即时窗口中 输入 “ ? 变量名” 然后回车,会输出当前这个变量的值
哈哈 ,还是有点印象的嘛。
? ex
{"将截断字符串或二进制数据。\r\n语句已终止。"}
[System.Data.SqlClient.SqlException]: {"将截断字符串或二进制数据。\r\n语句已终止。"}
Data: {System.Collections.ListDictionaryInternal}
HelpLink: null
InnerException: null
Message: "将截断字符串或二进制数据。\r\n语句已终止。"
Source: ".Net SqlClient Data Provider"
StackTrace: " 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)\r\n 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)\r\n 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)\r\n 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)\r\n 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)\r\n 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)\r\n 在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQu
ery(DbAsyncResult result, String methodName, Boolean sendToPipe)\r\n 在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()\r\n 在 psms.DBUtility.SqlHelper.ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, String cmdText, SqlParameter[] commandParameters) 位置 D:\\network\\psms\\DBUtility\\SQLHelper.cs:行号 91\r\n 在 psms.SQLServerDAL.InTable.insertInTable(InTableInfo data) 位置 D:\\network\\psms\\SQLServerDAL\\InTable.cs:行号 152"
TargetSite: {Void OnError(System.Data.SqlClient.SqlException, Boolean)}
Oracle insert大字符串方法
try {
conn = getConnection();
pstmt = conn
.prepareStatement("Insert into offidutychk(decno,offino,checkdate,checkcontent) "+
"Values(seq_decno.nextval, ?,?,?)");
pstmt.setString(1, hezhi.getOffino());
pstmt.setDate(2, hezhi.getCheckDate());
pstmt.setCharacterStream(3,
new InputStreamReader(new ByteArrayInputStream(hezhi.getCheckContent().getBytes())), hezhi.getCheckContent().length());
//pstmt.setString(3, hezhi.getCheckContent());
// 判断插入操作是否成功
if (pstmt.executeUpdate() == 1)
succ = true;
else
succ = false;
} catch (Exception e) {
succ = false;
e.printStackTrace();
} finally {
try {
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
closeConnection(conn);
}
Oracle update大字符串方法
Connection conn = null;
PreparedStatement pstmt = null;
int length=hezhi.getCheckContent().length();
String s1="";
String s2="";
if(length>1000){
s1=hezhi.getCheckContent().substring(0,1000);
s2=hezhi.getCheckContent().substring(1000,length);
}else{
s1=hezhi.getCheckContent();
}
try {
conn = getConnection();
pstmt = conn
.prepareStatement("update offidutychk set checkdate=?,checkcontent=?||? "+
"where decno=?");
pstmt.setDate(1, hezhi.getCheckDate());
// pstmt.setCharacterStream(2,
// new InputStreamReader(new ByteArrayInputStream(hezhi.getCheckContent().getBytes())), hezhi.getCheckContent().length());
// //pstmt.setString(2, hezhi.getCheckContent());
pstmt.setString(2, s1);
pstmt.setString(3, s2);
pstmt.setInt(4, hezhi.getDecno());
// 判断更新操作是否成功
if (pstmt.executeUpdate() == 1)
succ = true;
else
succ = false;
} catch (Exception e) {
succ = false;
e.printStackTrace();
} finally {
try {
pstmt.close();
} catch (Exception e) {
e.printStackTrace();
}
closeConnection(conn);
}
扔了一年多的C#因为要做个东西,又拾起来了,跟原来不同的是现在用vs.2005了,用2003的时候就时刻关注着2005的发布,现在用2005了,好像又要出什么2008了,唉...跟不上脚步啊
记录一个小问题吧,在绑定ComboBox的时候想动态改变选定的值
原以为 comboBox.SelectItem = "":就行了
不灵,遂在网上查,原来要这么写
this.cob.SelectedItem = this.cob.Items[this.cob.FindString(" 选定的值")];
这大圈绕的......
记下来,以备后患 呵呵
接着干活.......
ERROR (StandardManager.java:638) - Exception loading sessions from persistent storage
ERROR (StandardManager.java:372) - IOException while loading persisted sessions: java.io.EOFException
启动Tomcat报错
网上搜,说因为tomcat上次没有正常关闭,EOFException表示输入过程中意外地到达文件尾或流尾的信号,导致从session中获取数据失败。把 work\Catalina\localhost\应用名\sessions.ser文件删除,OK
在apache-tomcat-5.5.17使用Struts Tag会抛出Failer to load or instantiate TagExtraInfo class:org.apache.struts.taglib.bean.CookieTei的异常
解决方法:删除WEB_INF/lib/javax.servlet.jsp.jar。(jsp jar包会引起冲突)
好久没写日志了,今天饶有兴趣上来baidu,发现登录不了,我用的是傲游,转到Ie还是登录不了,而换到FireFox就很顺利地打开了,我晕
还发现google帐户也不能访问,再晕,难道我的Ie坏了?中毒了?只能这么想,也不能baidu和google把Ie给封了啊,呵呵,问题查找中
今天来了兴趣,装了个eclipse的汉化包和 vss for eclipse的插件
开始不知为何老加载不上,在网上查把configuration文件夹删了,让eclipse重建,好,删,Shift+Delete,按下回车的那一刻后悔了,这要是不行就完蛋了,果不其然,eclipse起不来了,我晕
将eclipse文件夹重新覆盖
打开发现不是MyEclipse原来的字体了,用习惯了看着别扭
在字体中找啊找,看着哪个也不像,索性打开Myeclipse找到里面的字体原来是,Courier New
在eclipse中设置字体
对于局域网内的朋友共享设置一直都比较麻烦的事情,关闭共享,又不知道如何为更安全的关闭,开启共享更担心共享安全性问题,这个小工具 方便大家的共享设置.
内附上设置原理,有兴趣的朋友也可以手动设置
关闭局域网共享
开通局域网共享(访问本机无需验证即可进入)
开通局域网共享(访问本机需填用户名及密码)
局域网互访第一关卡:
系统默认:利用IPC$通道可以建立空连接,匿名枚举出该机有多少帐户.显然有一定的安全隐患黑客可以利用扫描器,找到开放IPC$共享的电脑,匿名枚举出该机的所有用户帐号,如果用户的帐号不设密码,则容易被入侵.
建议禁止空连接.这样即使用户不设密码,上网也不会有多大的风险.但会影响到局域网互访.
局域网互访第二关卡:
本地安全策略-安全选项-帐户:使用空白密码的本地帐户只允许进行控制台登录.系统默认值是:已启用.说明:很多人的帐户并没有加密码.这样,当局域网中 别的电脑访问本机时,会弹出错误提示:登录失败:用户帐户限制......这是XP系统的一条安全策略造成的,防止别人趁你空密码时进入你的电脑.如果您 的电脑是家用的,没必要设密码,那就应把它设为:已停用.
局域网互访第三关卡:
控制面板-防火墙-例外-文件和打印机共享系统默认:不选.说明:所有的策略都设置好了,局域网依然不能访问,提示:您没有权限使用网络资源,找不到网络路径!这是因为XP还有一道关卡,就是防火墙,必须要经过防火墙的允许才行.
知识普及:
IPC$入侵是黑客惯用的手段.IPC$漏洞不能穿越路由器,所以用路由器上网的用户不必担心开放了局域网共享会有什么隐患.但要注意:路由器会被人扫描并窃取保存在里面的ADSL帐号密码.所以也不要大意,赶快把路由器默认的用户名和密码改掉.
下载地址
//**读取properties配置文件的类
import java.util.*;
import java.io.*;
public final class ParseProperties {
private static Properties properties = null;
private ParseProperties() {
}
public static String getProperties(String propStr){
if(properties==null){
try{
InputStream is=ParseProperties.class.getClassLoader().getResourceAsStream("runqianServ.properties");
properties = new Properties();
properties.load(is);
is.close();
}catch(Exception e){
e.printStackTrace();
}
}
return properties.getProperty(propStr);
}
public static void main(String[] args) {
String driver=ParseProperties.getProperties("runqianServ");
System.out.println(driver);
}
}
在apache-tomcat-5.5.17使用Struts Tag会抛出Failer to load or instantiate TagExtraInfo class:org.apache.struts.taglib.bean.CookieTei的异常。(这只是bean标签,其它标签异常略)
解决方法:删除WEB_INF/lib/javax.servlet.jsp.jar。(jsp jar包会引起冲突)
对于javascript框架一直再用DWR,昨天听人说了个JQuery,不知道什么东西,在网上一查,也是个javascript框架,看论坛上的帖子好像功能还挺强大,落伍喽,就知道个DWR
这不这两天就在折腾这东西,今天终于看到效果了
下面是用DWR动态向table中添加行,并且设定行的css属性,比较爽,呵呵
function returnQueryRpt(list){
var cellfuncs = [
function(data){return data[1];},
function(data){
var id = data[0];
var rqname = data[2];
return "<a href=\"javascript:printReport('" + rqname + "','" + id + "')\"><img src=\"<%=path%>/images/pic_edit.gif\" alt=\"填报或修改\" width=\"16\" height=\"16\" border=\"0\"></a>";
}
];
DWRUtil.removeAllRows('addRowsBasic');
DWRUtil.addRows('addRowsBasic',list,cellfuncs,{
rowCreator:function(options) {
var row = document.createElement("tr");
row.setAttribute("id",options.rowData.id);
return row;
},
cellCreator:function(options) {
var td = document.createElement("td");
td.style.color = "#003366";
if(options.rowIndex%2==0){
td.style.backgroundColor = "#F5f5f5";
}else{
td.style.backgroundColor = "#E6EEF7";
}
return td;
}
});
}
****************************************************************************************************************
2008-01-15补充
今天更新成了dwr2.0.2
有以下改动
1、首先启动报错
- Marking servlet dwr-invoker as unavailable
- Error loading WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@9fdee
uk.ltd.getahead.dwr.DWRServlet
java.lang.ClassNotFoundException: uk.ltd.getahead.dwr.DWRServlet
dwr官方网站有如下解释
The DWR package has changed from uk.ltd.getahead to org.directwebremoting. There are deprecated stubs in place for backwards compatibility, however more future proof code will use the new package names. The change that will affect most people is the altered servlet name. The preferred name is now: org.directwebremoting.servlet.DwrServlet
改成<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>就OK了
2、上面的例子如果直接升级到2.0会直接出来html代码
要加上下面这句
dwr.util._escapeHtml = false;
如果为true,就直接 出来html代码
3、 DWRUtil 改成了 dwr.util
看看与上次写东西的时间跨度,好家伙,整整三个月了,这三个月都极少上网了,极少登录了,最主要的原因是公司把外网给断了,没有明确的理由,就这样,网络离我远了很多,毕竟一天里大多的时间是在公司嘛
这三个月,经过了很多事情,最大的一件是我结婚了,哈哈,想想,之前和之后,也没什么变化嘛,还是在路上、干活、 吃喝拉撒睡,大家听说我结婚了都很吃惊,这就是效率,呵呵!大家祝福我吧,嘻嘻!
说现在为啥能上了呢,哈哈,不知哪位高人偷偷“挖了个隧道”偷偷上网,哈哈,咱也偷偷沾个光,希望这地下工作能长久维持啊!
工作方面,感觉老摆弄那些死沉滥调的代码也没什么意思,想学点新东西
在研究struts2,呵呵
抽象类和接口的区别
1、一个类可以实现任意多个接口,但它最多且只能作为一个抽象类的子类。
2、一个抽象类可以含有若干个非抽象方法,而接口的所有方法,无论是否显示的声明为抽象的,都是抽象的。
3、一个抽象类可以声明实例变量,其子类可以继承这些实例变量,而接口不能声明实例变量,不过接口可以声明static final修饰的域。
4、一个抽象类可以声明构造方法,而抽象类不能。
5、一个抽象类的可见类修饰符可以是public\protected\private或者无修饰符(表示包内可见),而接口的可见性修饰符只能是public,或者无修饰符。
6、一个抽象类的抽象方法(非抽象方法还可以是private,当然是不能被继承)可见性修饰符可以是public\protected或者无修饰符(表示包内可见),而一个接口的方法只能是public。
7、一个抽象类是从Object类派生来的,它继承了Object类的clone()和eauals()方法。
共同点
1、都不能被实例化
2、子类必须实现抽象类或接口中的全部抽象方法
http://www.sina.com.cn 2007年07月23日 02:40 中国证券网-上海证券报
基金下半年投资策略
●我们判断下半年市场将宽幅震荡,投资基金注意两点:一是必须调整投资基金的收益与风险预期,降低基金的收益预期,提高基金投资的风险意识。二是基金在平衡和下跌的市场有其固有的优势,包括资金优势、选股的优势等等,这些优势保证了基金战胜市场的可能性更大。下半年完全靠资金推动市场的可能性不大,市场的主要驱动因素将回归到业绩与增长。基于这样的判断,基金下半年面临的系统性机会将较前期减少,但结构性机会将被进一步强化。就是要加强投资的风险意识,适当控制基金和股票的投资比例;在基金和股票的品种选择上,可以加大基金的投资占比,下半年的市场环境决定了做股民不如做基民。
●下半年重点配置的基金品种主要是封闭式基金和股票型基金。下半年基金仍将维持上半年一、二季度的收益排序顺序:封闭式基金―――股票型基金―――混合型基金―――保本型基金―――债券型基金。结合市场分析和基金选取的业绩与辅助性因素,我们推出下半年的基金“十金”:嘉实服务增值行业、华夏大盘精选、博时主题行业、上投摩根中国优势、易方达深证100ETF、建信优选成长、华夏上证50ETF、基金泰和( 2.711,0.09,3.28%)、基金安顺( 2.159,0.08,3.70%)、基金科汇( 3.268,0.07,2.28%)。⊙中信建投 黄常忠
下半年基金运行的市场环境分析
下半年我们对市场的总体判断是:股指可能在宽幅震荡中运行,市场存在的主要是结构性机会。影响或者说推动市场的诸多因素将发生局部变化,市场的流动性过剩虽不会得到完全的控制,但货币与财政政策的连续调控将会使这一问题得到缓解,下半年完全靠资金推动市场的可能性不大,市场的主要驱动因素将回归到业绩与增长。基于这样的判断,基金下半年面临的系统性机会将较前期减少,但结构性机会将被进一步强化,主要理由如下:
1、基金的价值投资有望成为市场主流
下半年市场将回归业绩驱动,宏观经济与上市公司业绩的高速增长将成为市场的主要驱动因素。国家统计局数据:1-5月份,全国规模以上工业企业实现利润9026亿元,比上年同期增长42.1%,宏观经济和微观经济主体依然良好。从对上市公司业绩增长的预期看,很多券商的下半年策略报告认为,7月开始公布的中期业绩增速约为50%-60%,2007年全年的盈利增长预期为40%-45%,2008年全年的盈利增长预期为25%。
从具体的财务指标看,上市公司的赢利状况也明显改善,2005 年后企业营运效率的改善显著,且处于上升期;企业经营性现金流改善程度显著,募集的资金数倍于以往,企业内在的扩张冲动较大;息税前利润显著高于贷款利率,企业举债经营有较好的杠杆收益,微观领域对加息不敏感。规模的扩张和良好的营运效率,导致盈利的显著改善,至少一两年内看不到逆转的迹象。
市场发生的结构性转变对于基金净值的影响非常明显,随着市场对于价值投资理念在5 、6月份的回归,基金在业绩上所体现出来的优势也越来越明显。在5 月份所经历的两次大的跌幅中,以基金重仓股为代表的大盘蓝筹板块成为最具抗跌性的品种,特别是在5 月底所经历的市场大幅回落中,大盘蓝筹板块所体现出的成长性和价值安全性有力的推动了基金业绩的相对提升,这一时期,主动投资的股票方向基金表现得相对强势,二季度,股票―――股票型基金净值上涨35.01%,股票―――指数型基金净值上涨32.73%,混合―――偏股型基金净值上涨33.16%,混合―――平衡型基金净值上涨33.16%。无论是从基金与市场指数的对比,还是从主动投资的股票方向基金与指数型基金的对比中,都充分展现了在市场震荡加剧的环境中,基金价值投资和分散风险所具备的优势。
2、基金的资金优势将更加明显
判断下半年市场的宽幅震荡走势以及市场由资金推动回归到价值推动的一个很重要的因素就是资金供求和资金结构的变化。
基金等机构资金的优势将更加凸现。存量方面,股票方向基金资产净值在6月末已经达16711.20亿元,占沪深A股流通市值的31%左右。增量方面,伴随市场震荡的风险教育,股民开户数开始减少,很多理性投资者开始投向基金,调查显示,5月以来,市场的震荡下跌,基金并没有出现大规模的集中赎回,基金整体还呈现净申购状态,最新统计显示,二季度的震荡市场,基金的净申购仍高达1800亿。这样在总量上,基金等机构资金的市场占比将进一步提高;结构上基金投资相对集中于蓝筹、指标股,对市场的影响也更大。
3、股指期货有望助推蓝筹行情
股指期货是影响下半年市场的重要事件,海外的市场经验表明,股指期货虽不能改变市场的长期趋势,但对以基金持有的蓝筹为标的的指数成份股将带来更多的投资机会。指数期货的套期保值、资产配置功能,需要标的指数成份股的配合,市场对大市值品种的投资需求,市场对战略性筹码的需求,市场对大市值权重股的需求,使得蓝筹股稀缺性价值得到提升,机构通过调控此类股票的股价来影响指数的情况出现的可能性很大。
机构投资者对成份股的更多配置,才能使其在现货、期货操作中把握更多主动。相对于无指数期货时代,增量资金的介入、存量资金对组合配置的调整,都将加大标的指数成份股的投资,由此,股指期货推出,标的指数成份股可能享受较高溢价。
对于基金来讲,股指期货套利机制的存在,将增加标的指数的市场流动性,使得基金应对申购赎回的流动性成本更低,这样反过来又增加了标的蓝筹对基金的吸引力。两者的相互作用与强化,将使市场的价值投资理念得到加强,标的与蓝筹的机会更多。对于封闭式基金,股指期货推出带来的机会更多:1、股指期货增加了基金的投资品种和避险工具;2、股指期货增加了基金所持股票的流动性,而流动性是影响封闭式基金折价的重要因素;3、股指期货为封闭式基金提供了套利机会,到期时间越近,机会也明显,套利机会的存在也会减少封闭式基金的折价幅度;4、国际经验表明,有股指期货的市场封闭式基金的折价率较低。
4、震荡市场有利于基金获得超额收益
市场经验表明,基金在单边上涨的普涨行情中很难获得超越指数的超额收益。今年一季度的单边市场,基金大都输给了市场;今年二季度市场的强势整理,基金才凸现了部分优势,表现稍强于市场。从6月调整以来的基金表现,可以看出,调整的市场,基金的表现远好于指数。
基金表现呈现的这种规律性,存在合理的解释。基金在单边牛市中,股票型基金在股票资产的配置比例上存在制度性弱点,单边牛市中,最有效的股票资产配置比例就是满仓操作,但因为目前股票型基金较少利用杠杆操作,且作为开放式基金需要保持一定的流动性以应对投资者的赎回需求,此外,一些股票型基金对股票资产的最高配置比例也有一定的限制,因此在实际操作中股票型基金无法达到满仓的状态。2007 年第一季度末,股票型基金的平均仓位只有80.98%,存在着近20%的低效率甚至无效率的仓位。此外,单边普涨行情,基金的行业和个股选择优势也无从发挥。
涨时重势,跌时重质,在平衡或下跌的市场,基金的价值投资优势才能凸现出来,同时,股票资产配置比例的限制也成为了控制风险的有效手段。2007 年下半年股票型基金在行业选择和个股选择上的优势将重新显现。下半年我们预期市场的结构性分化,将以业绩、股指期货、人民币升值等因素展开,在这分化的过程中,迎合这些因素的基金―――重点行业和重点股票将占据优势,获得超额收益。
下半年基金投资策略
根据以上分析,我们得出了基金系统性机会减少,结构性机会增多的判断。因此,投资基金的绝对收益预期应该降低,而相对收益预期可以提高。这样的判断落实到具体的投资策略上,就是要加强投资的风险意识,适当控制基金和股票的投资比例;在基金和股票的品种选择上,可以加大基金的投资占比,下半年的市场环境决定了做股民不如做基民。
在基金品种的选取上,首先当然是考虑业绩,但过去的业绩并不代表未来。因此,除考察过去业绩排名和业绩稳定性之外,还应该结合对市场的整体和结构性行情判断,添加一些辅助性指标和因素。
1、基金类型的选取。基于下半年震荡行情和基金在震荡行情中存在相对优势的判断,下半年收益较高的仍将是股票型基金。虽然股票型基金的绝对收益预期需要降低,但半年20%左右的增长预期也远高于保本和债券型基金。因此,在基金的收益排序预测上,下半年仍将维持上半年一、二季度的顺序:封闭式基金―――股票型基金―――混合型基金―――保本型基金―――债券型基金。下半年重点配置的基金品种主要是封闭式基金和股票型基金。
2、基金规模的考虑。下半年,规模适中的基金取得较好收益的可能性较大,主要原因有:(1)经验表明,规模过大的基金没有取得过很好的历史业绩,这与管理经验和能力有关,也与市场的流动性有关。下半年预计市场的交易量将有所降低,市场的流动性将有所下降,大基金的流动性约束将更加明显。(2)小基金的制约因素除缺乏稳定性外,主要是与行情特点有关,下半年我们判断是蓝筹行情,小基金的投向一般不是大的蓝筹板块和大市值的龙头个股。
3、基金管理公司的选取。
基金管理公司的选取主要考虑两方面:一是基金规模,基金规模的大小决定基金公司的盈利水平,基金规模的大小在一定程度上也决定基金公司的生存。基金公司的核心竞争力在于人才,不论是人才的内部培养还是外部引进,都需要一定的物质基础,盈利能力和激励机制决定人才的流向。而优秀的管理人才反过来将推动基金公司的投资管理能力和风险控制能力,从而大幅提升基金公司的基金规模。二是成立时间,只有经历一定时间的市场考验,基金公司才能在制度上保证和提高投资管理能力和风险控制能力,才能在不同的市场环境下取得较为稳定的收益。
参考以上辅助性因素后,基金的选取最后要落实到业绩上,考察业绩,既要考虑以往的排名,也要考虑收益的稳定。我们根据附表各阶段的基金表现,结合以上市场分析和基金选取的辅助性因素,推出下半年的基金“十金”(见表)。
下半年基金“十金”
基金名称 管理人 单位净值(元)上半年净值增长(%)
嘉实服务增值行业 嘉实 3.38 74.81
华夏大盘精选 华夏 4.70 109.55
博时主题行业 博时 2.11 96.03
上投摩根中国优势 上投摩根 4.06 74.24
易方达深证100ETF 易方达 4.04 106.55
建信优选成长 建信 1.94 88.15
华夏上证50ETF 华夏 2.89 64.15
基金泰和 嘉实 3.15 76.04
基金安顺 华安 2.61 66.35
基金科汇 易方达 3.47 65.90
相关报道:
基金圈定下半年投资策略 四大投资关键词可诠释
招商基金2007年下半年投资策略报告
上投摩根基金投资策略:三条主线把握投资机会
加息了我们如何理财 专家提醒回避单一长期储蓄
http://www.sina.com.cn 2007年07月23日 07:10 都市快报
记 者 吴小敏
距上次加息短短两个月之后,央行宣布再次加息,这已是今年4个月内(3月18日―7月21日)的第3次加息。与此同时,从8月15日起,存款利息税将从20%降为5%。业内人士分析,虽然央行连续加息,但目前流动性过剩的问题还未得到彻底解决,预计年内央行还会再加息一到两次。在加息周期里,如果只进行单一的长期储蓄,那资产可能还会遭受负利率的侵蚀,因此理财产品的选择显得尤为重要。本报邀请了银行专业人士,为市民理财提供建议。
只存款躲不过资产缩水
这次加息的一个重要原因是刚刚公布的CPI(居民消费价格指数)又创纪录,今年6月份创出了涨幅4.4%的新高。工行浙江省分行理财专家表示,如果CPI继续维持在目前高位,即使加息、降税“两箭齐发”还是难改负利率。这意味着,虽然表面上看,你的存款利息在不断增加,但实际上你的资产还是在“缩水”。
以10万元存款为例,加息后一年期 存款利率为3.33%,如果扣除5%的利息税,那么税后存款利率为3.1635%,而6月份CPI涨幅高达4.4%。这就意味着1年期存款的实际利率为:3.1635%-4.4%=-1.2365%。也就是说,你将10万元存进银行,1年后它的实际购买力变成了98763.5元,有1236.5元在通货膨胀中“蒸发”了(由于每个月的CPI数据不尽相同,数据仅供参考)。
就算退一步,以今年上半年CPI涨幅3.2%来计算,目前的存款依然是负利率。由此可见,虽然存款利息在不停地加,但单一存款的风险还是很大,必须通过理财来规避通货膨胀带来的资产缩水。
中短期固定收益类产品加保本浮动收益类产品的组合,好处有:一、投资期限相对较短,在加息周期下能及时转换新产品;二、固定收益有保障,目前年收益率一般在3.5%―4.5%左右,可以在一定程度上弥补负利率的损失,固定收益类产品可以选择6个月到一年的信托型产品,比如浦发银行( 41.68,0.61,1.49%)最新推出的一款信托理财产品,年固定收益率达到4.38%;三、保本浮动收益类产品一般与汇率或者股票指数挂钩,如果达到预设条件,则可获得较高收益,如果没有达到预设条件,这些产品最终也是保本的。比如各家银行的打新股类理财产品就是一个不错的选择。
国债可做资产配置
利息税从20%降为5%,对国债和教育储蓄等免税理财产品冲击较大。以今年5月份发行的2007年凭证式(三期)国债为例,3年期票面年利率只有3.66%,而3年期银行存款的实际收益率为4.45%;5年期国债票面年利率为4.08%,也低于最新的同期银行存款4.96%的实际收益率。
郭剑表示,投资国债最大的风险来自利率变化,事实上,国债与固定收益类理财产品很相似,都属于稳健型投资品种,但与理财产品灵活的投资期限相比,国债长达3-5年的投资期限使其面临很多的利率风险,尤其是在加息的周期下。对投资者来说,国债最好作为投资组合的一部分,而且不宜太多。
利息税降为5%后,手续烦琐的教育储蓄事实上已经没有多大意义,对此,广发银行杭州分行理财专家表示,不妨用基金定投取代教育储蓄。
债券型基金受冲击最大
加息对基金投资的影响有多大?郭剑说,股票型基金的影响主要来自股市,加息后受到冲击最大的是债券型基金,往往央行宣布加息后的第一个工作日债市就出现大幅下跌,加息导致的债券价格下降将打破债券市场的平静,特别是一些中长期债券品种,对加息和债券市场调整更加敏感,债券价格仍有下跌空间。
货币型基金严格来说不是投资工具,而是现金管理工具,投资货币型基金的目的大多用来替代活期存款,因为货币型基金的利率为2.5%左右,而流动性跟活期存款差不多。因此,货币型基金也不受加息影响。
选择固贷要量力而行
央行频繁加息,固定利率房贷(简称固贷)业务的优势越来越明显,也越来越受到购房者的关注。这两天,建行、农行、招行、中信、光大等一批开办固贷业务的银行,接到咨询固贷业务的电话猛增了几倍。据了解,从今年年初至今,杭州市场上固贷业务猛增五成以上。
不过,郭剑提醒市民,固贷虽然可以避开不断的加息,但并非适合所有的人,一定要根据各自的经济实力量力而行。因为固贷的利率一般都会略高于同期央行利率,且期限都较短(最长10年),这也意味着如果选择固贷,月供压力要比普通的浮动利率房贷大出很多。另外,目前是处在加息周期,但过个几年说不定就要降息,这也存在一定风险。
逼着自己写点东西,下面就println一些东西出来\n
有是一个星期,时间过的真快,上周的心情,真是此起彼伏,就像sin曲线,呵呵,现在还好,好像让人看到希望了,天要亮了,呵呵,最近工作也是比较闲,使得有空想那些恼人的事,还不如忙的不可开交,没时间想,呵呵,希望天亮了。
想想都有点紧张,呵呵,真的长大了啊,需要承担的越来越多了,同时权利也越来越大了,很多可以自己选择了,都是相辅相成的,钱真他妈的是好东西,呵呵。生活好像变得非常紧凑,说紧凑好像还褒义了点,变得没有时间思考,回味,休息。恩,这个不是人呆的城市就是这样的。挣钱...挣钱@#¥%……&****(
有半个月没写了,有时候想起来,没心情,就放下了,期间遇到几个问题解决了应该记下来,也没记,期间也许有些心情,写写或许好些,也没写,就这样,一晃半个月过去了,这些天公司里没什么要紧的事,闲的慌,感觉会的东西太少啊,很多一知半解啊。
真他娘的生气,以前的哥们儿上来告诉我明年要当爹了,这鄙视也算是给我信儿了又?靠,级别见长啊,上次还是五一七天里头,提前了个把月,这次强啊,都上升到年了哦,太他妈强了,自己还在这以为多么一口闷呢,感情深嘛,唉,算了,忽觉身边没两个真格的时候铁的兄弟啊,净是他妈有事了冒出来没事了就认识你是谁啊。
过活。
SQL Server和Oracle的常用函数对比
---------数学函数
1.绝对值
S:select abs(-1) value
O:select abs(-1) value from dual
2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual
3.取整(小)
S:select floor(-1.001) value
O:select floor(-1.001) value from dual
4.取整(截取)
S:select cast(-1.002 as int) value
O:select trunc(-1.002) value from dual
5.四舍五入
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from dual 1.2346
6.e为底的幂
S:select Exp(1) value 2.7182818284590451
O:select Exp(1) value from dual 2.71828182
7.取e为底的对数
S:select log(2.7182818284590451) value 1
O:select ln(2.7182818284590451) value from dual; 1
8.取10为底对数
S:select log10(10) value 1
O:select log(10,10) value from dual; 1
9.取平方
S:select SQUARE(4) value 16
O:select power(4,2) value from dual 16
10.取平方根
S:select SQRT(4) value 2
O:select SQRT(4) value from dual 2
11.求任意数为底的幂
S:select power(3,4) value 81
O:select power(3,4) value from dual 81
12.取随机数
S:select rand() value
O:select sys.dbms_random.value(0,1) value from dual;
13.取符号
S:select sign(-8) value -1
O:select sign(-8) value from dual -1
----------三角函数相关
14.圆周率
S:SELECT PI() value 3.1415926535897931
O:不知道
15.sin,cos,tan 参数都以弧度为单位
例如:select sin(PI()/2) value 得到1(SQLServer)
16.Asin,Acos,Atan,Atan2 返回弧度
17.弧度角度互换(SQLServer,Oracle不知道)
DEGREES:弧度-〉角度
RADIANS:角度-〉弧度
---------数值间比较
18. 求集合最大值
S:select max(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select greatest(1,-2,4,3) value from dual
19. 求集合最小值
S:select min(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select least(1,-2,4,3) value from dual
20.如何处理null值(F2中的null以10代替)
S:select F1,IsNull(F2,10) value from Tbl
O:select F1,nvl(F2,10) value from Tbl
--------字符串函数
21.求字符序号
S:select ascii('a') value
O:select ascii('a') value from dual
22.从序号求字符
S:select char(97) value
O:select chr(97) value from dual
23.连接
S:select '11'+'22'+'33' value
O:select CONCAT('11','22')||33 value from dual
23.子串位置 --返回3
S:select CHARINDEX('s','sdsq',2) value
O:select INSTR('sdsq','s',2) value from dual
23.模糊子串的位置 --返回2,参数去掉中间%则返回7
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=996&d=dwn1rn
S:select patindex('%d%q%','sdsfasdqe') value
O:oracle没发现,但是instr可以通过第四个参数控制出现次数
select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6
24.求子串
S:select substring('abcd',2,2) value
O:select substr('abcd',2,2) value from dual
25.子串代替 返回aijklmnef
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual
26.子串全部替换
S:Replace
O:select Translate('fasdbfasegas','fa','我' ) value from dual
27.长度
S:len,datalength
O:length
28.大小写转换 lower,upper
29.单词首字母大写
S:没发现
O:select INITCAP('abcd dsaf df') value from dual
30.左补空格(LPAD的第一个参数为空格则同space函数)
S:select space(10)+'abcd' value
O:select LPAD('abcd',14) value from dual
31.右补空格(RPAD的第一个参数为空格则同space函数)
S:select 'abcd'+space(10) value
O:select RPAD('abcd',14) value from dual
32.删除空格
S:ltrim,rtrim
O:ltrim,rtrim,trim
33. 重复字符串
S:select REPLICATE('abcd',2) value
O:没发现
34.发音相似性比较(这两个单词返回值一样,发音相同)
S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差
返回0-4,4为同音,1最高
--------------日期函数
35.系统时间
S:select getdate() value
O:select sysdate value from dual
36.前后几日
直接与整数相加减
37.求日期
S:select convert(char(10),getdate(),20) value
O:select trunc(sysdate) value from dual
select to_char(sysdate,'yyyy-mm-dd') value from dual
38.求时间
S:select convert(char(8),getdate(),108) value
O:select to_char(sysdate,'hh24:mm:ss') value from dual
39.取日期时间的其他部分
S:DATEPART 和 DATENAME 函数 (第一个参数决定)
O:to_char函数 第二个参数决定
参数---------------------------------下表需要补充
year yy, yyyy
quarter qq, q (季度)
month mm, m (m O无效)
dayofyear dy, y (O表星期)
day dd, d (d O无效)
week wk, ww (wk O无效)
weekday dw (O不清楚)
Hour hh,hh12,hh24 (hh12,hh24 S无效)
minute mi, n (n O无效)
second ss, s (s O无效)
millisecond ms (O无效)
----------------------------------------------
40.当月最后一天
S:不知道
O:select LAST_DAY(sysdate) value from dual
41.本星期的某一天(比如星期日)
S:不知道
O:SELECT Next_day(sysdate,7) vaule FROM DUAL;
42.字符串转时间
S:可以直接转或者select cast('2004-09-08'as datetime) value
O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;
43.求两日期某一部分的差(比如秒)
S:select datediff(ss,getdate(),getdate()+12.3) value
O:直接用两个日期相减(比如d1-d2=12.3)
SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
44.根据差值求新的日期(比如分钟)
S:select dateadd(mi,8,getdate()) value
O:SELECT sysdate+8/60/24 vaule FROM DUAL;
45.求不同时区时间
S:不知道
O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;
-----时区参数,北京在东8区应该是Ydt-------
AST ADT 大西洋标准时间
BST BDT 白令海标准时间
CST CDT 中部标准时间
EST EDT 东部标准时间
GMT 格林尼治标准时间
HST HDT 阿拉斯加―夏威夷标准时间
MST MDT 山区标准时间
NST 纽芬兰标准时间
PST PDT 太平洋标准时间
YST YDT YUKON标准时间
Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:
函数 Oracle Microsoft SQL Server
把字符转换为ASCII ASCII ASCII
字串连接 CONCAT (expression + expression)
把ASCII转换为字符 CHR CHAR
返回字符串中的开始字符(左起) INSTR CHARINDEX
把字符转换为小写 LOWER LOWER
把字符转换为大写 UPPER UPPER
填充字符串的左边 LPAD N/A
清除开始的空白 LTRIM LTRIM
清除尾部的空白 RTRIM RTRIM
字符串中的起始模式(pattern) INSTR PATINDEX
多次重复字符串 RPAD REPLICATE
字符串的语音表示 SOUNDEX SOUNDEX
重复空格的字串 RPAD SPACE
从数字数据转换为字符数据 TO_CHAR STR
子串 SUBSTR SUBSTRING
替换字符 REPLACE STUFF
将字串中的每个词首字母大写 INITCAP N/A
翻译字符串 TRANSLATE N/A
字符串长度 LENGTH DATELENGTH or LEN
列表中最大的字符串 GREATEST N/A
列表中最小的字符串 LEAST N/A
如果为NULL则转换字串 NVL ISNULL
日期函数
函数 Oracle Microsoft SQL Server
日期相加 (date column +/- value) or
ADD_MONTHS DATEADD
两个日期的差 (date column +/- value) or
MONTHS_BETWEEN DATEDIFF
当前日期和时间 SYSDATE GETDATE()
一个月的最后一天 LAST_DAY N/A
时区转换 NEW_TIME N/A
日期后的第一个周日 NEXT_DAY N/A
代表日期的字符串 TO_CHAR DATENAME
代表日期的整数 TO_NUMBER
(TO_CHAR)) DATEPART
日期舍入 ROUND CONVERT
日期截断 TRUNC CONVERT
字符串转换为日期 TO_DATE CONVERT
如果为NULL则转换日期 NVL ISNULL
转换函数
函数 Oracle Microsoft SQL Server
数字转换为字符 TO_CHAR CONVERT
字符转换为数字 TO_NUMBER CONVERT
日期转换为字符 TO_CHAR CONVERT
字符转换为日期 TO_DATE CONVERT
16进制转换为2进制 HEX_TO_RAW CONVERT
2进制转换为16进制 RAW_TO_HEX CONVERT
其它行级别的函数
函数 Oracle Microsoft SQL Server
返回第一个非空表达式 DECODE COALESCE
当前序列值 CURRVAL N/A
下一个序列值 NEXTVAL N/A
如果exp1 = exp2, 返回null DECODE NULLIF
用户登录账号ID数字 UID SUSER_ID
用户登录名 USER SUSER_NAME
用户数据库ID数字 UID USER_ID
用户数据库名 USER USER_NAME
当前用户 CURRENT_USER CURRENT_USER
用户环境(audit trail) USERENV N/A
在CONNECT BY子句中的级别 LEVEL N/A
合计函数
函数 Oracle Microsoft SQL Server
Average AVG AVG
Count COUNT COUNT
Maximum MAX MAX
Minimum MIN MIN
Standard deviation STDDEV STDEV or STDEVP
Summation SUM SUM
Variance VARIANCE VAR or VARP
Oracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:
EXTRACT(YEAR FROM 日期)
来源:http://borland.mblogger.cn/jinjazz/posts/18954.aspx
心情不好,心慌,喘不上起来,如何是好....,想想也没什么事啊,天还没塌,只是不知道如何是好,没有我可走的路,好像在一个独木桥上哪边都有一条猛兽在那恶狠狠的看着我,哪个都不好惹啊,真希望自己是诸葛亮,运筹帷幄,真希望自己是中500万的那个,好多事也就容易了,呵呵,可惜,自己什么狗屁都不是,早上骑车背着那笔记本(公家的)上班,里面还装了些乱七八糟的,真沉,一路上腰都挺不起来,压死我了,呵呵。可是又有什么办法呢,没有别的地方可放。
唉...说的自己有点可怜,突然想起被某人看到又该说我活该了,呵呵,唉...,无言以对,不清楚什么才是大家都认为正确的。虽然都是猛兽,但都不想惹,Sorry
天气好热,37摄氏度,接着完成要我做的页面,做完了数数一共建了24个jsp,功夫不负有心人啊,哈哈哈,要下班的时候,机子慢的要死,干脆重启,闲自己关机太慢,干脆强制关机重启,奶奶的,没想到重起来,eclipse起不来了,提示要我运行chkdsk,折腾了半天终于起来了,chkdsk /f
今天
一星期又过去了,过的真快,好家伙,呵呵,:-),补了一早上blog,省得小李儿拿这个说事儿,给自己不写找理由,看,我补上了,你补补我瞅瞅?/
接着做苦差事.....
做了一天那些页面,烦琐,查那么多字段出来显示,我得一个一个对应,真他娘的苦差事。
小李儿这周开始上班啦,在这恭喜一下小李儿,还希望天天开开心心,别想那么多烦恼。另外工作刚开始肯定会遇到点困难的,要胜不骄败不馁。
图片上字是不是写错了还是故意的?!呵呵
接着无聊的培训,无聊
晚上回去可早了一会儿,车子还没气了,还得修车,气死人了,还碰上一个孬师傅蒸腾了半天也没弄好,没办法,换人
周末,当年的同宿同学打过电话来要帮忙找当年的成绩单急用,义不容辞,马上行动,扫描,上网,发送过去,可惜没派上用场,后来通过短信聊了几句,听说一个自己觉得处的还不错的同学结婚了,在石家庄请的客,觉得不是滋味,没叫我去,呵呵,咱真是甘愿想花那钱啊,跟别的哥们发这牢骚,哥们说不怪他,可能你什么什么原因什么原因,可我就是生气。呵呵,唉....算了,也可能是我,当时也没上赶着问问人家,什么时候结婚啊,具体什么时间啊,娘的,我也不是你爹。
总结了好几天了,好像说的都是些不令人满意不令人高兴的事 哦。也是,这几天怎么这么没有高兴的事呢,好久没有了。来上班了了,头儿问我培训的那系统怎么能应用到我们现有开发的系统中,我竟然说不出来,就是不知道怎么用,狂晕,早知道问问,呵呵,尴尬了,干什么去了,培训了半天啥不知道。呵呵。下午,因为现在的系统没什么事了,给我分了些另一个系统的开发工作,没什么技术含量就是烦琐,想想狗日的是不是整我呢啊。哈哈哈
我的天啊,整整拉了一星期没写过了,没那么清闲了,要是俺有个笔记本是的也就写了,呵呵呵呵呵,想想,周五下班了都头儿跑过来要我周一去一个地方培训,什么TRS,WCM5.2的培训,没听说过,据说是一个内容管理系统,服从安排吧,还好离我住的地方不远。
培训不令人满意,知道离住的地方不远,9点培训,8点多一点就到了,在信息工程学院里转,买了点吃的当早餐,看毕业生们穿着学士服在照相,不由想起想当年,哈哈,转眼毕业都一年喽,到了要培训的教室,竟然一个人没有,等,九点整才有人来开门,我晕,真娘的准时,可是学生们一个没来,最后等到10点才开始,我晕,中午吃饭,老师带我们到食堂餐厅,指引我们到了一个单间,都落座,发现老师不见了,等会儿吧,等,不来,大家还是吃吧,算了,不说这些没用的了。
讲的内容嘛,自己感觉比较无聊,就是一个自助建站系统嘛,在网上见过好几个这样的网站,不需要任何编程,会操作IE就行了。无聊,还好,能上网,呵呵呵!
装了个润乾报表开发工具,关了eclipse再打开就起不来了,弹出个窗口说让我看.log,我晕,一大堆异常,捡了一个
在google搜,说jdk的问题,在环境变量里的path,jdk放在前面去就好了,狗日的。
path: D:\oracle\ora90\bin;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Sun\AppServer\jdk\bin;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\Program Files\Rational\common
path: C:\Sun\AppServer\jdk\bin;D:\oracle\ora90\bin;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\Program Files\Rational\common
今天有活干,哈哈,做了个页面,最后搞美观的时候,疯了,那表格怎么就对不齐的,狗日的,俺就搞这个费劲,最后折腾到6点多,终于像个样子了,下班回家更倒霉,这几天车子老没气,去修还找不到漏气的地方,回去的时候发现又没多少了,不过还能骑,想想,省得明天早上着急还是打点吧,花了两毛钱打气,可没走出一站地,一点没了,我狂晕,这不玩我呢吗,不打没准还骑回去,推着走,可找到一个修车的,我说师傅有内胎没给我换个新的算了,这个时候天开始掉雨点,娘的,早不下晚不下,师傅很利索,刷刷刷换上了,车闸又弄不好了,说我那有毛病得换新的,没办法我说先把闸线给我松开吧(不松开老刹着车),这个时候雨开始哗下起来了,赶忙给了钱找地方避雨,等了10分钟,下小了,出发,没走出多远,发现地面是干的,连湿都没湿,我狂晕,难到就我修车那块下了?!下的还挺大,都积水了,以后的路上,路面都是干的,找了个修车的修闸,我这骑车的没刹车可不行,又花了6块,我发现这些修车的都娘的不实在,狂要钱,高薪啊,等我买些工具回来,有毛病了自己修。
今天遇上一个问题,用javascript的window.location='';想转向另一个页面,这个链接是拼起来的,中间有一些用户输入的参数,可有中文的时候会是乱码,这哪行,想起来,昨天晚上刚学了一招,用String str = java.net.URLEncoder.encode("/中文.jsp","GBK"); //使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。该方法使用提供的编码机制获取不安全字符的字节。使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式。该方法使用提供的编码机制获取不安全字符的字节。倒是相关,不对症啊,问人,google,结果找到对症的说,找到tomcat的server.xml中的<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
加入URIEncoding="GBK"即可,还真灵,呵呵呵。
今天早上出来,发现自行车又没气了,我狂晕,这是怎么回事,刚换的新胎啊,疯了,今天本来就吃来晚了,没办法,去坐公交吧,还好,车在还可以接受的时间里来了,上车,还好,人还不多,站了一会儿还有座了,还好,路上还不是很堵,看着那些乱加塞儿的小p车,真生气,他一个加塞儿,让后面的好多车以及车上我们这么多等车上班的人等他把塞儿加进去,素质,素质,还好,8点55分下了车,奔向电梯,"还好",等电梯的超人多,爬楼梯,狂喘着爬上了12层,打卡,看时间,还好,8点59分,接着喘...
花了半天的时间把上周没完成的弄好了,学到javascript一招,哈哈,验证用户是否输入的是数字,text/1==text,如果返回true说明是数字,否则不是数字,哈哈,妙哉。完成了去找头儿,第一次休息呢,第二次不见了,呜呜。
台湾达美公司招聘
以3.8妇女节为主题,设计一个产品展示。
产品图用以下网站:
www.beautybank.com.cn
www.Delie.com.cn
www.crystalcosmetic.com
提交时需提交一张psd图片和其静态页面。
上午没什么事,下午一个什么CMMI的培训,狂晕,差点没睡着了,好多术语不知道是啥玩意儿,中途休息发现头儿给发了个邮件要加个功能,好,哈哈,申请不去了,干活,呵呵,眼睛不带眨的一直到下班,还有一点没弄完,算了周一再弄吧,反正头头也没催。
下午异常的紧张,因为说好周末要给家打电话的,家里总说为了我们他们怎么不愿意怎么委屈都没事,可是,说这话的时候,儿女又是怎么想呢,我们长大了,是有孝的,听着父母为了我们怎么样而如何难受,心里也真得是难受啊。
缺少沟通...
昨天新员工培训,"考试".好像又回到了大学上课,哦,不对,应该是中学,一个后来才知道是个总监的家伙照着员工手册念了半天,然后发试卷考试,呵呵,开卷,在员工手册上找,哈哈,有点在学校里开卷考马哲得意思,哈哈,然后总监从名单上念名字让其来回答每一题,真是无聊,感觉这个总监去做某校某班的某班主任还挺合适的.
头儿交给得活儿因为昨天培训没弄完,上午弄完了加了个页面,在想一个问题,那些有类似word功能得编辑框是怎么弄得?
复习一下基础知识,呵呵
java中switch的使用
关于java中switch使用的一些说明
switch(表达式)
{
case 常量表达式1:语句1;
....
case 常量表达式2:语句2;
default:语句;
}
default就是如果没有符合的case就执行它,default并不是必须的.
case后的语句可以不用大括号.
switch语句的判断条件可以接受int,byte,char,short,不能接受其他类型.
一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break,利用这一特性可以让好几个case执行同一语句.
==============Fucai.java====================
import java.util.Arrays;
public class Fucai {
private Integer[] redBall;
public Fucai()
{
redBall = new Integer[33];
for(int i = 0;i < 33;i++)
{
redBall[i] = i+1;
}
}
public int[] getRedBallArray()
{
int[] redBallArray = new int[6];
for(int i = 0;i < 6;i++)
{
int temp;
int index = (int)(Math.random()*(33-1-i));
redBallArray[i] = redBall[index];
temp = redBall[index];
redBall[index] = redBall[33-1-i];
redBall[33-1-i] = temp;
//System.out.println(index);
}
return redBallArray;
}
public int getBlueBall()
{
return (int)(Math.random()*(16));
}
public static void main(String[] args)
{
Fucai fucai = new Fucai();
int[] redBallArray = fucai.getRedBallArray();
Arrays.sort(redBallArray);
System.out.print("红球:");
for(int i = 0;i < redBallArray.length;i++)
{
String numStr = redBallArray[i] + "";
if(redBallArray[i]<10)
numStr = "0" + redBallArray[i];
System.out.print(numStr+",");
}
System.out.print("篮球:"+ fucai.getBlueBall());
System.out.println();
System.out.println("祝你好运!!!");
}
}
================Fucai.cs===================
using System;
using System.Collections.Generic;
using System.Text;
namespace FucaiApp
{
class Fucai
{
private int[] redBall;
public Fucai()
{
redBall = new int[33];
for (int i = 0; i < 33; i++)
{
redBall[i] = i + 1;
}
}
public String[] getRedBallArray()
{
int[] redBallArray = new int[6];
for (int i = 0; i < 6; i++)
{
int temp;
int index = new System.Random().Next(33 - 1 - i);
redBallArray[i] = redBall[index];
temp = redBall[index];
redBall[index] = redBall[33 - 1 - i];
redBall[33 - 1 - i] = temp;
}
System.Array.Sort(redBallArray);
String[] redStr = new String[6];
for (int i = 0; i < redBallArray.Length; i++)
{
String numStr = redBallArray[i] + "";
if (redBallArray[i] < 10)
numStr = "0" + redBallArray[i];
redStr[i] = numStr;
}
return redStr;
}
public String getBlueBall()
{
int blue = new System.Random().Next(1,16);
if (blue < 10)
return "0" + blue.ToString();
else
return blue.ToString();
}
}
}
装了个vs.net2005好些天了,今天做了个登录页面的练习,捣鼓了半天,又问人又查帮助的,呵呵,
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
string userName = this.tbUserName.Text;
string pwd = this.tbPwd.Text;
string sql = "select * from tb_user where id='" + userName + "' and passwd='" + pwd + "'";
String url = ConfigurationManager.ConnectionStrings["csConnectionString"].ConnectionString;
DataSet dataSet = new DataSet("user");
using (SqlConnection connection = new SqlConnection(url))
{
connection.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, connection);
da.Fill(dataSet);
connection.Close();
}
if (dataSet.Tables[0].Rows.Count > 0)
{
Response.Write("<script>alert('login success');</script>");
}
else
{
Response.Write("<script>alert('login failed');</script>");
}
}
}
.net中数据适配器SqlDataAdapter 和数据集DataSet都不用关闭么?java中jdbc的Statement和ResultSet可都是要关的
终于捣鼓出来了
今帮一朋友做了个读取txt文件的代码,掌握不扎实啊,写这些还要多次查api帮助文档,呵呵呵
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test
{
public String readFile(String file)
{
String doc = null;
StringBuffer fileText = new StringBuffer();
FileInputStream infile;
try {
infile = new FileInputStream(file);
InputStreamReader in = new InputStreamReader(infile);
java.io.BufferedReader reader =new java.io.BufferedReader(in);
while((doc=reader.readLine()) !=null)
{
if(!doc.equals("") && !doc.substring(0,1).equals("#"))
fileText.append(doc+"\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException ie)
{
ie.printStackTrace();
}
return fileText.toString();
}
public static void main(String[] args)
{
String fileText = new Test().readFile("C://1.txt");
System.out.println("fileText:\n");
System.out.println(fileText);
}
}
1.txt文件
#Line1
J2SE
#cOMMENTS
J2EE
J2ME
输出
J2SE
J2EE
J2ME
从周五就开始捣鼓书生表单,今天有捣鼓了一天,想弄个练习出来,就是没出来,呵呵呵
总结一下遇到的异常
java.lang.IllegalArgumentException: Document base C:\Tomcat 5.5\webapps\应用名 does not exist or is not a readable directory
这样的错误应在是在tomcat的Tomcat 5.5\conf\Catalina\localhost目录下配置的针对该应用的连接池的xml文件,而在webapps中没有这个应用
org.apache.commons.configuration用来读取配置文件的jar包commons-configuration-1.1.jar
Castor是一种将Java对象和XML自动绑定的开源软件. 它可以在Java对象,XML文本,SQL数据表以及LDAP目录之间绑定.castor-0.9.5.jar
org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
安装字面意思是没有设置方言
<property name="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
org.hibernate.HibernateException: No CurrentSessionContext configured
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
tomcat不加,要在程序里写
总结一点错误,从google的搜索历史里摘出来的,呵呵,初感觉到搜索历史还是有用的哦。
培训,今天讲了一些润乾的api,哈哈,看出了一个用了命令模式,呵呵,感觉有点像.net里的一些名词,开发的工程师是不是以前搞.net的?!哈哈,下午老师把我讲的睡了又睡,结果旁边的同事忍不住了,哈哈,大家都出来了。
终于结束了两天的培训,坐公车真难受,让我纳闷的是两次回来坐的656空调车都刷了我4毛钱,而去坐的656不是空调车却刷了我6毛,难道空调车还要便宜一些?!哈哈,路上有人下车还说,坐这样的车真舒服。
明天
今天比较幸运,到了公司开始下雨了,呵呵,本打算坐公交的,想想公交那么挤又堵,还是骑车吧,就不信就这么倒霉半道上还下起来,哈哈,这次决策成功。
装了个vs.net2005,一年没弄过了,好陌生啊,好像跟2003还是有区别的,竟然找不到后台代码,郁闷。
培训
一大早跑去培训,中间堵车,堵死我了,一动不动,还好,才迟到了几分钟,中吃丽华快餐,基本知道了这个报表是怎么闹出来的了。
生憋,费劲,不写了。
a 14:12:16
啥叫泛型 听以前老师说过
b 14:11:48
List里面能装什么类型?
a 14:13:07
一个集合啊
b 14:14:56
是 ,集合里面可以装Object,Object是所有类的基类,所以可以往里装热河类型,你可以第一个元素装一个String,而第二个就放Integer,这是没问题的,而如果写成List<String> list = new ArrayList<String>();你就只能往list装入String,装入别的编译不过
a 14:17:09
是不是 泛型 的作用 就是要向 List里放一组 不同类型的数啊?
b 14:18:55
泛型就是一个限制作用,减少程序的错误,还可以提高性能,就好比你有个箱子,以前乱七八糟任何东西都可以放,现在你把他专门来装一种东西了
b 14:22:11
比如你传给我了个List参数,我从里面取值的时候,我不知道你里面放的什么,你告诉我放的String,我就按String做转换,而如果你偏偏有一个放了Integer,将来我这边就会报错,如果你用了泛型,你如果往里装Integer编译时就会报错,减少了运行错误,而我取出来的时候也不用转换了直接就是String ,提高了性能
a 14:23:58
明白了
今天,该hezhi和junzhuan的错误,总算是改完了
其中一个有趣的问题,就是用户要输入趋于2000个汉字,汉字啊,据说utf8编码一个汉字要3个字符,我说报的错误说我的字符数跟我输入的汉字数怎么也对不上关系呢,郁闷了我老半天
用的是oracle数据库
用普通的方法行不通
PreparedStatement pst = conn.prepareStatement("insert into table(name,book) values(?,?)");
pst.setString(1, "spring");
pst.setString(2,s);
pst.execute();
这么写报错: java.sql.SQLException: 数据大小超出此类型的最大值: 5606
5606是oracle判断的字符数
在网上查了以下,有高手说可能是oracle jdbc实现setString方法的原因
用字符流插入就行了
PreparedStatement pst = conn.prepareStatement("insert into table(name,book) values(?,?)");
pst.setString(1, "spring");
pst.setCharacterStream(2, new InputStreamReader(new ByteArrayInputStream(s.getBytes())), s.length());
pst.execute();
这样可以正常插入。
高兴...
可是好景不长,修改也用如此方法改之,记过又报错: java.sql.SQLException: ORA-01483: DATE 或 NUMBER 赋值变量的长度无效
我晕,在我本地机子上tomcat环境下运行是没有这种错误的,而部署到服务器上,服务器上是weblogic,就报这样的错误,修改失败,而 insert就没有错误,而且如果修改字符数较小的就能修改成功,如果修改较大的就会报错,之后不管修改什么样的,都会报错,闹鬼了,纳闷了,这是什么错 误啊,接着在网上查,高手建议把一个字符拆成两个代入
改成下面这样子
int length=book.length();
String s1="";
String s2="";
if(length>1000){
s1=book.substring(0,1000);
s2=book.substring(1000,length);
}else{
s1=book;
}
pstmt = conn.prepareStatement("update table set book=?||? "+
"where name=?");
pstmt.setString(1, s1);
pstmt.setString(2, s2);
pstmt.setInt(3, “spring”);
结果就成功了,嘿嘿,原来还有这种方法,这是oracle特有的么?呵呵对oracle不熟悉
而让人纳闷的是为什么在我的tomact下就没有这种错误呢,而insert的时候也没有错误啊。纳闷
昨天,昨天晚上回去不想写日志就没上来,一天半,基本上把junzhuan的四个页面的功能弄出来了,这都是自己写的,比hezhi改别人的东西顺唐多了,哈哈
研究了一下oracle的分页,早就听说oracle可以支持分页的查询,而sqlserver好像就没有这种功能,但一直也不知道oracle是怎么分页的,这次的做的这个功能有机会看到老系统人家是怎么实现了,研究了研究终于明白了
原来oracle每个表都有一个伪字段rownum,所谓伪字段,我的理解就是不是用户建的,也不用用户维护,还有个伪字段 rowid。
rownum是oracle在查询结果集的时候为每个记录顺序分配的,这样我们可以利用他来实现分页
但不能这样写select * from table where rownum > 1 and rownum < 5
因为已rownum做条件只能>0或者>负数
因为oracle在比较的时候,第一条记录rownum=1,1>1不成立,丢弃,下一条记录rownum=1,1>1不成立,以此类推,没有符合条件的记录
利用子查询实现分页
select * from (select rownum r,td.* from (select * from table) td) where r > 10 and r < 20
在这里rownum变成了一个结果集中的字段,根普通字段没什么两样,这样我们只要传入起至记录就可以分页啦,哈哈
呵呵,原来oracle分页是这么搞的,刚知道,嘿嘿,学习啦。
今天果真有雨,早上出来还没下,几分钟后就开始掉雨点了,而且越来越大,开始疯狂的骑,雨点越来越密,眼镜都模糊了,刹车也不听使唤的打滑,好危险,终于到了公司的车棚,还没容得锁车子,哗哗下起来了,就这样在车棚困了20分钟
上午改了昨天的错误,交差了,很快上午就过去了,中午去吃饭,雨竟然还没停,借了个伞去吃饭,吃饭回来发现新的任务又下来了,其实任务都是相当简单的,连接数据库直接用jdbc,没有任何设计上的要求,只要实现功能就行了,没什么意思,这次是自己写页面了,比改原有的那些烂页面好多了,为什么听说过的公司已有的项目都是java代码写在jsp中混合呢,真是想不明白,别人看着好费劲哦。
呵呵,算了,胡乱写这些吧。因为要去培训,把公司的笔记本拿回家了,呵呵
等我有了钱,买仨笔记本,呵呵呵呵哈。
日子过的很快,转眼五月要过去了,也快一年没回家了,现在又开始忙了,就像那时候在石家庄的公司,在这过程中,好像忽略了些什么,以前上学的时候,还经常 有时间静下心来思考思考,总结总结,定定计划(虽然实施的都不是很好),想想怎么经营我的生活,我的爱情,总之那时候还总能停下脚步回头望望,看看有什么 过失,走过的路是不是直的,呵呵,现在,好像很少提及这些了,切切实实变成了一个动物,呵呵,上班,干活,沉浸在显示器里,拔出来的时候,头昏脑胀了,回 家,吃饭,困了,睡觉了,呵呵,周而复始,和动物没什么区别,而且节奏越来越开,以至于很多事,明明想着的,可到时候却忘了或不等不往后托,就像手机收短信似的,收的太多,以至于有的短信没来及看就被挤出队列了,记得以前有好多美好的浪漫的想法,类似于:等到.....了,我就......,可是,现在 好像有的已经......了,但是也没......,呵呵,我在失去一些宝贵的东西,警醒。
我应该变成一个什么事都能拿的起来的人了......
今天
算上周末发现一联 五天没写日志了,疯狂补了一通,这家伙,倒是练记忆,呵呵,也不知道记录这些类似流水账的东西有什么用,难道已经是一种习惯了?!哈哈,今天把周日加班写 好的代码测试,不测不知道,还是有一堆问题,最后感觉没问题了,交给项目经理看吧,我晕,人家一看就有问题了,还是一个致命错误,不过好像是数据库视图写 的有问题,等明天管事的回来再说。
今天确定下周的今天去培训,还是那个报表,挺方便也挺无聊。
新增加的这几项功能,最新通知要这周完成,因为希望周一要给客户演示以下,好家伙,这立马增加了工作压力,不过到下班的时候还是弄两个个差不多,能给客户演示的版本,问了以下决定周日来加班,呜呜,我已经两星期没有双休了。
这两天碰到的问题
1、灵活运用javascript真的是能省很多事,它在客户端可以处理很多事情。
2、reload问题,从负窗口弹出一个子窗口后,我想在关闭字窗口后刷新父窗口,原来是用的javascript, "window.opener.document.location.reload();",,这里面有个问题,如果比如父窗口刚执行了个删除的.do, 当刷新的时候它自会还执行这个.do,又会删除一下,这是不合理的,问了问高手,改用window.document.location =‘指定链接.do’,这样就可以了。
3、乱码问题,在action中想通过response.write输出一段javacript代码让其在客户端执行,代码中包含中文字符串,郁闷的是怎 么改都是乱码,能先到的办法都想到了,字符串转码,设置字符集,保存代码编码,转换成艾c克码,都不行真的是顽固,没办法,想了个偏方,传过去一个标示, 然后到jsp页面用javascript去判断在指定成对应的中文字符串,总算解决了。
开始写增加模块的代码了,已有的动态表格真的是太好用了,只需要制定一个表格Id,页面就自动生成了,包括查询条件,显示表格的列,从数据库查询哪个表来 显示,这些都动态决定了,我觉得这里面有一点就是,之所以要动态表格,这些动态都是要通过插叙数据库来确定的,使得原来值查询一下就搞定的事,现在要查询 好几下,这样是不是会带来性能的问题,真是有所得必有失,在这个基础上增加什么模块,增加页面,很方便,制定一个表格Id,搞定!
那天做什么了?呵呵,又在补日志,哈哈,上午配置要增加模块的项目,下午培训了,oracle的性能优化,公司的dba,好强,专业的有点听不懂,这要是 到外面培训,这半天肯定得不少钱,哈哈,这个模块增加可能要求两个星期完成,希望没什么绊脚的,哈哈,发现我总是有懒惰的阵营在作怪,其实应该多学习多进 步的,光希望问题好解决一些,分给我的任务简单一些,这样怎么能进步,懒惰是不行地。
评审中......
狗日的,评审了半天回来了,没意思,脖子疼(扭着脖子看幻灯看的),没意思,整了半天,谁做的设计谁负责开发,狗日,我还多了一块还得负责到底......
最新消息,我被从这个项目中暂时抽出来了,去做别的,要两周的时间,那这个可能就不负责了,本来就没有什么涉及到业务的地方,哈哈,好了,我去干别的了,希望不会太难,呵呵呵
柯达 主要机型有4大系列:p系列为全功能系列,具备手动功能;z系列为大变焦系列;c系列为简约系列;v系列为时尚轻薄系列,v系列中的v570开创了双镜头数码相机的先河,具有鲜明的特点。
柯达相机最大特点是成像色彩鲜艳,比真实的景物要鲜艳不少,讨人喜欢,但细节表现略差。近两年柯达在市场策略上有不少失误,总体开始走下坡路,但不管怎么说,柯达仍是目前非日系的最佳选择。
周六加了一天班,而且晚上回去都八点了,真是加班中的加班,又分了一个模块给我设计,只是安装自己的思路和以前的一点点经验,把用例、类图、时序图弄出来 个模样,也不知道符不符合规矩,周日又来了半天,就我一个人,中午就回去了,周六中午吃的丽华快餐,还不错,米饭少了点,呵呵呵呵。
因为周日弄了个差不多,今天只做了写小的改动,没什么事,中午吃饭回来困的坐着睡着了,哈哈,太厉害了。明天评审设计。
又周五了,呵呵,这几天都在跟uml和rose打交道,用例图,包图,类图,组件图,顺序图,协作图,这个图那个图,......
哈哈,我的bolg鲜有人跟帖,没想到这次没写完就下班了,跑回家一看,有人评论啦,哈哈,高兴,谢谢wpfonline,有人评论是让人高兴的事情。
折腾了一星期,终于把该画的图画了个差不多,每天快要下班的时候就头疼的厉害,不转了一样,哈哈,功夫不负有心人,小头儿说我们几个新来的就我做的还可以,成就感油然而生,哈哈,不过顿时又粘了,小头儿说明天他们几个加班你也过来帮他们做做吧,呜呜,原来做好要加班,做不好也要加班。
接着画我的图,现在已经有三个版本了,越来越充实,但还不知道合不合格,搞到现在头疼的厉害,真他娘的。
不管三七二十一,先抓张图,瞅瞅,呵呵,劳动成果呢。
今天下了个netBeans6.0m9,下下来狗日的,不让我装
郁闷了我半天,说没找到JDK,我的环境变量设置的挺好的啊,Eclipse就没事嘛
还专门下了jdk6还是不行,气死我
又搞了一天uml,结果到下午一问,不是这么回事,我狂晕,没心情改了明天再说吧,今天又忘了拿培训的uml书了,明天一定要想着,虽说入夏了,但这两天还算凉快,早上出来还稍稍有些冷
五一回来的第一天,到这就忙着做用例图,包图,类图,组件图,我天,哈哈,忙了一天还算有成果,自己看着还算满意,不知道人家看着怎么样了。
呵呵,今天做昨天的事,补了一大堆日志
培训第二天,做了一些简单的报表例子,做复杂的报表用它还是值,简单的就用excel生成html得了,呵呵
五一前 的最后半天班,倒是事情不少,因为前两天培训,而制定计划的人没有把这算在内,所以很急,画用例图,概要设计,详细设计,靠,还真不怎么会弄这些东西,设计,哈哈,高层人做的东西,好好学吧。
培训,报表的培训,润乾报表,哈哈,看起来能让写程序的省很多事,虽然跟excel差不多的模式
今天,上午培训,讲requirsitepro,好像还是从外面请来的人,不过也不过如此。
月底了,期盼着发工资。
培训,上午开会讨论模块重用的征集,下午培训功能点估算的知识,讲的还不错,中午把信寄出去了,等反馈.
周三了,没什么事,写了封家书.天气真的热了,热了让我烦躁。
今天温度真的升高了,苍天,我惧怕的夏季就要来了,一天下来也没做什么,看了看UML,朋友介绍有小试了一把C#,要用代码调用winrar来实现压缩包的解压,捣鼓了半天,终于出来了,没什么新鲜的,不过,现在是2.0了,确实有很多在1.1中没见过的类和方法,还有一些dll,看来要好好充充电了,哈哈.
转眼,到了这个月底就上班一个月了,呵呵,虽然不是很忙没做什么重要的事,已经开始盼望着发工资了,呵呵,会是多少呢。
困了,不写了。
一天天一年年很快过去,呵呵,一天又过去了,自己没事画了画那个邮票系统的用例图,有个画的跟千手观音似的,哈哈。两外在csdn上逛发现netBeans宣传力度很大啊,下了一个安装,第一感觉跟jbuilder差不多嘛,没有什么新鲜感。
今天刚被同学骂了一顿,呵呵,应该是同学吧,呵呵
“(2007-04-23 13:02:44) 淡淡一笑(125233419)
我也不想跟你聊,最后再送你一句话:你真不是个男人,别活着了,死去啊,别以为自己有什么了不起的.
(2007-04-23 12:59:51) 朝春文(122088025)
多谢”
呵呵,我已经驰名了,哈哈,收效也慢了点,呵呵
狗日的...
新的一周,五一前的最后一周,周末再次与强大的“专制”交锋,也许是我的强硬,也许他们真的相通了,也许我高估了他们的那么专制,总的说来到现在好像取得 了小小的胜利,比想像的轻松,现在想起来好像有点做梦的感觉,有点不敢相信,这是真的么?他们什么时候这么好说话了?也许是我真的翅膀长硬了,他们制不住 了,不对,应该明确一个大道理,他们所做的一切还是都是为我好的,只是他们不了解我。
事情先这样吧,既然大方向定了,其他的事应该水到渠成了吧,好好爱那个叫小娜的妞妞吧,欠她很多了。
把交给我做的那个页面做完了,整理了两个例子,一个是jdbc连接oracle的例子,一个是jdbc从weblogic连接池获取数据源的例子,帖在下面供以后参考
public class Test {
public static void main(String[] args) {
DataSource ds = null;
Context ctx = null;
Connection myConn = null;
try {
/*
* 获得WebLogic ServerJNDI初始上下文信息
*/
ctx = getInitialContext();
/*
* 建立数据源对象
*/
ds = (javax.sql.DataSource) ctx.lookup("datasource");
} catch (Exception e) {
e.printStackTrace();
}
}
private static Context getInitialContext() throws Exception {
String url = "t3://localhost:7001";
String user = "";// 对应的weblogic管理名字
String password = "";// 密码
Properties properties = null;
try {
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
if (user != null) {
properties.put(Context.SECURITY_PRINCIPAL, user);
properties.put(Context.SECURITY_CREDENTIALS,
password == null ? "" : password);
}
return new InitialContext(properties);
} catch (Exception e) {
throw e;
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class OraSqlConnection {
private String url = "jdbc:oracle:thin:@localhost:1521:主机字符串";
private String user = "username";
private String password = "pwd";
private Connection conn;
public OraSqlConnection() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("get connection success");
}
public Connection getConnection()
{
new SqlConnectionUtil();
return this.conn;
}
public static void main(String[] args) {
new SqlConnectionUtil();
}
}
其中需要的oracle驱动是一个叫classes12.jar的包
哈哈,签下债了,要写的这天也什么事,借来的笔记本还给人家了,呵呵,没的玩了
没分配什么活,签的合同公司盖了章发下来了,还发了个卡,让上下班打卡,哈哈,下了班尝了尝鲜,就这样开始了我的民工生活,想想以后的日子,大概也就是这样吧.
希望有一天,我可以没有心事的做我的工作,过我的生活.谢谢.
一天又过去了,马上夏天就要来了,中午出去吃饭,见外面漫天飞舞着杨树开花结下的果实,跟旁边来自湖南的同事说那是杨树结下来的,并指给他看哪个是杨树,哈哈,他从没有见过,这两天越发严重,温度升高了,今天晚上回来空气中飞的跟下雪一样让人呼吸困难.
今天上午没什么事,看着需求分析培训的文档试着写那个邮票管理系统的功能 列表,没写完,中午吃完饭回来就被叫去安排了个小活儿,作个小页面,实现update,要连oracle数据库,以前知识上课的时候学过,后来几没用过 了,折腾了半天,在网上搜,发现我竟然忘了个一干二净哈哈,然后就是竟然要我把所有的java代码在jsp文件里写,我日,弄得我那个晕呐,真佩服他们那 些复杂的页面是怎么写出来的.
好了不说这些罗嗦的了。
新的一周,今天请假去照身份证的像了,狗日的,打的费花了40呜呜呜。
把前两天做的上传图片的程序加上了spring,现在成了struts+spring+hibernate,Ioc控制反转,spring封装的我们什么也看不见,配置以下就可以用这个对象了。
昨天干啥了?呵呵,昨天没过来写,哈哈现在是周五了,噢对,哈哈,昨天有活干了,让我做一个上传图片,把图片报存在数据库中,然后再读出来显示,要能查 询、添加、删除。好了动手吧,以前做过一个上传图片,但是不是把图片报存在数据库中,大同小异了。把关键代码贴在这里,供以后参考。
-----------------------------上传页面---------------------------------------------------------------
<%@page contentType="text/html; charset=gb2312" %>
<%@ taglib uri="/WEB-INF/struts-html" prefix="html"%>
<html>
<head>
<title>上传图片</title>
</head>
<body>
<h2>选择图片(JPEG格式, 大小小于1M)</h2>
<br>
<html:form action="/upload.do" enctype="multipart/form-data">
<html:errors/>
<table>
<tr>
<TD><html:file property="file" size="50"></html:file></TD>
</tr>
<TR height="20" valign="top" topmargin="0">
<TD>备注:</TD>
</tr>
<tr>
<TD><html:textarea rows="3" cols="40" property="memo"></html:textarea></TD>
</TR>
<tr>
<tr height="20">
</tr>
<tr>
<TD height="22" align="center">
<html:submit> 上 传 </html: submit> <input type="button" value=" 取 消 " onclick="window.close()"/></TD>
</tr>
</table>
</html:form>
</body>
</html>
--------------------------------------action--UploadAction-----------------------------------------------------
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setCharacterEncoding("gb2312"); //如果不设置,弹出的提示框是乱码
UploadForm uploadForm = (UploadForm) form;
FormFile file = uploadForm.getFile();
String memo = uploadForm.getMemo();
String fileName = file.getFileName();
int length = file.getFileSize();
InputStream imgStream = null;
ActionMessages msgs = new ActionMessages();
//向数据库插入记录
try {
imgStream = file.getInputStream();
UserImg newUserImg = new UserImg();
newUserImg.setImg(imgStream);
newUserImg.setImgName(fileName);
newUserImg.setMemo(memo);
newUserImg.setFileSize(length);
if(UploadImageDao.getInstance().insertImg(newUserImg))
{
response.getWriter().write(
CSScript.alertAndCloseScript(MessageKey.IMAGE_UPLOAD_SUCCESS));
return null;
}
else
{
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
MessageKey.IMAGE_UPLOAD_FAILED));
saveErrors(request, msgs);
}
} catch (IOException e) {
msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
MessageKey.IMAGE_UPLOAD_FAILED));
saveErrors(request, msgs);
} finally {
try {
if (imgStream != null)
imgStream.close();
} catch (Exception e) {
//do nothing here
}
}
return mapping.getInputForward();
}
--------------------------------------弹出提示框的类----------------------------------------------------------
public final class CSScript {
private static final String S_OPEN = "<script>";
private static final String S_CLOSE = "</script>";
public static String alertAndCloseScript(String alert)
{
StringBuffer sb = new StringBuffer(S_OPEN);
sb.append("alert('").append(alert).append("!');");
sb.append("window.close();");
sb.append("window.opener.document.location.reload();");
sb.append(S_CLOSE);
return sb.toString();
}
public static String errorScript(String err)
{
StringBuffer sb = new StringBuffer(S_OPEN);
sb.append("alert('").append(err).append("!');");
sb.append(S_CLOSE);
return sb.toString();
}
public static String alertScript(String alert)
{
StringBuffer sb = new StringBuffer(S_OPEN);
sb.append("alert('").append(alert).append("!');");
sb.append(S_CLOSE);
return sb.toString();
}
}
---------------------------------------插入数据库的方法-----------------------------------------------------
public boolean insertImg(UserImg userImg)
{
Session session = HibernateSessionFactory.getSession();
Transaction tran = session.beginTransaction();
try
{
Connection conn = session.connection();
PreparedStatement psta = conn.prepareStatement("insert into userImg values(?,?,?)");
psta.setString(1,userImg.getImgName());
psta.setBinaryStream(2, userImg.getImg(),userImg.getFileSize());
psta.setString(3, userImg.getMemo());
psta.execute();
tran.commit();
}
catch(Exception e)
{
e.printStackTrace();
tran.rollback();
return false;
}
finally
{
HibernateSessionFactory.closeSession();
}
return true;
}
注意,这里可以看到涌到了hibernate的session,但还是用的jdbc插入数据库,是因为hibernate对image类型的字段支持不好。
-----------------------------------------读取图片的action-getImg.do-----------------------------------------------------------
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
int id = Integer.parseInt(request.getParameter("id"));
InputStream inStream = UploadImageDao.getInstance().getImg(id);
response.setContentType("image/pjpeg");
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = inStream.read(buffer, 0, 1024)) != -1) {
baos.write(buffer, 0, bytesRead);
}
OutputStream outs = response.getOutputStream();
outs.write(baos.toByteArray());
outs.flush();
inStream.close();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
页面中显示图片,这么写
<img width="100" height="100" src="getImg.do?id=<bean:write name="list" property="id"/>" />
以夸耀公司为荣、以唾骂公司为耻,
以拉拢客户为荣、以投靠客户为耻,
以崇尚技术为荣、以黑人电脑为耻,
以多写代码为荣、以拷贝粘贴为耻,
以团队协作为荣、以偷干私活为耻,
以无私奉献为荣、以跳槽走人为耻,
以办事听话为荣、以迟到早退为耻,
以收发伊妹为荣、以提笔耗纸为耻
工作日志
2007年4月11日 星期三
上班的第二个星期,昨天,临下班的时候终于能上网了呵呵,上一个星期里,真的是煎熬啊,还不如交给我一些事做,让我忙活忙活 ,什么事都没有,没人理,电脑没有网络,刚重装的系统,什么软件没有,哦天哪,想起以前石家庄的那个公司,虽然规模不大,但是很温馨,给刚去的员工配一名 导师来帮助 新员工融入新集体,还带着到各部分 认识同事,呵呵,这倒好,整个没人理,哦天,这就是大公司?唉 ,也不算什么大公司,与石家庄的我的那家公司比吧,真的是比较失望,什么都不给讲,莫名其妙的,什么时候上班什么时候下班都不给讲,可能还没正式开始? 唉,算了不说了,乱七八糟的。
说说今天吧,还是说昨天,呵呵,昨下午来了个人(据说是我们部门的老总)把我们邮箱要去了,然后能上网了就受到了封邮件,说是要培训,先自己学习一下,今 天到了就打开电脑,开始看,真的很郁闷,和我同去的几个人,都有人安排事做,就没人理我,真的是纳闷有郁闷,狗日的,到底是为啥?看我能力不行?
下午吃完中午饭回来,趴了会儿,刚清醒过来,来了个人,让我们去听课培训,让去就去吧,结果是讲销售方法的,我晕,听吧,还是能听到一些有意义的东西的, 我发现我们部门也没多少人啊,狗日的,连我们部门头儿是谁,都不知道,呵呵,是不是我有问题?我应该主动去问?是这样么?
听课下来听的我头疼,下班了 回家 呵呵。一天就这么过去了。真快。
创建时间:2007年4月4日, 10:58:38
年前买的Effective java到今天就看了三条,今天带到公司看。写这书的人有多丰富的经验阿,太
有才啦,哈哈,各种情况面面俱到,太厉害了,边看边佩服人家,哈哈。书上的每一句话,都要得
仔细的琢磨,仔细的回味,真的回味无穷,受益匪浅,相信像我这样的水平还没有体会出更深层次
的内涵,先写下自己的一点体会。
创建和销毁对象
--避免创建重复对象
这里的说法都不是绝对的,对于比较庞大的对象创建成本是昂贵的,而这个对象是不变的,
所以我们可以重用它,以减少内存增加。
避免创建重复对象的方法,有几种,这要看在什么场合,可以使用静态工厂方法,可以使
用static代码块,可以使用延时加载(也就是只有在需要这个对象的时候才在第一次初始
化)
--消除过期的对象引用
这里面有个名词,就是过期引用,过期引用就是那些已经没有实际用处的引用,这些对象
引用不会被垃圾回收机制发现,所以必须由程序员手动告诉垃圾回收机制这个对象引用没
用了,可以回收了,如何告诉它呢,把引用=null就可以了。
--避免使用终结函数
finalizer函数不能保证会被调用,这一点增加了不确定性,简单的说finalizer这家伙是
不可信任的,交给它的事可能办,也可能不办,这是不确定的,所以我们不能放心的交给
它重要的任务。
如果想清理某个对象,可以考虑在try...catch...finally{中执行},它能保证即使产生异
常,也能保证清理会被执行。
上周五第一天上班,到今天,每天都在这死死的坐着,一个除了系统文件没有其他任何东西的机器,
没有网络,没有人理,真是无聊的人,怎么也得给介绍一下公司的情况,讲讲作息时间,各项制度、
规定之类的,几点上班几点下班都没说过,大家都在忙什么?有事找谁都不知道,我晕。
一个上午又过去了,无聊,发发牢骚,呵呵。
java Studio Creator
java.lang.IllegalArgumentException:Cannot invoke ***Form.set*** - argument type mismatch
Form中是Date类型,把Date换成String;在Action中进行转换;当然转换要借助于SimpleDateFormate方法
上传文件时在form中增加enctype="multipart/form-data"
org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of com.cs.data.project.ProjectImage.setShenbao1
查询结果中包含null的项 对于一些数字项包含null,定义该项时必须使用wrapper类型,而不能是primitive类型,例如使用Integer等,而不能是int否则会抛出exception!
1.250定律
拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客,也 就意味着得罪了250 名顾客。 在你的网站访客中,一个访客可能可以带来一群访客,任何网站都有起步和发展的过程,这个过程中此定律尤其重要。
2.达维多定律
达维多认为,一个企业要想在市场上总是占据主导地位,那么就要做到第一个开发出新产品,又第一个淘汰自己的老产品。 国内网站跟风太严重,比如前 段时间的格子网,乞讨网,博客网,一个成功了,大家一拥而上。但实际效果是,第一个出名的往往最成功,所以在网站的定位上,要动自己的脑筋,不是去捡人家 剩下的客户。同理,买人家出售的数据来建站效果是很糟糕的。
3.木桶定律
水桶定律是指,一只水桶能装多少水,完全取决于它最短的那块木板。这就是说任何一个组织都可能面临的一个共同问题,即构成组织的各个部分往往决定了整 个组织的水平。 注意审视自己的网站,是速度最糟糕?美工最糟糕?宣传最糟糕?你首先要做的,不是改进你最强的,而应该是你最薄弱的。
4.马太效应
《新约》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆人 说: “主人,你交给我们的一锭银子,我已赚了10锭。”于是国王奖励他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。” 于 是国王例奖励了他5座城邑。第三个仆人报告说:“主人,你给我的一锭银子,我一直包在手巾里存着,我怕丢失,一直没有拿出来。”于是国王命令将第三个仆人 的一锭银子也赏给第一个仆人,并且说:“凡是少的,就连他所有的也要夺过来。凡是多的,还要给他,叫他多多益善。”这就是马太效应。 在同类网站中, 马太效应是很明显的。一个出名的社区,比一个新建的社区,更容易吸引到新客户。启示是,如果你无法把网站做大,那么你要做专。作专之后再做大就更容易。
5.手表定理
手表定理是指一个人有一只表时,可以知道现在是几点钟,而当他同时拥有两只表时却无法确定。
一个网站,你只需要关注你特定的用户群需求。不要在意不相干人的看法。
6.不值得定律
不值得定律:不值得做的事情,就不值得做好 不要过度seo,如果你不是想只做垃圾站。不要把时间浪费在美化再美化页面,优化再优化程序,在你网站能盈利后,这些事情可以交给技术人员完成。
7.彼得原理
劳伦斯.彼得认为:在各种组织中,由于习惯于对在某个等级上称职的人员进行晋升提拔,因而雇员总是趋向于晋升到其不称职的地位。
不要轻易改变自己网站的定位。如博客网想变门户,盛大想做娱乐,大家拭目以待吧。
8.零和游戏原理
当你看到两位对弈者时,你就可以说他们正在玩“零和游戏”。因为在大多数情况下, 总会有一个赢,一个输,如果我们把获胜计算为得1分,而输棋为-1 分,那么,这两人得分之和就是:1+(-1)=0 不要把目光一直盯在你的竞争网站上,不要花太多时间抢它的访客。我们把这些时间用来寻找互补的合作 网站,挖掘新访客。
9.华盛顿合作规律
华盛顿合作规律说的是: 一个人敷衍了事,两个人互相推诿, 三个人则永无成事之日。 如果你看准一个方向,你自己干,缺人手就招。不要轻易找同伴一起搞网站,否则你会发现,日子似乎越过越快了,事情越做越慢了。
10.邦尼人力定律
一个人一分钟可以挖一个洞,六十个人一秒种却挖不了一个洞。合作是一个问题,如何合作也是一个问题。
你需要有计划。
11.牛蛙效应
把一只牛蛙放在开水锅里,牛蛙会很快跳出来;但当你把它放在冷水里,它不会跳出来,然后慢慢加热,起初牛蛙出于懒惰,不会有什么动作,当水温高到它无 法忍受的时候,想出来,但已经没有了力气。 如果你是soho,注意关注你的财务。不要等到没钱了再想怎么挣,你会发现那时候挣钱更难。
12.蘑菇管理
蘑菇管理是许多组织对待初出茅庐者的一种管理方法,初学者被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上一头大粪(无端的批评、指责、代人受过),任其自生自灭(得不到必要的指导和提携)。
做网站毕竟要遭遇这样的阶段,搜索引擎不理你,友情链接找不到,访客不上门。这是磨练。
13.奥卡姆剃刀定律
如无必要,勿增实体。
把网站做得简单,再简单,简单到非常实用,而不是花俏。google的首页为什么比雅虎好?
14.巴莱多定律(Paredo 也叫二八定律)
你所完成的工作里80%的成果,来自于你20%的付出;而80%的付出,只换来20%的成果。
随时衡量你所做的工作,哪些是最有效果的。
1.马蝇效应
林肯少年时和他的兄弟在肯塔基老家的一个农场里犁玉米地,林肯吆马,他兄弟扶犁,而那匹马很懒,慢慢腾腾,走走停停。可是有一段时间马走得飞快。 林 肯感到奇怪,到了地头,他发现有一只很大的马蝇叮在马身上,他就把马蝇打落了。看到马蝇被打落了,他兄弟就抱怨说:”哎呀,你为什么要打掉它,正是那家伙 使马跑起来的嘛!” 在你心满意足的时候,去寻找你的马蝇。没有firefox,不会有ie7,firefox就是微软的马蝇之一。马蝇不可怕,怕的 是会一口吃掉你的东西,像 ie当初对网景干的那样。
2.最高气温效应
每天最热总是下午2 时左右,我们总认为这个时候太阳最厉害,其实这时的太阳早已偏西,不再是供给最大热量的时候了。此时气温之所以最高,不过是源于此前的热量积累。
你今天的网站流量,是你一个星期或更长时间前所做的事带来的。
3.超限效应(溢出效应)
刺激过多、过强和作用时间过久而引起心理极不耐烦或反抗的心理现象,称之为“超限效应”。 别到别人论坛里发太多广告。别在自己网站上放太多广告。别在自己的论坛里太多地太明显地诱导话题。
4.懒蚂蚁效应
生物学家研究发现,成群的蚂蚁中,大部分蚂蚁很勤劳,寻找、搬运食物争先恐后,少数蚂蚁却东张西望不干活。当食物来源断绝或蚁窝被破坏时,那些勤快的 蚂蚁一筹莫展。“懒蚂蚁”则“挺身而出”,带领众伙伴向它早已侦察到的新的食物源转移。 不要把注意力仅仅放在一个网站上,即使这个网站现在为你带来 一切。你要给自己一些时间寻找新的可行的方向,以备万一。
5.长尾理论
ChrisAnderson认为,只要存储和流通的渠道足够大,需求不旺或销量不佳的产品共同占据的市场份额就可以和那些数量不多的热卖品所占据的市 场份额相匹敌甚至更大。 对于搜索引擎,未必你需要一个热门词排在第一位,如果有一千个冷门词排在第一位,效果不但一样,还会更稳定更长远。
6.破窗理论
栋建筑上的一块玻璃,又没有及时修好,别人就可能受到某些暗示性的纵容,去打碎更多的玻璃。 管理论坛时,如果你发现第一个垃圾贴,赶紧删掉他吧。想想:落伍现在为什么那么多××贴?现在控制比最初控制难多了。
7.“羊群效应”,又称复制原则(Copy Strategy)
一个羊群(集体)是一个很散乱的组织,平时大家在一起盲目地左冲右撞。如果一头羊发现了一片肥沃的绿草地,并在那里吃到了新鲜的青草,后来的羊群就会一哄而上,争抢那里的青草,全然不顾旁边虎视眈眈的狼,或者看不到其它地方还有更好的青草。
不要轻易跟风,保持自己思考的能力。
8.墨菲定律
如果坏事情有可能发生,不管这种可能性多么小,它总会发生,并引起最大可能的损失。
除非垃圾站,否则不要作弊,对搜索引擎不要,对广告也不要。
9.光环效应
人们对人的某种品质或特点有清晰的知觉,印象比较深刻、突出, 这种强烈的知觉, 就像月晕形式的光环一样,向周围弥漫、扩散,掩盖了对这个人的其他品质或特点的认识。
不要轻易崇拜一个人或者公司、一个概念、一种做法。
10.蝴蝶效应
一只亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,两周后,可能在美国德克萨斯州引起一场龙卷风。
不管你做什么,网站或者其他,你都应该关注新闻。机遇或者灾难可能就在那。
11.阿尔巴德定理
一个企业经营成功与否,全靠对顾客的要求了解到什么程度。 我赞同别人的点评:看到了别人的需要,你就成功了一半;满足了别人的需求,你就成功了全部。
尤其是做网站。
12.史密斯原则
如果你不能战胜他们,你就加入到他们之中去。
不要试图做孤胆英雄。如果潮流挡不住,至少,你要去思考为什么。
org.hibernate.exception.JDBCConnectionException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:307)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:109)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
at org.hibernate.loader.Loader.doQuery(Loader.java:661)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:223)
at org.hibernate.loader.Loader.doList(Loader.java:2147)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2026)
at org.hibernate.loader.Loader.list(Loader.java:2021)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:369)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:298)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:137)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1014)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
Caused by: java.sql.SQLException: Network error IOException: Connection refused: connect
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:372)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:178)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:304)
... 40 more
这是我刚刚重做的系统,配了java的环境,在tomcat下启动一个项目的错误提示,找了半天sql连接字符串中的密码 sa之类的错误,无果,后来想到是不是sqlserver没装sp3的问题,立马从网上下了sp3装,再试,成了,哈哈,这种拒绝连接的错误,想来也不是密码不对,记得以前见过密码不对的情况,会提示sa密码不正确,令我纳闷的是我的另一个机子是2000系统好像也没有装过sp3,也能用啊。
复习一下java虚拟机配环境变量,设两个,一个path=java目录的bin文件夹,另一个classPath=java目录的lib文件夹,这次在装eclipse的时候打开报找不到虚拟机的错,配了环境变量就好了。
哈哈,装了一晚上的机,学了复习了不少东西。明天干活,哈哈,睡觉。
好久 没上来写了 ,课上完了 ,忙着找工作
这些日子 从年前到现在 一直在 忙那个邮票系统,学了不少东西,现在终于看到曙光了,呵呵,发现自己 整理业务逻辑思路的能力不够,不会抓住重点,看来这还是讲求一套方法的,那个有经验的家伙很容易的就抓住了问题的重点,提的问题都是在点子上了,果然是高手,呵呵 。
写代码是很有意思的,很有技巧的,有的设计是很妙不可言的 ,哈哈 好像用词不当,期间又很多知识 感觉写下来的,可能是过于急于进度。
希望快点找个工作挣钱,呵呵快顶不住了
什么是J2EE、J2SE、J2ME
随着Internet网络的迅速发展,基于互联网的企业应用要求软 件平台具有开放性、分布性和平台无关性。于是就相继出现了RPC/COM/CORBA等技术,但这些技术在实际应用中存在着许多不足和局限。它们的特定协 议难以通过防火墙,因而不适于Web上的应用开发。为了进一步开发基于Web的应用,出现了Sun公司的Sun ONE(Open Net Environment 开发网络环境)和Microsoft公司的.net等Web 服务技术体系。
Sun ONE体系结构以Java语言为核心,包括J2SE/J2EE/J2ME和一系列的标准、技术及协议。它包括Sun独有的iPlanet软件系列,其中有 在市场上受欢迎的LDAP目录服务器软件,以及Forte for Java――便于在任何环境下书写Java 语言的软件工具。我们很容易就能从网上免费获得和使用包括Java 集成开发环境、Java数据库和中间件(Application Server)服务器等产品,以及它们的源代码。Sun ONE更接近或能满足互联网在智能化Web服务方面对分布性、开发性和平台无关性的要求。
随 着Java技术的不断发展,它根据市场进一步细分为:针对企业网应用的J2EE(Java 2 EntERPrise Edition)、针对普通PC应用的J2SE(Java 2 Standard Edition)和针对嵌入式设备及消费类电器的J2ME(Java 2 Micro Edition)三个版本。本文就Sun ONE的Java核心应用――J2SE/J2EE/J2ME作一些介绍。
J2EE技术应用
J2EE是Sun公司推出的一种全新概念的模型,比传统的互联网应用程序模型更有优势。
J2EE模型
J2EE的应用编程模型(J2EE Blueprints)提供了一种用于实施基于J2EE多层应用的文档和实例套件的体系模型,简化了这项复杂的工作。它被开发人员用作设计和优化组件,以便开发人员从策略上对开发工作进行分工。
J2EE应用编程模型要求开发者将自己的工作分成两类:商业逻辑和表示逻辑,其余则由系统资源自动处理,不必为中间层管道进行编码。这样,开发人员就能将更多的时间花在商业逻辑和表示逻辑上。对重视缩短项目周期的公司来说,这种转变深受欢迎。
J2EE平台
J2EE 平台是运行J2EE应用的标准环境,由J2EE部署规范(一套所有J2EE平台产品都必须支持的标准)、IETF标准集和CORBA标准组成。最新的 J2EE平台还添加了JavaBean组件模型。开发人员可以利用JavaBean组件模型来自定义Java类实例,并可通过已定义的事件访问Java 类。
J2EE支持EJB,因此开发人员可以执行多用户交易功能。当在J2EE服务器上运行时,Enterprise JavaBeans将应用逻辑分成可再利用和可扩展的代码段。Enterprise JavaBeans并不是新特征,但是通过定义标准客户端和服务API,J2EE增强了它的能力和可移植性。
EJB在服务器的一个容器内运行,提供所有典型的中间层服务,如事务管理、安全、远程客户连接、生存周期管理和数据库连接缓冲。为了让事务系统在存在EJB容器的情况下运行,开发人员只需在部署描述文件中定义Beans的事务属性即可。
J2EE通过定义一组标准的结构来实现它的优势,例如:
1.J2EE Application Programming Model,是一种用于开发多层次、瘦型客户用户程序的标准设计模型;
2. J2EE Platform,是一个标准的平台,用来整合J2EE的应用程序,并指定一系列的接口和方法;
3. J2EE Compatibility Test Suite,是一套兼容测试组件,用来检测产品是否同J2EE平台兼容;
4.J2EE Reference Implementation,用来示范J2EE的能力。
J2EE服务器
Sun 的J2EE服务器通过Java 命名和目录接口(JNDI)、认证、HTTP及与Enterprise JavaBeans兼容的能力,提供命名和目录服务。JNDI是Java平台的一种标准扩展版,向企业内的命名和目录服务提供具有Java功能的,带有统 一接口的应用,包括LDAP。
J2EE服务器还利用了Java Servlet技术。Java Servlet可以看作是运行在服务器上的一个小程序,它向开发人员提供以组件为基础创建基于Web应用的、独立于平台的方法。它不像利用CGI那样具有 性能局限。Java Servlet是一种扩展Web服务器功能的简单技巧。由于它是用Java编写的,因而能够访问整个Java API库,也包括用于访问企业数据库的JDBC API。
JSP是Java Servlet的一种扩展。Java Servlet提供开发和显示来自服务器的交互式Web页。如今JSP又有了进一步的改进,它使得创建和支持静态模板和动态内容相结合的HTML和XML页面更加容易。
安全性
J2EE 平台定义了一种标准的公开存取控制规则,当程序在企业平台上开发时就已被程序师定义和解释了。J2EE也需要提供一个标准的注册机制,以便应用程序不会将 这些注册机制和逻辑相混合,从而使相同的工作执行于大量的不同环境中时并不需要改变源代码。例如:J2EE应用程序开发人员可以指定几个安全级别,当用户 访问数据时,他们可写出代码来检查当前用户权限的级别。在开发阶段,开发人员赋予多组用户适当的安全级,使应用程序在执行限制操作之前能够容易的判断限制 级。
J2EE 平台是Java技术企业级应用的最佳平台,它可以让程序员迅速、快捷地开发和分布企业级应应用程序。以下便是它的相关技术:
1.Enterprise JavaBeans Architecture,企业级JavaBeans 定义了一个应用程序接口。它可以使程序员迅速开发、发布和管理跨平台的、基于组件的企业级应用程序。
2.JavaServer Pages,JSP 技术提供了一种简单、快速的方法来创建动态网页。通过它,可以快速地开发基于Web的应用程序,并且这些应用程序都是与平台无关的。因为JSP与ASP很相似,所以熟悉ASP的人学习它就很容易了。
3.Java Servlet,提供了应用程序接口。通过它可以简单快速地开发并扩展服务器功能。就发展趋势来看,它将来有可能取代CGI。
4.J2EE Connector,提供了一种标准结构来联接不同的企业信息平台。
5.Java Naming and Directory Interface(JNDI),在Java 平台与商业信息之间,JNDI提供了统一、无缝的标准化连接。通过使用JNDI,程序员可以在企业多命名与目录服务之间传送Java 应用程序。
6.Java Interface Definition Language(JIDL),通过使用CORBA,可以提供协同工作的能力。JIDL包括一个IDL-to-Java 编译器和支持IIOP(Internet Inter-Orb Protocol)的ORB。
7.JDBC,几乎是为所有的数据库提供了统一的接口,同时可以创建高级工具和接口。
8.Java Message Service(JMS),它几乎规范了所有企业级消息服务,如可靠查询、发布消息、订阅杂志等各种各样的PUSS/PULL技术的应用,并且为它们提供了一个标准接口。
9.Java Transaction API(JTA),为分布式系统中可处理的应用程序规定了一个高级的管理规范。
10.JavaMail,JavaMail应用程序接口提供了一整套模拟邮件系统的抽象类。通过JavaMail,可以创建邮件或消息应用程序。
11.RMI-IIOP,使用它就可以只用Java 技术和Java RMI接口开发客户机与服务器的远程接口。
J2EE 使用固定的文件格式捆绑某个模块:用.ear文件捆绑J2EE应用程序;用.jar捆绑Enterprise Bean。例如,一个.ear文件包含一个.xml文件作为其分布描述,还包含一个或多个.jar和.war文件;一个.jar文件除了包含它的分布描述 外,还包含了作为Enterprise bean的.class文件。
J2EE应用程序的开发阶段分为四步:1.Enterprise Bean创建;2.Web Component创建;3.J2EE应用程序装配;4.J2EE应用程序分布。以下是J2EE兼容产品部分列表:
BEA WebLogic Server 6.0、Borland App Server、HP Bluestone Total-e-Server、IBM WebSphere Application Server、IONA iPortal Application Server、iPlanet Application Server、Macromedia JRun Server、Oracle 9i Application Server、SilverStrean Application Server、Sybase EAServer、TogetherSoft ControlCenter、Java 2 SDK Enterprise Edition。
J2ME技术的应用
J2ME (Java 2 Platform Micro Edition)是为无线电子市场所设计的,包括JVM规范和API规范。其API规范是基于J2SE(Java 2 Standard Editon)的。J2ME 定义了一套合适的类库和虚拟机技术。这些技术可以使用户、服务提供商和设备制造商通过物理(有线)连接或无线连接,按照需要随时使用丰富的应用程序。
J2ME 又被称为Java 2 微型版,被使用在各种各样的消费电子产品上,例如智能卡、手机、PDA、电视机顶盒等方面。当然了,J2ME也提供了Java语言一贯的特性,那就是跨平 台和安全网络传输。它使用了一系列更小的包,而且Javax.microedition.io 为J2SE包的子集。J2ME可以升级到J2SE和J2EE。
在J2ME出现之前,我们更多接触到的是Java卡(Java Card)、嵌入式Java(Embedded Java)和实时Java(Real Time Java)等。其中Java卡是针对SIM卡、智能卡等设备而定制的最小Java子集,比J2ME还要小,移植性也不强。嵌入式Java则针对特殊用户自 行配置Java类库和VM(Virtual Machine,虚拟机)。它对资源需求极小,可运行在无图形用户接口和网络的设备上,可以添加用户专用的API,但是它就无法移植。实时Java是由 IBM领导的实时定制Java专家组负责实施的,现在还在不断完善中。不过,从严格意义上来说,它们都不是真正的J2ME。
像其它版本一样,J2ME具有很多Java技术特性,主要有:
1.可以在各种支持Java的设备上运行;
2.代码短小;
3.充分利用Java语言的优势;
4.安全性好;
5.用J2ME实现的应用可以方便地升级到J2SE、J2EE。
J2ME的配置和框架
为了支持用户和嵌入式市场提出的灵活性和可定制性要求,J2ME被设计得更加模块化和可缩放化。J2ME在设备原有的操作系统上建造了3层软件来实现这种要求:
1.JVM层,这层基于宿主操作系统,按照某一种J2ME的配置,实现了JVM。
2.配置层,这层对于用户可见度要低一些,但对框架层非常重要。它针对“水平”市场的需求,定义了Java虚拟机的最小功能集和Java类库的最小集合。在某种意义上,配置层定义了开发者在所有设备上都可以使用Java特性和类库的“最小公分母”。
3. 框架层,这层对于用户和应用程序提供者来说是最常见的。它针对“垂直”市场的需求,定义了Java虚拟机的最小功能集和Java类库的最小集合。其框架是 基于特定的配置层实现的。只要设备支持相同的框架层,针对特定框架层开发的应用程序就可以移植到其它设备上。一个设备可以支持多个框架层。
在J2ME 设备中,JVM与配置层紧密相连,它们体现了每一类设备的基本功能。框架层针对不同的设备,在配置层的基础上规定了附加的API。为了满足不断更新的应用 程序,框架层可以扩充新的Java库类。在不远的将来,随着新设备的不断出现,J2ME技术将提供范围广泛的框架层、配置层和VM。JCP(Java Community Process)可以为客户和开发商提供规范。根据JCP的定义,J2ME目前的一种配置层是“面向连接的设备配置”层(Connected Device Configuration),它采用典型的Java虚拟机技术。这种全功能的VM包含了基于台式机系统上的虚拟机的所有功能,适用于拥有至少几兆字节内 存的设备。对于无线设备和其它内存不足的设备,J2ME采用“面向连接的受限设备配置”(CLDC)技术。
KVM是J2ME的核心特 征。它是一个可移植性非常高的JVM,专用于内存小、资源有限、能上网的设备,例如蜂窝电话、寻呼机和个人组织器等。这些器件一般都含有16或32位的处 理器,最低128KB内存。KVM能够被灵活应用到各种行业、各种类型的设备上,并能够适应这些设备的多样化所带来的问题,比如处理器的耗电量、内存的大 小、设备和应用程序的特殊功能等问题。
CLDC技术
CLDC定义了目标Java平台,该平台基于小型的、资源较少的、内存仅有160~512K的设备。CLDC是由KVM和用在蜂窝电话、数字产品、双向寻呼机、个人组织器和家用电器等核心库类及接口组成。使用CLDC技术有很多优点:
1.跨平台,这点保留了Java一贯的特点,应用程序不会随着平台差异而产生变化。
2.动态性,这点也是很吸引人的,可以根据需要下载自己喜欢的应用程序和服务,并且可以和其它的CLDC设备通信。
3.安全性,Java 本身的特点造就了这一特性。
与 J2SE相比,CLDC缺少下列所说的特征:
1.AWT(抽象窗口开发包),Swing或其它图形库;
2.用户定义类装载器;
3.类实例的最终化;
4.弱的引用;
5.RMI;
6.Reflection(映射)。
CLDC 有四个包:java.lang、java.util、java.io和javax.microedition。除了javax.microedition 包以外,其它的几个包都是J2SE包的核心子集。CLDC采用这些J2SE类库,但是把其中一些在微型设备中用不到类、属性和方法去掉了。
J2ME定义两个配置:Connected Device Configuration(连接设备配置,CDC)和限制性更强的Connected Limited Device Configuration(有限连接设备配置,CLDC)。
J2SE技术的应用
Java 2标准版是一种开发和部署平台,提供了编写桌面、工作站应用程序所有必需的功能。J2SE软件是快速开发、部署关键任务和企业应用程序的首选解决方案。 J2SE 1.4版本是基于Java跨平台技术和强有力的安全模块而开发的,其最新的特征和功能极大地提高了Java语言的伸缩性、灵活性、适用性,以及可靠性。
J2SE 1.4 特点:
1.良好的计算性能和缩放能力。
J2SE 1.4版是一个快速开发和配置跨平台的企业级应用与服务的综合性平台。它提升了Java计算的性能与缩放能力,代表了Java技术的大跨步进展。有了 J2SE 1.4版,企业就可以通过更简易的步骤、花费更少的时间,采用Java技术开发与配置要求更高的应用了。J2SE 1.4版在Java客户机应用方面得到了重大性能提升。基于Swing的Java小程序和应用程序在图形用户界面(GUI)的响应速度上也大有提高。
2.跨平台。
J2SE 1.4版是一个具有综合性能的平台,能使一个完整的、可缩放的高性能应用配置在任何种类的平台上。
3.支持Web服务。
J2SE 1.4版与以前各J2SE版全面兼容。J2SE 1.4版对SSL、LDAP和CORBA等业界标准技术也给予支持,因此保证了在不同平台、系统和环境间的互操作能力。J2SE 1.4版支持XML技术和一整套安全服务,因此为基于各类标准的可互操作应用与服务的创建奠定了重要基础。有了J2SE 1.4版与Java Web Services Developer Pack的结合,开发商就能创建、测试和配置Web服务了。
4.完整性。J2SE 1.4版还是一个完整的开发环境。开发商可基于这一环境创建功能丰富的交互式应用。这些应用可以配置在任何平台上。J2SE 1.4具有新的GUI控制功能、快速的Java 2DT图形功能、支持国际化与本地化扩展和新的配置选项,并对Windows XP提供扩展支持。
总之,J2SE 1.4版是多种不同风格软件的开发基础,包括客户端Java小程序和应用程序,以及独立的服务器应用程序等。J2SE 1.4版还是J2ME的基础,是J2EE执行程序的推动力。
Java 之所以能够发展得很快,是因为互联网的发展非常快。Java可以和浏览器结合在一起,因而很自然地在桌面系统得到广泛应用。从计算的结构来看,Java主 要分三大类:第一是服务器端,这里就有了J2EE企业版;第二是桌面PC,这一类用的是J2SE标准版;第三就是掌上电脑、移动设备,用的都是J2ME。 但是,大部分非企业级软件还是在J2SE上开发的比较多。首先,这是因为很多的应用软件都是在J2SE上开发的;其次,J2SE是和J2EE兼容的,企业 版是在标准版上的扩充,在J2SE的版本上开发的软件,拿到企业的平台上是一样可以运行的;再次,一般开发还是在J2SE的环境上,只是说J2ME提供微 型版的一个环境。在J2SE上虚拟出一个环境,开发出来的应用软件是可以拿到微型版上运行的。
public class Test
{
public void changeApple(Apple a)
{
Apple a2 = new Apple();
a2.color = "red";
a = a2;
}
public void changeApple2(Apple a)
{
a.color = "red";
}
public static void main(String[] args)
{
Apple a = new Apple();
a.color="blue";
new Test().changeApple(a);
System.out.println(a.color);
new Test().changeApple2(a);
System.out.println(a.color);
}
}
class Apple
{
public String color;
}
//输出结果:blue
red
我这只猪要在猪年也是第一次要独自一人过春节了,不知道为什么,没有别人那么深的恋家情结,有人问我,你不想家么,你不想你妈么?我不知道说什么,呵呵!
刚刚看了高中时就喜欢得一个电台主持人--清音的博客上的类似年终总结的文字,我想,我也应该总结一下吧,索性打开猪窝,呵呵,发现没有人看,浏览人数还是那些,哈哈。
今年三十儿,除夕,中国人来说最重要的节日,刚才去超市,那个人叫多阿,原以为三十儿了,应该大多数人年货都该买个差不多了吧,只等在家守岁了,没想到还是那么火爆,看来城市人还是和我们乡下不一样啊。
06年,我大学毕业了。毕业了,不再是学生了,不用再抄作业了,坐火车不再打折了,离开了那些同居四年的兄弟们,自此各自各处漂泊~~
06年,凭我自己的能力找了自己第一份工作。欣喜,激动,开始踏实工作,感谢部门经理对我的关照,让我从另一个起跑线起跑。
06年,我也挣钱了,哈哈,花自己挣的钱的感觉,舒服~~,老爸说为什么你总在花你爸的钱总像隔一层,呵呵,长大了,想自食其力了。
06年,害得她死去活来,痛。
06年,刻下伤疤的一年,挣扎。
06年,掉进河里,想逆流而上,并开始行动。
07年,应该会有一次暴风骤雨,一定要战胜。
找回自己
大年二十五了,呵呵,刚才和一朋友在QQ上聊,过年没什么感觉了,和平时没什么两样,倒是给自己找了个邋遢的冠冕堂皇的理由。
2006过去了,过去一段时间了,黑色的2006,再见。
几个月的培训日子基本上结束了,这些天一直在住的地方猫着,呵呵,就是,一天不下楼不出屋,用某人的话说我没什么爱好,除了正事什么也不做,呵呵,这话我爱听,我做的又有哪些是正事呢。培训了几个月,感觉,没什么感觉,呵呵,对找工作还是有心虚,哈哈,也不能因为这样培一辈子训不是,哈哈,还得向前。还差得远。这几个月写了这么多的日志,算是一个不小的收获吧,
2007会是什么样子,网上说2007夏天的温度将破纪录,呵呵,看来得有心理准备了。
中间还有一个过年,还有几天,感觉像是一个门槛,得怎样迈过去阿/。
网络真是好东西,遇到什么问题,都可以问它哈哈,这不,刚刚解决了几个小问题,使我的程序顺利通过了,哈哈
我想这么写
<html:hidden property="bookId" value="<bean:write name="bookForm" property="id">"></html:hidden>
这么写就不行,报equal symbol expected的错误,用Google翻译过来是“预期符号相同”
在网上查
可以这么写
<html:hidden property="bookId" value="${bookForm.id}"></html:hidden>
但必须jsp2.0以上,servlet2.4以上
在web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
还有个小问题就是在web.xml中如果配置<taglib></taglib>标签,就会有个红叉,说什么
cvc-complex-type.2.4.a: Invalid content was found starting with element 'taglib'. One of '{"http://java.sun.com/xml/ns/j2ee":description, "http://java.sun.com/xml/ns/j2ee":display-name, "http://java.sun.com/xml/ns/j2ee":icon, "http://java.sun.com/xml/ns/j2ee":distributable, "http://java.sun.com/xml/ns/j2ee":context-param, "http://java.sun.com/xml/ns/j2ee":filter, "http://java.sun.com/xml/ns/j2ee":filter-mapping, "http://java.sun.com/xml/ns/j2ee":listener, "http://java.sun.com/xml/ns/j2ee":servlet, "http://java.sun.com/xml/ns/j2ee":servlet-mapping, "http://java.sun.com/xml/ns/j2ee":session-config, "http://java.sun.com/xml/ns/j2ee":mime-mapping, "http://java.sun.com/xml/ns/j2ee":welcome-file-list, "http://java.sun.com/xml/ns/j2ee":error-page, "http://java.sun.com/xml/ns/j2ee":jsp-config, "http://java.sun.com/xml/ns/j2ee":security-constraint, "http://java.sun.com/xml/ns/j2ee":login-config, "http://java.sun.com/xml/ns/j2ee":security-role, "http://java.sun.com/xml/ns/j2ee":env-entry, "http://java.sun.com/xml/ns/j2ee":ejb-ref, "http://java.sun.com/xml/ns/j2ee":ejb-local-ref, "http://java.sun.com/xml/ns/j2ee":service-ref, "http://java.sun.com/xml/ns/j2ee":resource-ref, "http://java.sun.com/xml/ns/j2ee":resource-env-ref, "http://java.sun.com/xml/ns/j2ee":message-destination-ref, "http://java.sun.com/xml/ns/j2ee":message-destination, "http://java.sun.com/xml/ns/j2ee":locale-encoding-mapping-list}' is expected.
虽然对程序运行没什么障碍,但对我这个完美主义总是心里不舒服,在网上查
http://blog.csdn.net/heroying/archive/2007/02/03/1501873.aspx
给出了解释
把<taglib></taglib>放在<jsp-config></jsp-config>里面就行了,哈哈,不错不错。
increment(递增)
用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 在集群下不要使用。
identity
对DB2,mysql, MS SQL Server, sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long, short 或者int类型的。
sequence (序列)
在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。
hilo (高低位)
使用一个高/低位算法来高效的生成long, short或者 int类型的标识符。给定一个表和字段(默认分别是是hibernate_unique_key 和next)作为高位值得来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。在使用JTA获得的连接或者用户自行提供的连接中,不要使用这种生成器。
seqhilo(使用序列的高低位)
使用一个高/低位算法来高效的生成long, short或者 int类型的标识符,给定一个数据库序列(sequence)的名字。
uuid.hex
用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。
uuid.string
使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用在PostgreSQL数据库中
native(本地)
根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
assigned(程序设置)
让应用程序在save()之前为对象分配一个标示符。
foreign(外部引用)
使用另外一个相关联的对象的标识符。和<one-to-one>联合一起使用。
有一个星期没有写日志了,这些日子过得有些狼狈,哈哈,差点睡大街去。因为临时的变故不得不去上课去找房子租,光电话费就花了近百,在网上搜索信息,尽是些代理,说心里话,感觉他们的运作模式还是比中介有优越的,但还是对他们天花乱坠的说法不放心,在网上查了些代理公司的资料,也有很多网友骂他们说话不算数的。最后决定不着代理,哈哈,通过连夜搬家,终于一月的最后一晚,有地方睡了,昨晚收拾到一点多。
同时,这几天也没写代码,光东奔西看房了,因为鞋有点不合脚,左脚肿了,今天来上课,迟到了一个小时,也没做什么,我做的那个BookShop跟老师做的那个思路不能衔接,不能跟着他往下走,按安排,明天最后一天了,狗日的,要放一个月假,不负责任的做法嘛。
住的危机暂时解决了,该恢复正常学习了。
临时计划改变,开始做项目了,有点赶时间的味道,从需求分析开始,昨天画了画用例图,没什么感觉呵呵。
今天基本上没干活 ,呵呵,上午做了个测试servlet的例子,感觉不爽,用了一个叫 仙人掌 的 web 测试一框架,闹半天还得找它自己的运行错误,不用说测试我自己的了,狗日的,不过测试技术还是很重要的,后天开始做项目,一定要设计一个好点的,哈哈,争取能够上线爽一爽。
发现google的搜索记录功能真是好用,可以将以前搜索的东西记录下来,可以找到很多以前找过的资料。
这两天,蒸腾了两个例子,听说一个叫struts-menu的框架可以实现基于struts的菜单,照着网上的例子,自己摆弄了一个,哈哈,这东西好,可以做出不同样式的菜单,然后又用struts\struts-menu\spring\hibernate\sqlserver2000实现一个从数据库读取的动态树形菜单,好家伙这可折腾死我了,代码早早的一口气写完了,剩下一堆错误,有些甚至莫名其妙的,大部分时间都在这上面了,这周在学junit,看来很重要,要养成测试的好习惯,按照模块来测试,不能一个程序写好了,再这找那找错,太浪费时间了,这次就是,上来就给我一个下马威,505错误(网络服务器错误)actionServlet不可用,检查struts-config.xml和applicationContext.xml的配置没有见检查出来不对,想必是spring或者hibernate的错误了,在struts-config.xml解除跟spring的关联,直接在action中调用,spring的dao方法,这下可好,哈哈,出来一堆错误,都是不小心的这错那错,一通改之后,最后卡在
hibernate java.lang.ClassCastException: [Ljava.lang.Object
上,是hibernate报的错误,发现在查询后得到的List不知道里面是什么类型,不能强制转换成我的持久类,不能转换成map,那是什么呢,因为我的查询语句是复合查询,最后发现List是Object[],是个Object类型的数组,我见过List里面是Map,持久类,Object[]了,Map是在spring里面通过spring的jdbcTemplete返回的List,里面是Map集合,Map的键是数据库表的字段名,后两个是在hibernate里,一个表查询可能就是返回持久类类型,多个表查询就是Object[]类型了?但Object[]里面是什么,我这里发现里面是每条记录的值,在网上查到,还有可能是多个持久类(多表查询,这个说法我没试过呢),这样把List里取出的转换成Object[],这个错误算是通过了,还有个hibernate java.lang.ClassCastException: java.lang.Integer
[org.apache.struts.action.RequestProcessor] - <Unhandled Exception thrown: class java.lang.NullPointerException>
哈哈,下午没上课,今天开始的Junit,上午睡了一半的觉,下午无意中看到一个利用google翻译实现的控制台程序,拿过来,刚学的ajax,复制粘贴添加删除,哈哈就成了,但是有个小bug,中文翻译成英文是乱码,其他语言倒是基本没问题,哈哈,可能是编码的问题。还不知道怎么解决。
javascript脚本
function doTranslate()
{
var text = document.getElementById("source").value;
var langpair = document.getElementById("langpair_t").value;
if(text=="")
{
return;
}
alert(text);
var requestURL = "http://translate.google.com/translate_t?langpair="+langpair+"&text=" + text;
httpRequest = getHttpRequestObject();
httpRequest.onreadystatechange = processHttpResponse;
httpRequest.open("GET",requestURL,true);
httpRequest.send(null);
}
function parseXMLResponseInText()
{
if(httpRequest.responseText!="")
{
var content = httpRequest.responseText;
var s1 = "<div id=result_box dir=ltr>";
var s2 = "</div>";
var begin = content.indexOf(s1);
var end = content.indexOf(s2,begin);
var restr = content.substring(begin + s1.length,end);
document.getElementById("result_box").innerText = restr;
}
}
function processHttpResponse()
{
if(httpRequest.readyState == 4)
{
if(httpRequest.status == 200)
{
parseXMLResponseInText();
}
}
else
{
document.getElementById("result_box").innerText = "正在翻译...";
}
}
function getHttpRequestObject()
{
var httpRequestObject;
if (window.XMLHttpRequest)
{
httpRequestObject = new XMLHttpRequest();
}
else
{
if (window.ActiveXObject)
{
try
{
httpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
try
{
httpRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e2)
{
alert("您的浏览器有问题!");
}
}
}
}
return httpRequestObject;
}
明天接着Junit,呵呵。
对了,刚听说一个struts-menu,回去研究研究,好像以前在.net里见过一个实现类似树形框架的控件,还可以实现权限控制,这个也差不多,在网上搜了搜,有好多介绍,等做了例子出来。
为了一个用jbuilder2006+weblogic部署webservices,老师弄不出来,而且运行jbuilder再加上weblogic机器慢的要死,一次一次的重试,时间啊。就是不动,哈哈。
最后在网上搜到下面的问题。说是因为jbuilder和weblogic的lib文件版本兼容问题,还有就是weblogic8.1sp3以前的版本不支持sourcerootforupload,所幸重装了weblogic,原来是8.1.3的,现在装了个9.2的,结果在经过漫长的等待后,终于成功部署了,但是还是由于机器太慢,没看效果,明天再试一试吧。
Why am I getting the error Unrecognized option or flag, -sourcerootforupload ?
In order to maintain compatibility between the 8.1 and 9.0 version of the plugin I used a new flag on the deployment engine.
The flag was added with service pack 4 on 8.1. If you are not on service pack 4 or later you will see this error. If you send a note
to the mojo mailing list I can create a special version for service pack 3 and earlier.
还有就是如果出现
Build Failed: The failure is due to a known compatibility issue with WebLogic and Ant 1.6 as WebLogic includes an older version of Ant.
的错误就删除WebLogic安装目录下的weblogic81/server/lib/ant下的ant.jar和optional.jar就行了,而我重装成了weblogic9.2以后也没报这样的错误。晕,真让人晕头转向。
昨天看effective java第二条,建立单立模式,有两种方式,两者都需要构造函数是私有的,一种是,声明一个public static final的属性初始化为这个类的实例,然后直接用类名.属性名返回这个对象,另一种是声明一个private static final的属性,在静态方法中返回这个static final 的对象,这么做的好处就是有回旋的余地,比如不想永远只返回一个相同的对象了,容易修改。在效率上,两种方式应该是不相上下的,因为好的编译器能够监测到内联。
时间在一天一天的过,快过年了,这个年不好过啊。
被熊猫烧香病毒折腾了一中午,我被间接传染了,我的移动硬盘里查到了五个,还好没有在我的电脑里感染,在网上下了个专杀,专杀链接。
另:怎样预防熊猫烧香系列病毒?
转自:金山毒霸信息安全网
最近那个熊猫烧香病毒让所有用电脑的人很生气,熊猫这个国宝似乎不再可爱,而成了人人喊打的过街老鼠。熊猫变种实在太多,中招后的损失很严重,杀毒软件一直在救火中。以下几招很简单易行,帮你预防熊猫烧香病毒,至少能明显减少你中招的几率。
1.立即检查本机administrator组成员口令,一定放弃简单口令甚至空口令,安全的口令是字母数字特殊字符的组合,自己记得住,别让病毒 猜到就行。修改方法,右键单击我的电脑,选择管理,浏览到本地用户和组,在右边的窗格中,选择具备管理员权限的用户名,单击右键,选择设置密码,输入新密 码就行。
2.利用组策略,关闭所有驱动器的自动播放功能。
步骤:单击开始,运行,输入gpedit.msc,打开组策略编辑器,浏览到计算机配置,管理模板,系统,在右边的窗格中选择关闭自动播 放,该配置缺省是未配置,在下拉框中选择所有驱动器,再选取已启用,确定后关闭。最后,在开始,运行中输入gpupdate,确定后,该策略就生效了。
3.修改文件夹选项,以查看不明文件的真实属性,避免无意双击骗子程序中毒。
步骤:打开资源管理器(按windows徽标键+E),点工具菜单下文件夹选项,再点查看,在高级设置中,选择查看所有文件,取消隐藏受保护的操作系统文件,取消隐藏文件扩展名。
4.时刻保持操作系统获得最新的安全更新,建议用毒霸的漏洞扫描功能,汗,很可惜,现在光缆还没修好,网不通,不好修复。
5.启用windows防火墙保护本地计算机。
Today,webservice,axis,jbuilder2006
今天做了两个基于Tomcat的webservice,Tomcat本身不支持webservice,需要有一个axis的插件,说白了就是jar包来支持,webservice利用xml基于soap协议传输来调用远程方法,在客户端和服务器端都有业务提供类的一个接口,他们通过wsdl语言来定义提供的哪些服务,客户端解析服务器端提供的wsdl生成业务类的接口,这样客户端就可以远程调用了。
利用jbuilder2006构建webservice是很简单的,所有复杂的都自动生成了,但其中还是有些一些bug,比如今天遇到的,建立了一个web应用程序用来提供服务,在通过向导添加webservice服务器端的时候,就是不出现先前建好的web应用,最后在网上查原来是:在JBuilder 2006中建立WebService的服务器端程序的时候,不管怎么试都是卡在建立WEB MODULE这个地方了。主要是JB2006自带的TOMCAT的问题--------把建立WEB MODULE时的 SERVLET版本改成SERVLET 2.3,JSP版本改成JSP1.2就不会卡住了。晕。
昨天看effective java,第一条,试着用静态工厂方法替代构造函数,原因有:
1、静态工厂方法有名字,可以让人知道这个对象构造出来是什么,比如一个类需要提供几个构造函数,它们有不同的函数原形(函数原型包括函数名和函数的参数但不包括函数的返回类型),这样很可能让用户不能清楚地知道每个构造函数是做什么用的,除非去看文档,而将其中几个构造函数用静态工厂方法代替,解决了这个问题。
2、静态工厂方法可以返回不同的对象,这特别适用于面向接口编程,按照提供的参数可以返回接口的不同的实现。
3、静态工厂方法可以不象构造函数那样每次都创建新的对象,可以是单立的,也可以不创建重复的对象,也就是如果两个对象的属性值相等就不创建新的返回已经存在的。
另外,还提到了静态工厂方法的缺点,1、如果一个类将构造函数设成了private的,用静态工厂方法来创建对象,那么这个类将不能被继承,因为子类不能调用父类的构造方法(已设成私有)。2、静态工厂方法跟其它静态方法没有任何区别,所以必须给它们起一个合适的名字,比如getInstance().,这种说法破坏了已有的规则,但规则,对象都是由构造函数创建的,但使用静态工厂方法又有它的独到的好处。所以在取舍上,作者这样说,在实际开发中,如果没有足够的理由,还是老老实实的使用构造方法来创建对象,毕竟这是已有的规则。
今天练习了dwr与struts和spring集成,其中与struts集成有点小错误还没查出来,在网上找资料也没有解决。Spring集成倒是挺爽的,顺便回顾了spring的设置,如果spring和strtus集成,首先无论哪种方式都需要在struts-config.xml中以插件方式引入spring的一个加载类ContextLoaderPlugin
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
</plug-in>
可以用spring的一个接口DelegatingRequestProcessor替换org.apache.struts.action.RequestProcessor类,在web.xml中设置.
还可以将struts的Action类交给spring的代理类来处理。
还有就是如果只是简单web应用,不用struts,那么在web.xml配置文件中配置一个spring监听器或者servlet,例如
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
这样在用到spring Ioc中的对象时就用WebApplicationContextUtils来加载。
在IBM的developerworks网站上看java的基础教程,将编写修良java代码的建议
1是保持类最小,如果你的类有100个方法,可能就要考虑考虑是不是要设计成几个对象。呵呵,100个,还没写过,不过想象中应该有,大型的复杂系统。
2是保持方法最小,一个方法只做一件事。
3是给方法取个好名字,好名字用处太大了,呵呵呵,特别是别人看别人的代码时,特别是过了一段时间以后,再来看写的代码,特别是系统比较大比较复杂时,我们的脑子没计算机好使。
4是保持类的数量最小,有时间看看极限编程的东西。这句话好象和第一句话有点矛盾,类的数量少了,类就变大了,类变小了,类的数量多了,呵呵,这可能具体情况具体分析吧,让它们之间达到个平衡点,教程上一句话说的好:在不影响清晰度的情况下尽量的减少类。
5是保持注释的数量最少,我刚刚看到这一点的时候,有点吃惊,因为我遇到的老师都鼓励我们有良好的注释习惯,而且是边写代码边加注释,而不是写完代码后统一再加注释,总之是强烈建议写注释的,因为这样便于阅读代码,而这里建议我们保持注释最少,理由是,当更新代码时维护代码时还要同时更新注释,因为那些注释同时也过期了,这回徒增工作量,解决办法是尽可能的使代码清晰。经可能的,想尽一切办法的。
6是一致的代码风格,C# C++的代码风格好象和java的不太一样。有人喜欢习惯这样有人喜欢那样。
7是避免switch.优先用if,然后再switch.
8是public的,有足够的理由不是public的,呵呵/作者把最有争议性的放在了最后.
9是追随Fower,这是个人名,写了本书叫Refactoring,因式分解呵呵,查了查chinpub,中文版叫《重构:改善既有代码的设计》,明天去逛逛书店。
引用作者的一句话
"
编写 Java 代码相当简单。编写优良的 Java 代码则是一门手艺。倾力成为一个手艺人。
"
继续作dwr的练习,做了个动态显示用户信息,最后因为一个相对路径问题郁闷了我半天,原来在用eclipse新建jsp页的时候它给自动加了个<base href="<%=basePath%>">,以至于我的图片一直显示不出来,找相对路径,想了好多法,最后发现原来症结在这,删了它,皆大欢喜,哈哈,图片读出来了,哈哈,是个小人儿鞠躬的小图片,一列小人在那鞠躬,哈哈,有成就感,要不早出来了,以为这么个小小的问题,耽误了那么多时间,还有,小郭的那个更简单的错误,找了半天,最后发现一个单词错了,display写成display了,好家伙,不仔细看,还真看不出来。
明天又休息了,租的房子该到期了,刚在跳蚤市场上转了转,有点胆怯,哈哈,怕掉进陷阱,呵呵,再有手头的资金也不宽裕,钱啊。
DWR,哈哈,又是一个框架,的确让开发者少写了很多代码,又是配置配置,哈哈,一路的东西,dwr的配置,首先引入dwr.jar这个包,还有两个用于生成日志的两个包,然后在web.xml中配置启动dwr的servlet,并且配置dwr.xml的路径,跟struts配置一样,在dwr.xml文件中配置要映射的类以及方法,然后启动服务器,在<webroot>/dwr中查看是否配置正确,在这个页面中dwr告诉我们每映射一个类,就要添加一个相应的js文件引用,之后在自己的js文件中调用映射的文件就可以了。
今天注册中国移动的那个飞信,气死我了,说我验证码不正确,打客服,接电话的小姐真实嘴皮子利落,都不给我插嘴的机会,移动怎么培训的,个人性格问题,先头打得那个就比较老实,呵呵呵。
今天做了两个ajax的简单小例子,领略到javascript查找错误的困难了,呵呵,真是想象不出那些大型网站的应用,那么多的javascript脚本代码,是怎么调试的呢,明天看看那个DWR,看看这能不能带来惊喜,呵呵呵,ajax确实能给用户带来极爽的用户体验,但是编码麻烦了许多,代码多了许多,体验了几个ajax应用的网站,google的在线office,Gmail,yahoo的email也是ajax的了。
以为今天周四了呢,哈哈,过的真慢,有时候嫌过的快,有时候嫌过的慢,真难伺候,有人说我挺快乐的还,那语气好像我正常情况下应该是郁闷的,没错,我就是沉浸在那些代码里的时候,暂时忘掉暂时不去想那些只能叹气的事,所以不想出来,出来了发现现实还是现实,呵呵,我佛保佑,平平静静。
看编程思想去。
写了这么多,回过头,也不知所云。
快乐的秘诀
想快乐一点吗?美国加州大学心理学家桑雅‧柳柏莫斯基在几经研究之后,提出八点具体可行的做法:
心存感激:
拿一本「感恩簿」,将三至五件你目前心存感激的事项记下来。这些可以是俗事(养的牡丹花盛开了),可以是惊喜之事(小孩开始学走路了)。每周记录一次(例如,固定星期日晚间),保持鲜活,内容愈常更换愈好。
时时行善:
可分随机的(排队时,让赶时间的人排前面),有系统的(每周日固定拿晚餐给邻居那位老人)。对朋友或陌生人仁慈一点,会产生积极效果,让自己感觉很慷慨、很有能力,也会赢得别人笑容、赞许及仁慈回馈。这些都会让人感觉快乐。
品尝乐趣:
多注意那些能让人短暂快乐及惊喜之事,例如草莓的甜味、阳光的和煦。心理学家建议,不妨将快乐时光如照相一般「印存脑海中」,在痛苦时翻出来回味。
感谢贵人:
如果有人在你人生走到十字路时,提携或指导过你,要赶快向他答谢。越详尽越好,最好是亲自答谢。
学习谅解:
如果有人伤害你、误会你,就写封信给他表示原谅,也让自己怒气怨恨得以发泄。无法谅解他人会让自己积怨、心怀报复,谅解则会让你大步往前。
珍惜亲友:
对生活满意与否,其实与钱财、头衔、甚至健康关系不大。最大因素是人际关系的和谐。多花点时间及精力在朋友亲人身上。
照顾身体:
充足睡眠、运动、伸展四肢、笑口常开都可短时间内改善心情。常做这些动作会提升生活满意度。
因应难关:
人生不免有难。宗教信仰可助你度过。不过一些平凡无奇信条也可。例如「事情总会过去。这次也一样!」、「任何打不死我的事,会让我变得更坚强。」关键就在,你必须相信这些信条。
不知道什么时候,也重新关注起这些来了,呵呵,我想回到从前...,我要回到从前,即便前面的路并不好走,那才是我自己,呵呵,好了不说了。
做了个应用ajax的小练习,最后部署看结果的时候出了莫名其妙的问题。
引用js文件出错的问题
将javaScript单独放在一个js文件里,执行没反应,把javaScript直接放在jsp页中正常。
js代码都是复制的,用得都是一样的,疯了都,让旁边几个人看了甚至老师也看不出问题,代码上没有任何问题,无奈在qq群里问,大伙给出了好多注意,也都不行,有人认为是文件路径问题,有人为使大小写问题,经检查都没错,真疯了,在网上搜,google翻了五页,看到一哥们的blog写类似的问题,正合我的症状,原来是编码的问题,要把js文件保存成和其他jsp文件保存成相同的编码,否则就不认,我晕,问题总算解决了,原来我的js文件为了不使中文变成乱码用EditPlus保存成UTF-8了,而我的jsp页用eclipse建的是ISO-8859-1编码。
哈哈,问题解决了,甚感轻松。
昨天晚上看编程思想的类型检查,关于RTTI运行时类型检查的原理,在每个类编译成class的时候,就会产生一个特殊的对象,Class对象,被保存在.class文件中,这个Class对象来标识这个类,当要生成这个类的对象的时候,JVM虚拟机会查找这个类的Class对象是否存在,若不存在就查找这个类的.calss文件,并将其加载,看来这个Class对象就像这个类的一个标识,也可以从Class对象得知这个类的类型(当一个类被加载的时候,static代码块被执行,如果有,这让我理解了在jdbc中初始化数据源的时候,为什么要用Class.forName()来加载驱动程序类,可能是就是为了执行驱动程序中的静态语句块吧)
开始了一门新课,也是个新东西,ajax,这东西,刚开始,简单的接触,由javascript、xml实现的一种无刷新技术。
Javascript是一种解释型脚本语言,所谓脚本语言,区别于编程语言,它不需要一个完成的程序文件的形式就能存在,只需要一组代码就能运行,这是跟编程语言的最大区别,编程语言必须有一个完整的程序文件。
Javascript的内置对象,String、Math、Date、Array、Screen、
浏览器内置对象window,navigator
Window下有location\history\document
Navigator主要提供一些浏览器信息。
今天不知怎么的了,老困,今天早点睡,呵呵!
最后一种方式就是声明控制的事务处理了,这里面基本上都是在xml文件中配置,在代码中见不到任何有关事务的类型,实现了非侵入。其原理用到了Ioc对象反转控制和AOP,到现在我还没弄清楚Aop是怎么个玩意儿,哈哈,还得好好学。
在spring的配置文件中设置一个代理类对象,其中的属性包括,要代理类的接口,要代理的哪个类,事务的处理方式,这样在数据实现类中调用数据库的方法中就像没有用事务一样写代码,另外在控制器中调用这个处理方法的时候,以前是要通过Ioc获得一个数据实现类的对象,现在,这个实现类被代理的,我们只需得到这个代理类的对象,然后用这个代理类的对象调用相应的数据处理方法。
Xml配置文件中的部分配置:
<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>springmvcwebapp.UserLoginInterface</value>
</list>
</property>
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="target">
<ref bean="oneUserLoginImple"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="doUpdateUserInfo*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
</props>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebStudyDB</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
用代码控制实现事物管理的另一种方式,就是通过使用TransactionTemplate模板类,TransactionTemplate封装了事务管理的功能,包括异常时的事务回滚,以及操作成功后的事务提交。和JdbcTemplate一样,它使得我们无需在琐碎的try/catch/finally代码中徘徊---也就是为我们省去了部分事务提交、回滚代码。
将上面的用户信息插入方法修改成下面这样:
TransactionTemplate类的构造器需要一个TransactionCallback接口类型的参数,而抽象类TransactionCallbackWithoutResult实现了TransactionCallback接口,抽象类TransactionCallbackWithoutResult中有一个TransactionCallbackWithoutResult()方法,该方法以TransactionStatus 为参数。所以就有了下面的用内部类的实现方式。
public boolean doUpdateUserInfo(UserInfoVO oneUserInfo)
{
//定义两个sql插入语句
String sql = "update userinfo set userPassword=? where userName=?";
String sql2 = "update userinfo1 set userPassword=? where userName=?";
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult()
{
public void doInTransactionWithoutResult(TransactionStatus status)
{
this.jdbcTemplate.update(sql, new Object[]
{oneUserInfo.getUserName(),
oneUserInfo.getUserPassword()});
this.jdbcTemplate.update(sql2, new Object[]
{oneUserInfo.getUserName(),
oneUserInfo.getUserPassword()});
}
});
return true;
}
这种方式,代码量少,少了try/catch/finally语句,全部被封装在了TransactionTemplate类里面,以内部类方式实现可能降低了代码的可读性。
哈哈,有人在我的blog上留言说也在学习spring,能不能传个例子共同学习一下spring的事物管理,我也是学了个一知半解,刚刚研究了研究。将其中的一点自己的理解写下来,共同学习。
Spring的事物管理有两种,一种是代码控制事物,一种是声明控制实现事物管理(也就是xml配置),咱先来说用代码控制实现事物管理,这种方式又分为两类,一种是实现PlatformTransactionManager接口的方法
查了一下帮助文档,实现了PlatformTransactionManager接口的有好多类,下面的例子代码是用的其中的DataSourceTransactionManager.
这是模拟用户注册的一个例子,下面的类实现于自定义接口UserLoginInterface(spring提倡的面向)该类里面定义了两个属性,一个是Spring的jdbc模版类,一个是事务管理器,并都提供了set方法,这两个对象将在Ioc中自动初始化加载。其中有一个叫UserInfoVO的值对象类,用来传递用户注册信息
//用代码控制实现事务管理其中的实现PlatformTransactionManager接口的方法
import java.util.*;
import org.springframework.context.*;
import org.springframework.jdbc.core.*;
import org.springframework.transaction.*;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.support.DefaultTransactionDefinition;
public class UserLoginImple implements UserLoginInterface
{
//Spring jdbc模版类
private JdbcTemplate jdbcTemplate;
//事务管理器 PlatformTransactionManager是一个接口
private PlatformTransactionManager transactionManager
//jdbc模版类对象的set方法
public void setJdbcTemplate(JdbcTemplate jdbcTemplate)
{
this.jdbcTemplate = jdbcTemplate;
}
//事务管理器的set方法
public void setTransactionManager(PlatformTransactionManager transactionManager)
{
this.transactionManager = transactionManager;
}
//插入用户信息的方法
public boolean doUpdateUserInfo(UserInfoVO oneUserInfo)
{
//定义两个sql插入语句
String sql = "update userinfo set userPassword=? where userName=?";
String sql2 = "update userinfo1 set userPassword=? where userName=?";
DefaultTransactionDefinition dtf = new DefaultTransactionDefinition();//事务定义
TransactionStatus status = this.transactionManager.getTransaction(dtf);//事务状态
try
{
this.jdbcTemplate.update(sql, new Object[]
{oneUserInfo.getUserName(),
oneUserInfo.getUserPassword()});
this.jdbcTemplate.update(sql2, new Object[]
{oneUserInfo.getUserName(),
oneUserInfo.getUserPassword()});
this.transactionManager.commit(status);
}
catch(Exception ex)
{
this.transactionManager.rollback(status);
return false;
}
return true;
}
}
关键看加粗的部分,首先定义一个事务,然后以这个事务为参数通过事务管理器创建一个事务状态,开始执行sql代码,最后事务管理器提交事务状态,完成。其间如果出现异常,事务管理器回滚事务状态。
我理解着,这里面用了设计模式中的一个叫Command命令的模式,首先定义一个执行者(事务对象),然后赋予执行者使命(事务状态),命令执行者执行其被赋予的使命,如果失败,命令执行者撤销执行的使命。
不知道理解的对不对,呵呵。
看编程思想的异常处理这一章,Throwable是所有异常的基类,Error和Exception分别继承了Throwable,Error是虚拟机运行报告错误,一般我们不用关心,Exception 是所有编程异常的基类,它又分为被检查异常和不检查异常,不检查异常是所有继承于RuntimeException的异常,这些异常编译器在编译时不进行检查,也就是不用有异常声明,遇到错误会自动抛出,被检查异常时除RuntimeException的异常,必须有异常声明,编程思想里面的说法好像大家对强制异常声明不是很赞同,理由没能理解深刻,都是大师们说的话,哈哈。咱还不够那个级别。
其中有这样一个问题,就是一个方法有一个异常必须作处理,可又不知道该如何处理,这里有个办法就是在catch里面将其转换成运行时异常RuntimeException,这样就不用异常声明了。
哈哈,刚刚看了异常处理这一章,今天就用上了,编好了一段hibernate的代码,测试就是没有结果输出,并且没有异常出现,真是让人恼火,找阿找阿找,最后发现在初始化SessionFactory的静态语句块中虽然用了try…catch语句但是在catch里面只是将异常抛出,而在跳用这段代码的时候,并没有获取这个异常,所以造成异常丢失。
另外,错误的原因是虚拟机找不到一个属性的get方法,换了个名字就好了,注意命名规则,一个小写字母然后接一个大写字母就不行,像这样sLive。注意/。
在执行Hibernate程序中出现下面错误
Could not read mappings from resource: DepartmentTwo.hbm.xml
检查也没错阿,找不到的文件老老实实在那呆着了阿,仔细检查异常信息,发现下面还有这么一句。
org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.hwebmapping.pojo.Department
原来一个持久类不能多次被映射,所以才出现这样的异常,原因是在做练习的时候为了省事,将原来做好的持久类想接着用一下,没想到Hibernate有意见,哈哈。
如果在调用session.save()方法的时候如果传入的对象所的类没有被映射,就会出现线面的异常信息。
uninitialized proxy passed to save()
未初始化的代理
不错,今天收获不小,哈哈。
转眼间跨到07年了,呵呵。
今天学习了Hibernate的List,Set,Map映射,它们都是应用类之间的内嵌方式,List和Set都是按数值索引,Set不能有重复值,List必须有一个Index字段,和主健形成联合主健,Map是以键值对形式的集合,也不允许重复,用那种方式取决于数据库表如何设计,和一对多不同的是,一对多采用关联方式,具体体现在持久类里面倒没看出什么差别,在配置文件上有差别,在实际应用中体会吧。
开始有就业的压力了。
转眼,几个月过去了,要找工作了,有些郁闷,没有底气阿,为什么?没好好学么?觉得还可以,呵呵,不知道人家是什么胃口,娘的。
花了这么多钱,不知道值不值,想想,我们这些参加什么培训的,都是些急于求成的东西,跑这来想速成,呵呵,天下没有什么速成,我要多长时间把这钱挣回来?半年?要是净赚还行,呵呵,不了解外界什么行情,想想,人家因为什么理由要我呢?呵呵,要学的还很多,也是,总不能等万事俱备再出山不是,那就出不了山了,怎么现在还没有在学校找工作那时候有自信了呢?那时候可能我还比周围人还有一些竞争力吧,现在?不知道自己在什么层面上,不知道自己有什么优势了。怎么越过越倒退呢,一晚上心烦,狗日的。
要元旦了,呵呵,日子怎么是这样的呢,我讨厌过节,昔日的好兄弟说我小子越来越孤僻了,得好好教育教育了,唉,确实如此,我倒想,没有人认识我,没有人找我,来无影去无踪,呵呵,不是我不想和人来来往往,热热气气,就像罗桑实说的,暖暖的都不想离开了。可是。今年下半年,我好想误入了一个大口袋一样的包围圈,进去了,口袋被慢慢扎紧,无法呼吸,我在努力挣脱,想出去,可是,又不想互相残杀,不想弄坏袋子,想和解,我还抱有希望,呵呵,希望有一天,我杀出重围。
讨厌过节。
刚刚搞定一个从昨天就搞不定的问题,都已经疯了,闹了半天,该了个名字就好了,我要做一个一对多的映射,一个出版社对应多本书,在Publish类里面定义了一个Set的eBook,就是这个eBook这个名字,换了个叫someBook就好了,想想,我的书类叫EBook,难道和这个有关系?纳了闷了,总是报Could not find getter for eBook in Publish类。
关于Hibernate的延时加载,如果出现
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.hwebmapping.pojo.Person.cats, no session or session was closed
的异常,就是Hibernate要读取数据的时候,Session已经关闭,可以用监听器的方法来在页面加载完成后关闭session.(implements javax.servlet.Filter).
出现下面这样的错误:
java.lang.NoClassDefFoundError
at com.hwebmapping.hibernate.HibernateDAOBean.doInsertCardDataToDB(HibernateDAOBean.java:337)
337行是下面finally中的语句
finally
{
HibernateUtil.closeSession();
}
经查原来是因为,在Card.hbm.xml中的类名写错了,找不到,但是报上面的错误让人有点摸不着头脑了,为什么是在closeSession的时候出现的异常呢,按理说应该在加载xml的时候就应该有异常了阿。费解。
<hibernate-mapping>
<class name="com.hwebmapping.pojo.Card" table="Card">
Hibernate第二天,没有抽出时间来写日志,呵呵,这两天过的有些没有规律。
涉及到Hibenate的核心api,SessionFactory,Session,Query,Transaction。刚开始搞得有点晕头转向,呵呵,hibernate比spring复杂,的确不用写什么sql语句,配配配还是配,就这配,非得仔细不可,就因为一个字母写错,就得找半天,报的错还声东击西。呵呵。
昨晚上在网上闲逛,看到了一篇文章,忘了记下来网址了,说学java的三个境界,哈哈,同志尚需努力啊。
------------------------------------------------
第一个层次:精通掌握Java语法、能调试基本的程序错误,精通掌握JSP+Java Bean写一些N年前ASP、PHP翻版的Java Web应用程序(如论坛、网站新闻发布系统、OA、网上商城等),精通JDBC使用、精通SQL语句、精通XML等。
第二个层次:掌握设计模式原理及应用,掌握基于OO的分析及设计方法,并能精通熟练使用几种Java专业设计及开发工具,精通掌握流行的J2EE框架如Hibernate、EJB、Webwork、Spring的原理及应用,精通J2EE中一两个组成部分(如Servlet、EJB等)的工作原理及细节。
第三个层次:少林的高僧有两种,禅僧及武僧。J2EE程序员的第三个层次也同样有禅、武两个分支,这里我们重点分析一下:
第一个分支属于走的禅僧线路。在练完第二个层次中的各种武功基础上,结合实际项目中的千奇百怪的用户需求,游刃有余的选择适合的技术方案为客户解决问题,并形成自己的一套解决方案。达到这一个层次的J2EE程序员已经不在乎使用任何工具、任何框架了,而是根据不同的对手,使用不同的武器或招式来应对。好比小李飞刀一样,只有达到了“手中无刀、心中有刀”的境界,才能达到“出手一刀,例不虚发”的效果。这一层次的武功属于一个熟练度问题,刀练得多了、遇到的对手多了,再加上前面的武功修为,就算做不到例不虚发,也可达到十发九中。
第二个分支属于走的武僧线路,在撑握熟悉第一二个层次中涉及到的内容后,进一步专研并撑握J2EE底层开发,J2EE规范制订、规范实现、Java虚拟机的工作原理、各种常见的J2EE服务器内核工作机制、内存管理、进程机制、源代码等。因为涉及的很多东西都比较抽象,代码也很多,练这一层的武功需要有很好的资质及耐性、并具还得有一定的环境及条件。好比神雕大侠杨过拿起“玄铁剑”,并练成“暗然销魂掌”的成长过程,需要前面的武功修为作基础,更需那只威力神武神雕的帮助指点及他处处为民、惩奸除恶的侠之心态。
胡侃了这么多,现在来根据自己情况测算一下自己的份量,结果如下:
第一层 练到8成;
第二层 练到5成;
第三层 准备走禅僧线路,当前算是练到1成;
唉,后面的武功提升越来越难,真不知道要到何年何月才能达到10成啊。你的武功练到哪一个层次了,不防亮出来大家切磋切磋。嘿嘿,要是有一天,咱们中国的Java程序员人手一把“玄铁剑”、人人会使“暗然销魂掌”,那还了得!汗...,写着写着居然做起白日梦了,不好意思,就此打住。
今天开始讲Hibernate了,搞得有点晕,其中涉及到一些线程并发的只是,还有集合,真是应了先前基础课老师说的,以后学web开发很多地方要用到集合,多线程虽然框架已经做了封装,但是要想很好的理解它们的运行机理,还是要明白的,好好研究编程思想去。
还有就是今天看到了一个用到静态语句块的地方。在HibernateUtil类里,用来初始化SessionFactory.
对Hibernate的初步理解,它通过配置xml将持久化类与数据库的一条记录连接了起来。Hibernate也是轻量型框架,所谓轻量型,必须有两个特点,一是非侵入性,而是与容器无关性(不依赖于容器,也就是可在J2EE中运行,也可以在J2SE中运行)。Hibernate对JDBC做了很高的封装,让我们看不到任何涉及到数据库的代码,完全面向对象编程。
第一天,还得好好学。
今天讲spring的DAO组件的事务处理和spring和struts结合的三种方法。
Jdbc的事务处理分为全局事务和局部事务,全局事务是基于应用服务器实现的事务,局部事务是程序实现的,Spring的事务处理是局部事务。
Spring 的事务处理又分为代码控制和声明控制,代码控制又分为实现PlatformTransactionManager接口方式和继承TransactionTemplate方式(需要用到匿名内部类,这里涉及到了一个回调的概念,回去研究研究编程思想,以前看到过没仔细看,好像回调只能用内部类实现,在java中)。
Spring 与Struts 结合有三种方法,一种让Action继承一个ActionSupport类,这个类是由Spring 提供的,这是最傻瓜的方法,我觉得,呵呵,然后就是替代Struts中的RequestProcessor类,Spring在替代类里面做了些手脚,使Action类能够基于IoC容器来动态加载业务类对象,第三种方法,是在struts-config.xml中,将所有指定Action的Path属性设成spring的一个接口,然后在spring配置文件中配置action类。这是推荐的方法。
一天下来头疼,明天开始讲Hibernate了,这样struts+spring+hibernate架构就学完了,要学的东西真是太多了,都跟不上新版本出来的速度,呵呵,要开始着手找工作了,郁闷,自己水平不够好。
今天接着spring的SimpleFormController,使用spring框架如何提交表单,处理表单。
同Struts相似之处的也是在web.xml中设置一个servlet控制器,然后有个xml文件来配置业务类,感觉比Struts还简单些,呵呵,都是做的简单的例子,还后涉及到事件,在发生某个响应后可以出发一个事件处理另一个并发的业务,比如用户注册成功后给用户邮箱发送一封邮件,这需要用到spring的两个类,一个ApplicationListener监听器,还有个事件类ApplicationEvent,一个implement 一个extends,ApplicationEvent是一个抽象类,必须实现它,在事件触发类中创建一个ApplicationEvent实现类的对象,构造器中以ApplicationListener的实现类的对象为参数,然后将ApplicationEvent实现类的对象作为参数调用ApplicationContext的publishEvent();方法。
最后,简单介绍了spring的dao组件,经过封装后的jdbc确实好用,本来十几行的代码两行就搞定了。其中spring的dao组件不依赖于ioc,但是也可以用ioc注入,还有事务处理,还没有学到,这两天作bbs的例子。
大自然"绝地大反攻",呵呵,不错,特别喜欢最后一幅,设成桌面了。
试一试baidu的上传图片,还不错,挺方便。
试着实现了一下Struts和spring结合,在Struts的Action类中,使用spring得到业务类对象,结果开始启动Tomcat的时候报下面这个错误:
严重: Error listenerStart
2006-12-21 16:32:49 org.apache.catalina.core.StandardContext start
严重: Context [/BookShop] startup failed due to previous errors
其中在web.xml中配置spring的启动方式,是用的监听器模式:
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
在网上查了一下相关帖子,说把监听器模式换成servlet启动模式就没有问题了,但是是为什么还不知道,按照此说法把spring的启动方式在web.xml中配置成了servlet启动模式。
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
结果就好了,更加奇怪的是在设回成监听器,也没有问题了,我晕。
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
。。。。。。。。
今天来了个老师讲一些人生规划、职业规划、工作、面试。讲的我有些郁闷,大道理谁都懂,但是…,哈哈,但是就很多了,要不谁都成伟人了呵呵,不是我消极,这些问题都是没有确切说法的,不想编程,true就是true,false就是false,这么写就能通过,那么写就是编不过,人活着,有很多可以选择,也可以不选择,这或许是为什么人活着很辛苦,呵呵,关于什么以诚待人啊什么的,谁都知道,谁都有一个评判,但是,做与不做,是不一样的人与人之间,都知道,付出就有回报,这都懂,甚至还做过试验,呵呵,可是,现在,我好像,没资格说这些了。我不知道还能不能回来。
因为在Struts中配置一个数据库连接池,折腾了一晚上,按照书上写的就是出问题,就在网上搜啊搜,还真是不好找,倒是有很多提出这样问题的帖子,但是都没回答到点子上,结果还是在网上找到了一篇文章,讨论是用Tomcat的连接池好还是用Struts的连接池好,结论是用哪个也不好,哈哈,其中有一段在Struts中配置连接池的实例,正好对我这个症状,哈哈,问题解决,甚是高兴。
下面是摘自这篇文章关于配置Struts数据源的内容:
Struts DataSource管理器在Struts配置文件(Struts-config.xml)里定义。这个管理器可以用来分发和配置任何实现了javax.sql.DataSource接口的数据库连接池(connection pool)。如果你的DBMS或者容器内置了符合这些要求的连接池,你可以优先选用它。
Jakarta的公共连接池实现 - BasicDataSource
如果你的手头没有连接池的本地(native)实现,你可以使用Jakarta提供的公共连接池实现[org.apache.commons.dbcp.BasicDataSource],它可以和DataSource管理器"合作"的很好。另外,Struts还在它的util包里包含了一个GenericDataSource类,这也是一个连接池实现。但是这只是一个非常简单的实现方案,不推荐使用,因为它可能在Struts的以后版本中被BasicDataSource或其它的数据源实现替换掉。
下面是一段Struts-config.xml配置文件中的数据源配置(使用GenericDataSource数据源实现),你可以更改相应的设置以适合你自己的系统。
<!-- configuration for GenericDataSource wrapper -->
<set-property="autoCommit" value="false"/>
<set-property="description" value="Example Data Source Configuration"/>
<set-property="driverClass" value="org.postgresql.Driver"/>
<set-property="maxCount" value="4"/>
<set-property="minCount" value="2"/>
<set-property="password" value="mypassword"/>
<set-property="url" value="jdbc:postgresql://localhost/mydatabase"/>
<set-property="user" value="myusername"/>
使用BasicDataSource数据源实现的配置方案如下:
<!-- configuration for commons BasicDataSource -->
<set-property="driverClassName" value="org.postgresql.Driver" />
<set-property="url" value="jdbc:postgresql://localhost/mydatabase" />
<set-property="username" value="me" />
<set-property="password" value="test" />
<set-property="maxActive" value="10" />
<set-property="maxWait" value="5000" />
<set-property="defaultAutoCommit" value="false" />
<set-property="defaultReadOnly" value="false" />
<set-property="validationQuery" value="select COUNT(*) FROM market" />
出处:http://wenson.javaeye.com/blog/33316
值得注意的是上面两个数据源的配置中的property属性的值有些不一样,就是这个问题困扰了我一晚上。涨经验了呵呵,以后也很可能不会用Struts配置连接池。
另外,还查得了如何查看sqlserver2000的版本的方法,如下:
SELECT @@VERSION
SQL Server 2000 版本和级别 @@VERSION 产品级别
SQL Server 2000 原始版本 8.00.194 RTM
Database Components SP1 8.00.384 SP1
Database Components SP2 8.00.534 SP2
Database Components SP3、SP3a 或 MSDE 2000 Release A 8.00.760 SP3
Database Components SP4 8.00.2039 SP4
原来以为是数据库没有装sp3的原因,通过上面的方法排出了这个猜测。
继续学习Spring,在web上面的应用,spring的关键,是将业务类在spring框架中注册,也就是在xml文件中,其中包括类的属性的初始化,这有个属性注入的概念,常用的有构造方法注入,和set方法注入,还有一种不常用的接口注入,Class.forName();,注册以后,在控制器中使用的时候,通过spring框架来创建对象,然后我们来使用这个对象,其中这里有个很重要的要求就是,面向接口编程,要实现一个业务类,必须先定义一个该业务类的接口,然后让实现类实现它,这样做的好处可以隐藏实现类的内部实现,将想让客户见到的方法放到接口中,这样实现隐藏其他不想公开的方法。另外从客户的角度来看,客户只是得到了一个实现类的接口类型,并没有得到具体的实现类,甚至不知道实现类的名字,面向接口编程。
另外,IoR是一种设计思想,将类的创建,管理,销毁,还有单一模式,这一档子事全部交给别人来负责,客户只拿来使用创建好的对象,为客户带来了简便,使更多的精力放到业务放到业务处理上,另外,也带来了代码的松耦合。
一天下来还是头疼,不知怎么搞得,感冒还是没好利索,今天抽时间将编程思想的对象初始化看完了,接下来计划复习Struts。
昨天晚上装jbuilder2006遇上安装好后不能启动的问题,从网上找的解决问题的办法。
安装 JBuilder 后第一次可以成功运行,可是机器重新启动之后再次运行 JBuilder 时却每次只是看到 Logo 闪了一下就没有任何反应了。
这种情况主要是由于 VM 的内存分配设置出了问题。可以在 X:\JBuilder2006\bin 目录下找到一个名为 jbuilder.config 的文件,打开该文件,其中有如下一行设置:
# Tune this VM to provide enough headroom to work on large
# applications
vmmemmin 32m
vmmemmax 75%
vmparam -XX:MaxPermSize=128m
将其改为:
# Tune this VM to provide enough headroom to work on large
# applications
vmmemmin 32m
vmmemmax 512m
vmparam -XX:MaxPermSize=128m
即可解决上述问题。
今天讲spring的MVC实现,理论上跟Struts差不多,只是换汤不换药,目前只是接触到了Spring的控制器和模型之间是如何联系的,Spring利用IoC实现了松耦合。这是比Struts先进的地方。
今天接触到了Spring,我喜欢的名字,呵呵,Spring应用框架是应用于业务层的框架,要求面向接口编程,将类与类之间的关系进行解耦,Spring最基本的就是IoR(Inversion of Control)翻译过来是控制反转,是一种设计模式,使应用程序逻辑外在化,将创建对象,初始化,销毁交给spring来管理,通过动态加载来使用对象。
好久没有打代码了,今天问起strues的东西,都有点陌生了,不行,得好好复习不行。今天一天下来头疼,不知为什么,精力太集中了?呵呵。
今天发现有个人去工作了,哦天,呆两天不会来再哦天。
头疼,回家。
无意中发现baidu的blog可以从别的地方搬家,哈哈,拉拢我们的好办法,决定试一下,哈哈转过来了,还不错,除了因为我原来的页面有背景,字体设成白色的了,在这边显示不出来,让我甚是不爽,改了半天,这下终于行了,还不错。
感觉baidu的速度还是相当快的。/
类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。 类与类之间存在以下关系: (1)泛化(Generalization) (2)关联(Association) (3)依赖(Dependency) (4)聚合(Aggregation)
UML图与应用代码例子: 1.泛化(Generalization) [泛化] 表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。 [具体表现] 父类 父类实例=new 子类() [UML图](图1.1)
图1.1 Animal类与Tiger类,Dog类的泛化关系
[代码表现]
- class Animal{}
- class Tiger extends Animal{}
- public class Test
- {
- public void test()
- {
- Animal a=new Tiger();
- }
- }
2.依赖(Dependency) [依赖] 对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。 [具体表现] 依赖关系表现在局部变量,方法的参数,以及对静态方法的调用 [现实例子] 比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作 [UML表现](图1.2)
图1.2 Person类与Screwdriver类的依赖关系
[代码表现]
- public class Person{
- /** 拧螺丝 */
- public void screw(Screwdriver screwdriver){
- screwdriver.screw();
- }
- }
3.关联(Association) [关联] 对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。 [具体表现] 关联关系是使用实例变量来实现 [现实例子] 比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司 [UML图] (图1.3)
图1.3 公司和员工的关联关系 [代码表现]
- public class Company{
- private Employee employee;
- public Employee getEmployee(){
- return employee;
- }
- public void setEmployee(Employee employee){
- this.employee=employee;
- }
- //公司运作
- public void run(){
- employee.startWorking();
- }
- }
(4)聚合(Aggregation) [聚合] 当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。 [具体表现] 与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。 [关联与聚合的区别] (1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。 聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。 (2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。 [UML图](图1.4)
图1.3 电脑和组件的聚合关系
[代码表现]
- public class Computer{
- private CPU cpu;
- public CPU getCPU(){
- return cpu;
- }
- public void setCPU(CPU cpu){
- this.cpu=cpu;
- }
- //开启电脑
- public void start(){
- //cpu运作
- cpu.run();
- }
- }
[参考资料] 1.《Java与模式》(阎宏 编著) 第2章 统一建模语言UML简介
突然感觉自己是个木讷的人,还矫情的写写心情,呵呵,女不女人。
时间过的真快,天气已经很冷了,开始越来越担心,这个年该怎么过,话虽说,车到山前必有路,但还是免不了不知如何是好。
想想,我想要的,其实我也不想太奢侈,自己的路真想自己走,就应该自己走,可是...
哪有那么多可是,男人一点。
我该表明我的观点,我的立场,唉,头晕/
跟着感觉走吧。
Oracle数据库课结束了,老师上完课坐晚上的火成回沈阳,专业Oracle数据库老师,当老师还是不错的嘛,呵呵。
下周就是Spring/冬眠了呵呵,接着Struts继续研究代码的阶段,也不能单纯的研究代码不是,MVC,设计模式,面向对象,这是最基本的,好好研究编程思想吧。
自己好好学吧,靠别人是不行的,也不要多管闲事。
数据库,存储过程,游标
没什么具体写的,心情不好,身体也不好,狗日的,回家。
今天的自讲因为机子连接的问题取消了。
这周接着讲Oracle,
今天脖子特别疼,还比较困,老师一讲就犯困了,
晚上还好,郭斌斌讲了继承,还不错,蛮有收获。哎呦脖子疼,刚刚发现手机欠费了,买了张充值卡充上了,还是说我欠费不让我打电话,真是气死我,狗日的移动。
脖子疼好些了,嗓子又肿了,昨晚一晚上没睡好,还挺厉害,中午买了点消炎药,昨晚开玩笑说,以后我挣的钱还供不上吃药的,呵呵,还活着干啥。
数据库讲了一些如何配置,然后是一些sql语句oracle独有的,老师的水平还是厉害的,看得出来,就是有些腼腆哈哈,感到oracle还是很强大的,有很多它独有的东西。要想学好它可是要费一段功夫的。
昨晚的讲课进行的不好,感觉的在糊弄我们,也没说什么,唉0能说什么呢,今天邓讲内部类,挺麻烦的东西。
最后一天uml,行为模式,Chain of Responsibility (COR)职责链模式,Command模式,Iterator迭代器模式,Mediator模式,Memento备忘录模式,Visitor访问者模式,Strategy策略模式,State状态模式。
COR模式,职责链模式,定义一个接口,有一个处理方法,有一个该接口类型的字段,并且有一个该字段的set设置方法,不同的职责分别实现该接口,处理方法判断是否是自己的方法,如果是,处理,如果不是,利用接口里定义的字段访问下一个职责的处理方法,在客户端,建立各个职责的对象,并用set方法设置下一个职责是哪一个,最后调用第一个职责的处理方法。
Command模式,国王发好施令,定义一个命令接口,用于发布命令,实现该接口,有一个士兵类属性,构造器负责传入士兵对象,用于让那个士兵去执行该命令,士兵类,士兵类里面有具体执行命令的方法,国王类,有发布命令的方法,在客户端,实例化一个士兵,实例化一个发布命令类,将士兵对象作为参数传给命令类,实例化一个国王对象,将命令对象作为参数传给国王,国王发号施令。
Iterator迭代器,就像集合里面有个方法可以得到Iterator对象,用于遍历、排序。
Mediator媒体模式,由多个类需要调用,将这几个类组合到一个类,在这个类里面有每个类类型的属性,让客户端实例化这个类,不需关心其他类。
Memento模式,建立一个跟已有的类一模一样的类,用于保存在某个时刻的值,防止后悔,呵呵!已有类里面有个memento类的对象。
Visitor访问者模式,解决了泛型要解决的问题,利用多态,多态真是太有用了,哈哈,我觉得很多设计模式都用了多态特性。
Strategy策略模式
State状态模式
今天下课给大家讲了讲第三章,比较简单,但是不够自信,怕自己说错了,呵呵,还好,大家都分了一章,下星期都安排好了,安排好后几个人又开始玩cs了,怎么能这样呢,还不好意思说他们,唉…
设计模式,创建型模式,工厂方法,Builder模式
工厂方法就是建一个工厂类,这个工厂类负责生产对象,生产需要的对象,生成什么样的对象由调用工厂方法的对象决定,也可以由xml文件配置,就像在struts里面配置action。随着工厂类的增多,可以将工厂类抽象,然后由子类继承。
Builder模式,可以单独有一个类负责另一个类的对象的创建。我的理解,可以
Interface Car{};
class BuildCar
{
class RedCar implements Car
{}
Public Car getCar()
{
return new RedCar();
}
}
就像10-12日的那个例子,我想这就用了Builder模式。另外,Builder模式还可以有一个叫导向器的类Director,它负责怎样创建这个对象,适用于几个类的属性基本相同,只有少许不同,这样用到导向器,实现Builder类的重用。
基础太重要了,高楼大厦的基石,好好看java编程思想。老师建议我们每个人一人一章,然后负责给每个人讲解,这样的学习效率是很高的,再有,看明白了跟讲明白了是两个层次,可是没人相应,下课我问大家觉得老师的提议怎么样?没人理我,呜呜。大家不想学好么。
设计模式,构建型模式最后一个:Singleton单件模式
保证一个类只有一个实例存在,方法是隐藏构造方法,在类的内部构造一个静态的实例,然后建一个静态方法返回这个实例,其中一个知识点是,静态变量是在main方法执行前初始化的,也就是在程序运行前初始化的。
结构性模式:适配器模式Adapter,桥接模式Bridge,组合模式Composite,装饰模式Dectorator,外观模式Fa ade,享元模式FlyWeight,代理模式Proxy。
Adapter模式,是多重继承的一种替代方法,通过继承一个类,组合一个类,来实现。
Bridge模式,将要执行的业务方法抽象出来,建立一个桥接接口,通过实现该接口用于不同的业务,然后使用该实现类。
Composite模式,多个相同的对象要调用它们的一个方法,单独写一个类,里面有个该对象的类的类型的集合,里面装有许多对象,有个方法,利用循环依次调用每个对象的方法,宗旨是让类的使用者更方便。
Dectorator模式,避免过深继承的一种方式,目前有一个类,但业务需求改变导致这个类有少许变化,如果继承这个类,将导致无限制继承,办法是建立一个这个类的兄弟,实现新的业务需求,然后调用兄弟的方法。
Fa ade模式,用于业务操作十分复杂,为了实现对复杂性的封装,建立一个类,建立一个面向外界的接口,类的使用者只需调用该接口就搞定了,而背后复杂的逻辑不必去关心。
FlyWeight模式,跟单件模式有类似之处,都是为了减少重复对象的创建,这个模式是,建立一个缓存,将已建立的对象放入缓存,当再次需要的时候在缓存中查找是不是已经存在了该对象,如果存在,直接返回,否则创建,这样节省了内存空间,这样的适用于有许多的小型对象的适用。
Proxy模式,用于不同用户有不同操作权限的类似情况,有一个类负责业务逻辑的执行并不负责用户是否具有权限的判断,这件任务由另一个类负责。
以上设计模式的理解,用自己的话写了一下,希望加深理解。
明天可能要给大家讲第三章,得好好准备准备,争取完美,嘻嘻。
今天开始上uml课,老师还是很厉害的。
其中一个很容易混淆的关系就是一个依赖关系,一个关联关系,依赖关系就是参数关系,一个类的对象作为一个参数在另一个类里被使用,而关联关系,是一个类的对象作为另一个类的一个属性或者集合属性来使用。
另外,在实际设计开发中,应尽可能少的使用继承,完全符合继承逻辑关系的才使用继承,以免造成代码的混乱,关于多重继承在java中不直接被支持,采用内部类或者关联关系来实现。
在C++ 中有个名词叫友元,一般情况下,子类继承父类,子类是不能访问父类的私有成员的,而如果一定要访问,就在父类中将子类声明为父类的一个朋友,这样子类就可以使用父类的私有成员,这就是友元,在java中没有这样的概念。
Java基础知识很重要,要注意复习,进一步掌握。
接着uml,接下来就应该是设计模式了,这部分都是些理论的东西,基本不用写代码,一些画uml图的含义,感觉记不住,只能到时候用到的时候,再来查查资料了,uml很重要/
感觉自己掌握的知识太欠缺了,要好好掌握基础才行。
面向对象程序设计实际上进行的是创建新的数据类型。也可以认为,类型决定了接口,而类是该接口的一个特定实现。值得好好理解。
类描述了具有相同特性(数据元素)和行为的对象集合。
呵呵,时间,时间过的真快,7月,8月,9月,10月,11月,12月。
一天一天,稀里糊涂过来了,真快,为什么总是感叹快呢。大家都这样,呵呵。/
盼望着,有一天,我的blog重新开放,到时候,我就应该解脱了,应该恢复以前的那样,应该......
做梦,梦见一切都雨过天晴了,美好了,大家都很高兴了,我就也高兴,可是......睁开眼发现,头顶的天花板,一切还是现实,痛.....
做梦,梦见战火又起,天啊, 梦着梦着,痛得惊醒,再也睡不着......
昨天,她和朋友短信聊天又哭了,真不知道怎么去安慰,有什么办法呢,谁能告诉我,我这个无耻懦夫
有时候甚至极端的想,羡慕电影里没有父母亲人自己一个人,自己努力,也蛮快乐的。唉...也许真的家家有本难念的经。
人说像这样的家庭真是不好找了,而我这样的也不好找,呵呵,逃避,想法设法的逃避,可这不是办法,你逃能逃到哪去呢,出走了,你狠的下心么/常常说自己冷血,却狠不下心,煎熬着......
我不想这么活着,我想抬起头!!!
今天因为老谢有事,决定uml换老师了,说是博士,呵呵呵,博士不博士无所谓的,只是个头衔嘛,中国的博士就是这样,呵呵,下周见,今天上自习,哈哈上自习好,这两天完善了一下我的bookshop,丑陋无比,五脏俱全,哈哈,还是得实践,像老谢说的,得自己做,不自己做永远变不成自己的。
转眼又到月底了,过的真快
今天老谢发威,问oracle老师到底怎么回事,问我们干嘛嘛,既然培训中心做了换老师的决定,肯定有为什么换的足够理由阿,因为下午有事,今天的课没上,上自习,上自习挺好,自己做做东西,复习以前的内容。
上uml,令人惊奇的是竟然是老谢给我们讲,应该说是走运,学校就那么两个牛老师,能不能碰上他们给讲算是运气了,首先先训了我们一顿,我们这个班换老师不止一次了,其中老师是有问题,换个角度讲,我们同学有没有问题,是有问题的,没有用上十二个劲儿的去投入到学习中,再好的老师,自己不努力也是没有用的,so我们首先得努力。
讲uml的语法,用例图的画法,做了道题目,这部分内容跟编程不一样,需要思考,想周全,明天老师看看怎么做这个练习。
今天没老师,数据库的老师没来,还比较嫩,回去再修练修练。
自己上自习,下午答了个j2ee的测试,感觉有点陌生,一是本来课程目标就是给我们一个总体性了介绍,二是这些天私下里也没看j2ee方面的东西。测试还没有涉及到web services,这部分知识应该是高端的了。
Oracle数据库先搁置,明天开始,uml在j2ee平台中的具体应用,这个是很重要的,涉及到开发软件的流程,如何设计、规划,要好好学。
PL/SQL、procdure
最简单的块结构定义、循环loop…if…then exit end loop\while …loop…end loop\for i in low_bound..high_bound loop …end loop三种方式
Create procdure p_proc_name(……)
as
begin
……
End;
里面的参数分为in和out两种,老师就因为这个折腾了一个下午,到最后还是没讲清楚,我的理解,如果是out,即为输出参数,既然是输出参数就要指定输出给谁呢,比如我定义个varchar型的v_name ,执行存储过程的时候告诉它我用v_name来接收参数,如果是in out,则这个v_name 可以有初值作为传入参数传入,总之,既然是输出参数,就必须有一个变量来接收这个参数,所以不能以’abc’这样的常量传入。
不知道是这个理儿不,呵呵,下午,老师好像也蒙了,哈哈。
老师自己搞不通,排错的过程浪费了大部分时间。
还是要问,培训中心是怎样衡量一个老师的。
这部分数据库的知识,基本上跟以前的知识没有联系,可不能因为没了联系,而把前面的丢了,熊瞎子掰苞米,掰一个丢一个可不行,一定要注意学习安排。
自己弄个例子做做。
今天介绍了索引和锁,索引分为唯一索引,非唯一索引,位图索引,函数索引,锁讲了半天也没弄太清楚,行级锁,表级锁,默认作insert、update、delete时行被锁定,不能由其他客户端更改,也可以设查询锁,在一个用户查询的时候别人不能修改,在select语句最后加for update,关于数据库的学习,一周过去了,大家都认为这个老师实在是不怎么样,来这里培训近三个月了,给我的感觉,这里的老师能力基本都不咋地,不知道天下培训都是这样,这样当然能为培训节省成本,但这将是个恶性循环,,培训要对老师的能力素质严格把关的。
感冒好些了,因为吃了新康泰克,所以也发困了,昏沉沉的。
前面,老师在边折腾边讲那写sql语句,嗷呦,真实有些费劲,老师不觉得脸红么?
一直在埋怨老师能力太次(确实很次),学习这东西,是两方面的,在老师,在学生,老师好好教,学生好好学,哈哈,废话。
但是,老师也得过得去不是,老师最重要的一个素质应该实事求是,知之为知之,不知之为不知之,哈哈,非常明显,老师在上课之前没有好好的准备,否则不会犯这种弱智的错误,垃圾,娘的,没有一个正式些的例子,瞎起名,连自己都不知道自己用过什么名了,实际工作中就是这么做的么?
Today
如常
感冒的难受
好像因为提意见,老师开始改变了一些授课方式,不过好像越发不清楚,一会儿讲讲这儿一会儿讲讲那,一点也不系统不完整,唉…罢了。
做了个webServices的实例,服务端是纯java写的,然后用.net写的客户端调用,真是过瘾,还有很多资料要看,谢老师的资料很实用。
今天Struts课就算结束了。
但还要好好看资料。加深理解。
听谢老师的课感觉就是不一样,一个问题是怎样出现的,是怎样思考的,是怎样想办法解决的,而又会有什么问题……,不是给我鱼,是让你知道怎样钓鱼的。
老师跟老师是不一样的阿,哈哈,有些老师在来上课以前没有好好的思考这么课该怎么讲更好,只是懒惰的找一些现成的讲义,幻灯片,删删改改就成自己的了,然后就来课堂上拿来念。呜呼
开始Oracle,安装,初识这东西,也不知道这东西跟sqlserver有啥不一样,问老师了一下,说是oracle更安全一些,没了么?郁闷!
老师说我们的日志,没有东西,每天十分钟就这么两行,哈哈,有时候真的是没有时间,有时候真的是没啥好写的,一天就是那样,要是每天都那么高涨,进步,那真的是伟大了,俺们又不是文学家,不记流水账,怎么办,还写成流传千古的文章,那也不来这学什么java语言了,我们的语言就够活了,哈哈,牢骚一下。
刚刚自己手工写了个简单的HelloWorld级别的ejb,
感觉:1、一定要仔细,就是仅仅差一个字母,就错,一定要仔细,用老师的话说,心要静
2、还是因为马虎,把实现bean中的ejbCreate()方法给忘写了
3、ejbCreate()方法必须抛出RemoteException异常,否则报错
4、home接口中的create()方法必须抛出RemoteException、CreateException两个异常,否则报错
5、remote接口的方法也要抛出RemoteException异常
哈哈,看到ejbc successful.真是高兴。
另外对于命令java weblogic.ejbc,好像是weblogic的命令,不知道它做了些什么
明天,最后一天谢老师的课,要讲web serveices,真是来劲
Today讲了很多内容,真是要好好的来消化一番,从最基本到利用工具开发远程方法调用RMI讲了个清清楚楚,接下来要消化了。
自己写一个远程方法调用
需要有一个远程方法的接口,在客户端和服务器端都要有,然后在服务器端实现这个接口,然后在webLogic中部署,需要有这么一命令行
build.cmd
------------------------------------------------------------
set SERVER_CLASSES=c:\serverclasses
javac -d %SERVER_CLASSES% IHello.java HelloDemo.java
java weblogic.rmic -d %SERVER_CLASSES% demo.HelloWorld.HelloDemo
------------------------------------------------------------
然后在weblogic配置页面,启动和关闭页面添加要加载的类
其中在main方法里实现了向jndi添加Hello对象
测试代码D:\刘朝春\test\firstrmi
另外,在weblogic中配置数据库驱动(不用它自带的驱动),目前就知道这一个方法,不知道还有没有更好的
我们可以在C盘根目录下建立一个文件夹:JDBCSQLSERVER2000。把这三个文件拷贝过去。
在目录C:\bea\user_projects\domains\mydomain下找到文件startWebLogic.cmd,这是WebLogic启动的时候第一个执行的文件,把它打开。
第一行加上:
set CLASSPATH=.;c:\JDBCSQLSERVER2000\msbase.jar;c:\JDBCSQLSERVER2000\msutil.jar;c:\JDBCSQLSERVER2000\mssqlserver.jar
以设置CLASSPATH路径。
路径C:\bea\weblogic81\server\bin下的文件setWLSEnv.cmd是工作窗口设置classpath用的,也需要在第一行把上面的语句加上去。
完整的:
set CLASSPATH=.;C:\bea\weblogic81\server\lib\*;C:\bea\jdk141_03\*
set CLASSPATH=%CLASSPATH%.;C:\serverclasses
set CLASSPATH=%CLASSPATH%.;c:\JDBCSQLSERVER2000\msbase.jar;c:\JDBCSQLSERVER2000\msutil.jar;c:\JDBCSQLSERVER2000\mssqlserver.jar
我只在startWebLogic.cmd下设置了Classpath就在管理界面配成功了,不知道在setWLSEnv.cmd有什么用?
发现webLogic好像不读系统变量?
企业级javaBean,熟悉weblogic,远程方法调用,jdbc数据源
远程方法调用要用到jndi,远程方法调用在tomcat里不能实现,客户端需要有一个远程方法的接口,服务器端将远程方法在服务器的jndi上注册。最后客户端通过jndi查找强制转换成接口名实现远程方法调用。
今天上午Struts算是基本上讲完了,还有一些零碎的东西要自己看,老师准备剩下的三四天讲一下EJB和webLogic,这个周六周日要上课了。
企业级JavaBean,远程方法调用,在weblogic中配置连接池,配置数据源,操作数据库,一天天过的真快,时间不够用了,不知怎么搞得还有点感冒,难受,有点不支了。
该怎样……
多有深意,呵呵……
第八,在配置连接池的时候,如果测试不通,而且没有任何异常,请检查数据源xml的配置,特别是文件名的后缀名问题,比如写成了book.xml.text
今天讲了讲Sruts配置文件,可以有多个struts-config.xml,在web.xml中设置,还有就是可以设置一个虚拟ActionForm,以解决大量页面将产生大量的ActionForm,另外解决这个问题的方法就是在jsp页面中设置一个隐藏标签,以在ActionForm中区分是哪个jsp页面的事件。
虚拟ActionForm,就是用DynaActionForm类,在struts-config.xml中配置ActionForm属性,….
今天老师还没回来
做老师的网上书店的例子
发现几个问题,想记录一下,以后引以为戒。
一是,在Struts-config.xml中
映射ActionForm
须这样写
<form-beans>
<form-bean name="booklistform" type="bookshop.form.BookListForm"/>
<form-bean name="shoppingform" type="bookshop.form.ShoppingForm"/>
</form-beans>
这样写是不正确的
<form-beans>
<form-bean name="shoppingform" type="bookshop.form.ShoppingForm"/>
</form-beans>
<form-beans>
<form-bean name="booklistform" type="bookshop.form.BookListForm"/>
</form-beans>
二是,ActionForm中的属性必须和jsp页中的标签一一对应,否则会出错。
三是,在标签中一定注意格式,属性值的双引号不能缺。
四是,request. getAttribute()和request. getParameter()的区别
五是,不能在自定义Tag里或在Servlet里输出Struts标签
六是,HashMap中得到所有的键值
//HashMap book = (HashMap)(super.pageContext.getSession().getAttribute("shpping"));
Object[] strid = (book.keySet().toArray());
七是,在jsp页面中使用userbean不需在web.xml中映射,直接
<jsp:userBean id=”” class=””></jsp:userBean>
Servelt要在web.xml中映射
在Struts中,ActionForm和Action都要在Struts-config.xml中映射
八是,脑袋不转了,睡觉去,再整理。
这几天一直在休息,老师出差了,昨天研究了在tomcat下配置jndi,发现在tomcat5.0和5.5下配置还有些不一样,老师是使用得5.0,按照老师那样配在5.5下就是不行,把下面这段xml放在tomcat的server.xml中的<Host></Host>标签里面
<Context path="/book" docBase="d:/bookdemodata" debug="0" reloadable="true">
<Resource name="jdbc/book" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/book">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=book</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<!-- Abandoned DB connections are removed and recycled -->
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned. -->
<value>60</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<!-- Log a stack trace of the code which abandoned -->
<value>false</value>
</parameter>
</ResourceParams>
</Context>
如果是在5.0下就没有问题,测试通过,而在5.5下面这样写就有错误了,到网上搜了些资料,说它们两个配置还是有些不一样的
在tomcat5.5下conf\Catalina\localhost目录下新建一个针对自己项目的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/addressbook" docBase="/addressbook" debug="0" reloadable="true">
<Resource
auth="Container"
name="jdbc/address"
type="javax.sql.DataSource"
password=""
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="10"
maxWait="100000"
username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;databasename=addressbooksample"
maxActive="20"/>
</Context>
文件名叫addressbook.xml这里的文件名是随便起的,在tomcat启动的时候会自动加载这个目录下的所有xml文件,OK 这样就调试通过了,而且看起来这样配置要比在5.0下配置简单。
还有一个方法
就是把sql的配置资源
<Resource
auth="Container"
name="jdbc/address"
type="javax.sql.DataSource"
password=""
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="10"
maxWait="100000"
username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;databasename=addressbooksample"
maxActive="20"/>
放入conf文件夹下的Context.xml中的<Context></Context>标签内,就可以了
再有就是在java代码中取得Connection的时候就不能像原来这样写了
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/addressbook");
conn = ds.getConnection();
这样写我试过也不行,tomcat会有异常
这样写就没错
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/address");
conn = ds.getConnection();
经过一番研究试验,终于搞定了,但是其中玄机还不知是为何
像这个东西"java:comp/env"是啥意思(JNDI查找的Tomcat的默认名字)
Oh.god,我弄错了
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/address");
conn = ds.getConnection();
和这样写
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/address");
conn = ds.getConnection();
都没错,都能出来数据
今天讲完了自定义标签后,老师演示作了个网上书店的简单但五脏俱全的Struts例子,下午就没有讲课,因为老师明天出差要准备准备嘛,自己练习,几个人去书店逛了一圈,哈哈哈,因为老师说那本孙卫琴的Struts书不错,大家都跑去自己买了本回来,老师的影响力真是大阿,哈哈。
一连一周没有休息,这几天有点累了,得休息休息了,可能是习惯了,每五天就休息两天,坚持,工作了比这可累多了。
换老师的第二天,老师很忙,又开会又接待客人的,不过讲的相当好,让人豁然开朗,有理有序,真的是不一样啊,哈哈。今天讲了struts里的一些主要的标签,并作了例子,老师讲在web标签方面做得好的是微软的.net,深有体会,asp.net比这个方便多了,不过在这之前一点不知道他的标签的实现原理,是怎样前台和后台联系的,现在初步了解了一些,原来每个标签通过xml文件影射在后台对应一个类。这两天下来,做个两三个Struts的例子,一个页面的,三个五个页面的,没有用集成开发工具,基本都是用JCreater写的,发现必须清楚这里面的来龙去脉,必须非常仔细配置每个资源文件,有一点错误就不能正常运行。而且是让人感觉莫名其妙的错误。
今天没有休息,因为老师下周要出差,接着讲Struts的知识,要想深入理解掌握成为自己的东西必须多自己敲代码多练习。
晚上十二点了,第一个Struts程序弄到现在还是有一点问题,今天的课开了个Struts头儿,听得一蹋糊涂,就自己看书,明天可能换老师,要加倍努力了,好了,睡觉去。
今天换老师了,就是不一样啊,对Struts有了一个清晰的认识,对培训中心还不是预期的很失望,有新好老师了,好好努力学习吧,有这样的机会可不多。 Struts是一个框架,用老师的比喻就是它把一个单位办公各个部门需要的房间都盖好了,而每个部门有几个成员,怎么处理业务由我们来决定,这就方便了我们开发。
今天开始讲Xml,讲了一天算是完了,什么没听着,真是没有重点,下午下课跟因此而郁闷的郭去书店买书了,唉,真是郁闷。
今天,J2EE Web组件编程技术这门课的最后一天,讲了两个例子,接触到了MVC设计模式,M-Model V-View C-Controller,例子用到了javaBean + Servlet + jsp
跟在学java基础的时候,小崔讲的一样,现在更深入的更实际的理解了他那时候说的MVC,哈哈,那时候说MVC,模糊。
下周开始J2EE Struts 及 XML,呵呵,真的希望不再是这个老师讲了,真是受不了,迟到,讲课东拉西扯,80%废话,没有重点,敷衍提出的问题,不实事求是,我怀疑这家伙是不是做过开发,就会念幻灯念课本,当然也有好的一面,…..没有特别好的。
在这两个星期里,认识jsp,熟悉html、javaScript,熟悉jsp,javaBean,Servlet,MVC,还是有不少新的东西,并且项jsp、html以前没什么基础的,现在也把那些常用标签拿来就写了。
早上讲对象初始化的过程,首先定义一个对象的引用,然后开辟内存空间,然后给成员变量初始化,然后把这个内存空间的指针给开始定义,老师这么讲,那么象String s = “string”;就直接分配空间存放”string”,等在网上问问,我怀疑它间接调用了String的构造方法。
上午开始讲Servlet,我的理解,Servlet就是一个在Tomcat这样的Servlet容器中执行的类,跟jsp页面没有必然联系,跟javaBean不同,javaBean好像必须通过jap利用<jsp:useBean….<jsp:setProperty….来使用。
在有就是在web.xml中映射Servlet时
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>MyServlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/firstservlet</url-pattern>
</servlet-mapping>
一,上面必须被包含在<web-app></web-app>中
二,在<url-pattern>/firstservlet</url-pattern>标签中,firstservlet前必须有”/”
看到了第一个最简单的javaBean的例子,一直想把javaBean跟asp.net C# 中的什么东西联系起来,但一直没有想到,在jsp中的用法<jsp:useBean name=”” ……有点像asp.net 中的控件在其中的表现形式,但是他没有一个单独的类,它是整个页面后台类(姑且先这么叫)的一个成员,不知道jsp里有没有类似DataGrid的控件。
然后是利用javaBean来连接数据库,连接数据库,用<jsp:setProperty 来设置javaBean的属性,不知道asp中也有类似javaBean的属性,等问问他们/。
学生::老师,我的猫为什么不能吃食呢?
老师(看了一眼):我叫你把猫做成白色的你怎么能做成黑色的阿?
学生(晕):猫吃不吃食,跟是白猫黑猫有关系么?
。。。。。。
讲了Session,开始又重复了那个判断Cookie的逻辑,有老师说的那么难么?纳了闷了,然后开了个javaBean的头,无聊。
学了javaBean和Servlet,在想它们两个有什么相同有什么不同,想到的
今天用javaScript写了一个超级简单的邮箱登录的jsp页面,发现javaScript太不容易调试了,一个简单的逻辑错误,竟然困扰了我一天,转了好几个圈,发现一个 问题:无论是在javaScript中还是在java中有关数组 字符串的length属性,它是一个属性,而不是方法,返回数组的字符串的长度,这里,关于数组返回的时数组初始化时定义的长度,而不是数组中所包含对象的个数
不知道写javaScript有什么好的工具
对了
昨晚上发现IE7正式版发布了,立马下了一个体验了一下,给我印象最深的就是它的英文字体了,两字,漂亮,越看越喜欢,哈哈哈哈
生活还在继续
祈祷...
今天周六
在家坐了一天
昨天晚上装Eclipse MyEclipse Jdk5 Tomcat Mysql,好家伙好一顿折腾
装Mysql的时候
因为我的系统盘空间先天空间小才5个G,现在只剩几百兆了,为了不造成危机,我把mysql 装载别的盘了,结果装完后不能用,起不来,其实在安装的时候看到了,人家写的很清楚,如果你不是默认安装,必须在my.int
文件里加入两句话才可以,加上去了,搞定。
装jdk的时候
因为我已经装了jdk1.4,但是在从没有配过环境变量,这次装上5后,自己动手配了一下,加深记忆,就是连个变量,一个path用于指名java的exe文件的路径,也就是在那里能找到java.exe javac.exe编译嘛 执行嘛,也就是jdk下的bin文件夹,path=C:\sun\appserver\jdk\bin;
二是classpath,用于指定java类库的路径,也就是存放那堆jar文件的lib文件夹,classpath=C:\sun\appserver\jdk\bin;.;,其中.;表示所执行代码所在的当前路径。
装Tomcat的时候
装Tomcat的时候,必须注意端口号的设置,不能跟其他程序已经占用的端口冲突,sqlserver2000是1433,IIS是80 8080,mysql3306,我把Tomcat弄了一个8081,呵呵。还有就是Tomcat的默认安装目录好长,最好弄短点,因为以后可能会经常查看它,我就吃了这亏了,不得不弄了个快速启动,呵呵/
MyEclipse啥时候给各中文包阿,得好好学英文了,呵呵。
Today 在浪费时间
其实现在已经是周六了,上面一行是昨天在老师非常认真负责的又极其无聊的讲课的时候写的,威慑呢没这么说呢,不知道是老师认为我们水平在地平线下阿还是就是那样的讲课风格,一个if()else()的问题他能讲半个小时,来来去去重重复复,嗷呦,听得脑袋都炸开了,最后一同学在cmd上用net send给我发了一条消息说:简单的问题讲复杂了。呵呵,反倒晕了。
昨天一天下来,感觉就是一天讲的内容接触的内容真是没什么,就说了那么几个简单的关键字的用法,其实这么说是不公正的,所涉及到的这些简单的东西是相当重要的,像我这样的没有html,asp的基础学起来什么都是新鲜的,所以我还是比较喜欢看java代码。
讲了jsp,安装Tomcat,真他娘的麻烦,重装了五六次,才凑和着搞定,也不知道哪得毛病,老师看样子也力不从心,配置真麻烦,让后讲了一写jsp的标签,如果有asp的基础学jsp肯定很简单,也不知道老师是按照什么讲的,一会儿讲讲这个一会儿讲讲那个,真是晕。 晚上看《java编程思想》里面内部类的总结,内部类的用途或者说好处,一是可以为其外部类提供一个被访问的窗口,因为内部类可以无限制的使用其外部类的所有资源,而是可以实现多继承,一个类只能继承自一个类,而如果在外部类已经继承了一个类,内部了又继承了一个类,这样变相的实现了多继承,就像在以前用内部类实现事件的例子。还有三四五条用处,一时想不起来啦。哈哈…
今天继续讲了一些javaScript的有关常用的方法,有的是以前见过的,有的没见过,以后能混个脸儿熟了,呵呵,然后简单回顾了jdbc的有关内容,并做了练习。 好家伙,这个老师真是太能说了,哈哈,连续不断的讲半天不停,讲的相当的细,相当的细,呵呵。
今天老师特意讲了一下关于多态的知识,下面是写的一个小例子,发现前两天写的那个关于内部类的例子也用到了多态的知识,通过一个接口实现类的方法返回了一个这个接口类型的引用,但这个引用指向的是一个内部类的对象,他不可以调用这个内部类独有的方法。
同理,下面这个例子也说明了这一点。
如果想调用实现类里面独有的方法,必须向下造型。
/**
* @(#)Test.java
*
*
* @author Administrator
* @version 1.00 2006/10/17
*/
class Person
{
public void eat()
{
System.out.println ("eat");
}
}
public class Test extends Person{
public Test() {
}
public void eat()
{
System.out.println ("Test eat");
}
public void hello()
{
System.out.println ("Hello");
}
public static void main(String[] args)
{
Person p = new Test();
//调用子类重写的方法没有问题
p.eat();
//不能调用子类特有的方法
//p.hello();
//可以强制类型转换后调用子类特有的方法
if(p instanceof Person)
{
Test ta = (Test)p;
ta.hello(); //这样做没有问题
}
}
}
今天着重讲了javaScript,还有MyEclipse的使用,哈哈,这个MyEclipce还是相当强大的,感觉比较爽,呵呵!
终于有机会熟悉了一下javaScript,这东西还是相当强大啊,今天知识接触了一些基本的语法和使用,一些技巧和类库还需要学习。
唉……,呵呵!!
今天开始学习所谓的《J2EE Web组件编程技术》,换了个老师,讲了一些这个课程的大概组成以及教学计划,我觉得这样还是蛮不错的,起码对课程首先有个大概的了解。然后是一些html的基础知识l.
今天没有上课,但是还要过来,真是过水。
在《java编程思想》上看了个关于内部类的例子,感觉很有意思,自己打出来,作了些注释,加深理解记忆。
//声明接口Ia
interface Ia
{
int a();
}
//声明接口Ib
interface Ib
{
String b();
}
//声明类,在其中声明内部类实现上两个接口
class Test
{
//内部类 a 实现接口Ia
private class a implements Ia
{
private int value = 11;
public int a()
{
return value;
}
public String a2()
{
return "a2()";
}
}
//内部类 b 实现接口Ib
protected class b implements Ib
{
private String value = "b";
public String b()
{
return value;
}
public String b2()
{
return "b2()";
}
}
//Test类的方法 返回一个a接口对象
//用户不能从该对象向下转型,也就是不知道它向下是a类型
public a getIa()
{
return new a();
}
public b getIb()
{
return new b();
}
}
public class TestParcel
{
public static void main(String[] args)
{
Test test = new Test();
Ia ia = test.getIa();
System.out.println(ia.a());
//ia不能访问a类实现Ia接口以外的扩张方法
//ia.a2();
Ib ib = test.getIb();
System.out.println(ib.b());
//ib.b2();
//Test.a ia = test.new a();
}
}
也许java的类库有的就是这种实现,我们可以通过某个类的方法得到某个接口的实例。^_^
今天是java高级的最后一天课,老师晚上就坐火车回家了,哈哈。
总的来说,对这段日子的培训不是很满意,跟我想象的可以说相差很大,分开来说,在java基础部分还是比较满意,老师还比较负责,讲的也可以,到了高级部分,跟“高级”这个词对应不上,称不上为高级,顶多是一些实际应用中的一些技巧,java基础的实例化,java的一些高级特性很多都没有涉及到,怎么能称得上高级呢,可能这只是我的一面之词。
好了,发了一点牢骚。
最后一部分简单介绍了国际化和Bean的制作,Bean的制作不是很成功,可能一是比较复杂二是英文障碍三是老师对这部分不很重视,一带而过。我也确实不知道在实际应用中各个部分的重要性,当然也分不同方向的。
感觉培训部在学员要求方面不够严格,用一种有点不合适的话说就是在当初说的那些严格要求实在是在忽悠,哈哈,这是一个很高明的招生手段。
Java高级的倒数第二天,简单介绍了序列化和java 2D高级绘图,一带而过。
序列化是个很有意思的东西,原来程序也不是那么聪明的嘛,哈哈。
节后的第一天,高级课程的倒数第三天,结束了jdbc的课程,完善了我的记事本程序,添加学员管理的增删改查,老一套,跟C#差不多, 没什么意思,这东西都是一个套路。
十一过了一大半,接连两天猫在这个小屋里,陪伴我的,我的电脑,不出门一步。没有言语,感觉不错,安静,安静,继续下去不错,我喜欢安静,安安静静的,安安静静的,头疼,头疼的厉害,呵呵,睡觉,看书,看新闻,看电影,吃。呵呵
今天是十一前的最后一天上课,讲了java的JDBC,和在C# 中学的ado.net差不多,所以感觉还比较简单。
中午和老师呆了一中午,哈哈,他说我不够用功,呵呵,我也不知道,是不是,他说我是这个班第一的,但是下的力气还不够,
呵呵夸奖了,我也就这点能耐了。
希望十一没有什么事发生。。。。
痛苦啊,我的一切都变了,变得苍白,哎,说这有什么用呢〉?想啊 想啊,没有办法,没有出路。。。。
晚上回来给家打了电话,说不回去了,我知道娘还是很想让我回去,我想了很久,路上,上课时,老走思,真的不想回去,我怕,我怕看到他们,不知道说些什么,不知道怎么回答他们的问题,甚至都害怕打电话,想发个短信算了,看到那些幸福的人,确实会有两秒钟的羡慕,呵呵,也许我真的冷了,不是也许,真的,我究竟为了什么,没有了方向,没有了憧憬,呵呵,又老调重弹了,哎....
有时候她跟我说起我们的事,我们的回忆,我们的曾经,我一看就想哭,我知道她给我发短信时也一定哭了,可我不能哭,人家会以为我是神经病,骑车从一堆等公交的人群中经过,不知道又没有人注意我,呵呵,她在跟我说这些的时候,我又能说些什么呢,我又能怎么样呢?呜呜,她说这些话只能跟我说,可我没人能跟谁说,我跟谁说呢,自己往肚子里咽吧,她说我冷血,变了,可我又能怎么样呢,我整天面对这些事我会活不下去的,我只能转移注意力,想点别的,当我想哭的时候,就使劲的让自己想些别的,想些别的,是啊,这一切又是我一手造成的,哈哈,又能怪谁呢,自己憋着吧,不知道我能承受多久,活的好累,只是可怜可怜的她。
我的皇上太上皇,你们让我以后活在心债里无法自拔,我无脸见我的朋友同学,他们会骂我是狼心狗肺,禽兽不如,我想终有一天,你们会认识到你们的认识是错误的,是错误的,可到那时,可能什么都晚了,请原谅和理解我对你们的冷淡,我也不想,可我...,我不想让任何人伤心,我想让任何人都觉得我很乖很听话很可靠,可我 ...,我以为她不会那么的....,可我...,......................................我究竟为了什么?/。
好了,又借此机会发了一通牢骚,是啊,说出来些,心里会舒服一些,早就想写写了因为没有人可说也不会说,因为没时间,呵呵,顺着太阳起落,伴着随风起舞漫无目的的蒲公英飞阿飞阿,它也不知道它会飞多久,飞到哪去,落在哪,成为一个低级动物。
今天挺无聊的,讲了些集合的相关类,map,list,set,有点不知道他们的具体用途,下午讲了基本的一些sql语句,没意思!
今天没什么新东西,做了一天记事本,真不知道老师是怎么计划的,基本功能都实现了,刚刚把查找弄了个差不多,想了半天怎么在FindDialog类里面操作记事本Frame类里面的TextArea,首先想用FindDialog的perent来调用,因为FindDialog的父窗口式Frame,结果行不通,还是用最初想到的,在初始化FindDialog的时候给它的构造函数一个Frame里TextArea的一个引用,然后再FindDialog里操作它,果真这样能行,不知道还有没有更好的办法。 发现java一些更深入的东西老师都没讲,老师太注重实战,理论讲的不够深入,只是讲这东西怎么用,至于它的原理机制就涉及到的很少了,只能回去自己看书了。
有一天过去了,今天真正认识了Jbuilder2005的面目,上来就给我了个下马威,自动提示功能不能用,在老师的建议下冲撞Jbuilder,结果还是不行,再重装,还不行,哈哈,无意中发现是输入法的问题,狂晕。 上面全是英文,然后金山词霸还不能用,真是让我有些头疼,看来要想驾驭它还是得好好学英文了,跟着老师对这家伙作了一些设置,给的感觉就是跟VS.Net的易用性差远了,天上地下,代码自动生成不够智能,丢代码,试图页面不正常显示,切换不灵活,添加控件不方便的很,控件属性修改也不好使,唉我就不说了,再有就是这东西吃内存太厉害,512有点吃力了,看来我是急需买内存了,呜呜! 通过昨天晚上和今天的努力,把贪吃蛇游戏基本上做出来了,按照软件设计的一般思路,构建合理的类,有Frame类,Panel类,Snake类,Food类,各负其责。当然了,实现的只是基本功能,不能跟实际的游戏相比,了解的是一种思路,这就是经验。
2006-9-26 星期二 今天又接着学习了一些swing里的控件,都是以前在C#里熟悉的,用起来还比较顺手,老师让我更注意一些变成风格,低耦合高内聚,好专业的词汇,刚刚理解了一些它的含义。 上午迫不及待的打开JBuilder2005浏览了一番,看了看它自动生成的代码,突然想到,java里没有委托么???反正在目前所见到的代码里面没有这东西,在C#里是利用委托实现事件关联的,在java里是用继承监听适配器或实现监听器接口,然后用addActionListener方法添加给按钮之类的控件,而这个addActionListener方法其又是怎样实现的呢???
Java高级第一天,呵呵 今天初步接触了swing 感觉swing里的那些组建才更像C#.net里的那些,用法阿,功能,特点阿 Awt有些笨拙难看,swing也不好。 难道这样是为了在各种系统中兼容〉?/ ,呵呵,要是这样只能求其最小公分母了。 感觉,的确是C# 要更胜一筹,可能是C#站在java的肩膀上进行了改进进行了增补修改,越来越完善越来越强大嘛。 话说回来,java更底层一些,所有要实现的东西越来越抽象,抽象到要实现一个效果只需要调用一个现成的方法就可以了,用户也不用明白其是怎么实现的,越来越傻瓜式变成,在这方面C# 要先进些。 多了解一些底部的东西,以后好容易进步,知其然更知其所以然,哈哈。
今天继续学习java的swing,打开文件,保存文件的类和方法,练习又快又好的编码。今天没什么好说的,呵呵,现在都是手动写代码,能够了解它的结构和思想,写java的那些天才程序员简直太厉害了,呵呵。 用学到的知识实现了打开文件,保存文件,感觉设计一个好的结构简直太重要了,不知道JBuilder自动生成的代码什么样子,呵呵! 哦忘了说了,今天下雨了,给我的感觉就是车堵的更厉害了,占满了路的每一个角落,该想想办法了,瞎操心,呵呵。 还是那样的郁闷,沉重,就好像那些递归方法,汉诺塔?不容易理清,不容易走出来,呵呵,我现在是在while(true){}里面,找不到合适的条件走出来,在里面挣扎,挣扎,结果会是什么? 为了什么?
Java基础最后一天 学些了网络编程,java中的一些类和方法,用套接字Socket编程。 新接触的东西,有意思。 做了个小程序,用一台机子做服务器,实现多个人聊天,哈哈,一个小的聊天室。 接下来要学swing了。
今天是java基础课的倒数第二天,学习流,当初学C++的时候,流这部分只是潦草的看了一下,今天学习java的流,好家伙,它的类真是多阿,有点理不清,感觉常用的也就是字节流和字符流,如果用字节流就用FileInputStream(FileOutputStream),BufferedInputStream(BufferedOutputStream),用FileReader,FileWriter(BufferedReader,BufferedWriter)可以直接写入字符串。 记得用C#做自动生成静态页面的时候用到了流的类,当时只是照猫画虎实现了,现在理解的更深入一些。 作了个小程序,用递归的方法实现给定文件夹内的所有文件夹和文件的遍历 明天最后一天,接触网络编程。
今天说这个周日要上课,说是为了跟十一假期错开,想起马上就要十一了,真不想回家,不想回,郁闷!
不知道这样下去会是个什么样的结局,怕,恐惧,不想想这些。
谁会了解,我是个什么样的心情。
我都不怎么清楚。
心疼了好久了。深吸气会舒服些。
她更可怜,我知道,可我又有什么办法呢?/呜呜......
今天学习了applet,java的小应用程序,给我的印象它就好像javascript,只不过要强大一些,呵呵,可以嵌在网页里,由浏览器执行,就像脚本一样嘛,哈哈 只不过还不清楚在实际应用中,它具体用在哪。 这可能就是java中特别的部分吧。好好学.
接着学习线程。 线程的同步和对象锁的概念和使用。 Object类的三个方法wait()、notify()、notifyAll(),使线程之间通讯。 对线程还不是能深入的了解,回去看看《java编程思想》的线程章节。
昨天晚上通过修改画线段的代码实现了线段的自动移动,并且通过方向键来改变方向,就像贪吃蛇的样子,主要思路就是,通过将两个点组成一条线段,将这些线段加入到ArrayList中,当ArrayList的大小达到设置的长度后,每向ArrayList中加入一条线段则从尾部移除一条线段,这样实现了线段的移动。 接下来,考虑将这条线段,也就是蛇,写成一个类,它有长度,控制方向的事件以及移动的方法。蛇类的对象将成为Frame的一个属性。考虑中… 另一个程序,就是抽奖,从十个数中随机取数,每次取一个,不能重复,这里的关键就是怎样不重复,就是随机生成的数为数组的下标,而后将下标对应的值将末尾一个值调换,一次类推,随机生成数的范围将每次缩小1。 由于昨天晚上没有休息好,今天的状态不是很好,老困,中午吃完饭,抓紧时间睡,哈哈,下午精神多了。 好了回家。呵呵
今天是新的一周开始,通过上一周的学习,掌握了一些java最基础的应用。 上午学习了异常处理 Java中如果想在一个方法中抛出异常,必须在方法声明后加上throws Exception或者具体异常名称,调用该方法的方法可以对异常进行处理也可以接着向上抛出。 作了三个练习,其中汉诺塔的问题用递归实现理解起来比较复杂: public class Hanoverian { public Hanoverian() {} public void calculate(int i,char a,char b,char c) { if(i == 1) { remove(a,c); } else { calculate(i-1,a,c,b); remove(a,b); calculate(i-1,b,a,c); } } private void remove(char m,char n) { System.out.println(m + "->" + n); } public static void main(String[] args) { Hanoverian myhanoverian = new Hanoverian(); myhanoverian.calculate(10,'a','b','c'); } } 留下代码,供以后参考,呵呵! 下午初步学习了线程,这是以前接触比较少的,有很多新知识 当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的 。可以把main方法的内容理解为主线程的线程体。而其它子线程的线程体是Runnable接口的run方法。Thread类实现了Runnable接口,我们可以扩展Thread类或自写一个类来实现Runnable接口来完成多程序程序。 我们不会调用run方法来启动线程,必须用start方法 调用Thread的interrupt()方法可发送中断请求,如果线程在休眠或等待状态可触发一个异常从而实现中止线程。 今天是刚刚详细接触线程的有关知识,还需要更深入的理解。 刚才做了个例子。如果想使用线程,必须实现Runnable接口或者继承Thread类,重写Run方法来实现,自己的理解。 明天接着学习线程。 有了线程就可以做更多事了,哈哈。
做了两个小程序,感觉代码风格和C# 很相似的,到目前为止,所有的代码都是手动敲上去的以增进对java体制和代码风格的理解和掌握,当初学习C# 可没有这样,直接用.net 2003写代码,其中一些代码在创建文件以及拖拽控件时,代码都给自动生成了,也么怎么研究它的机制。
学习继承。 Java的继承关键字extends 学习包,包的概念就像C# 中的命名空间nameSpace,对应java的关键字是package 引用包是import ,就像C#中的using
学习一些常用类,比如Math类,日期类,特别注意的是日期的月份是从0开始的,就像数组的下标。 学习AWT,AWT金山词霸的翻译是“高次废水处理”,哈哈哈,AWT 抽象窗口工具集,我的理解AWT包含一些用于窗口显示类,用于画窗体,按钮之类。老师说它不够强大并且跨平台兼容性不好,以后会学更强大的swing。 AWT是够不强大的,连个下拉列表框都没有,哈哈
学习java中的数组和字符串,其中的一些方法,和C#很相似,呵呵,可能应该说C# 和Java很相似 Java的一般书写规则:类名首字母均大写,方法名和字段名首字母均小写。 fanal关键字,修饰类时,此类不可以被继承,为终极类。修饰字段时为常量,值不能更改
学习java的第一天。 了解了java的发展历程,学习了HelloWorld.java程序 public class HelloWorld { public static void main(String[] args) { Syetem.out.println(“Hello World”); } } 与C# 的不同点:一是main方法必须有String数组类型的参数,另外java的书写习惯是在方法声明后紧接“{”,感觉不习惯很结构不清晰,呵呵,个人习惯。 学习java环境配置类路径 选择"环境变量",在"环境变量"窗口中编辑classpath和path。 1、JAVA_HOME C:\j2sdk1.4.2 2、path 该变量已经存在,需在其后添加如下: %JAVA_HOME%\bin 3、classpath .;%JAVA_HOME%\lib;
学习常规数据类型和控制结构,这些与C++,C# 没什么太大差别。 感觉java的System.out.println()和print()方法很强大,它们几乎将输出所有类型的参数转换成字符串输出。
某某人总是以天气为题,呵呵呵
刚趴窗台上,脖子伸出窗外,用力的呼吸,好像有秋天的味道了,还不时很浓,呵呵呵,时间过得真快。
中午吃饭,要得炒饼,放了点辣椒,没吃两口,辣椒被我吸了进去,狂咳,顿时眼泪、鼻涕都出来了,再咳,狂咳,差点没死掉,呵呵,原来,死掉也是蛮容易的哦。我有吃东西喝水爱呛的毛病,不定哪回,就呛过去了,呵呵!也不错。
不想让别人知道我的太多事和心情,所以今天把blog权限关了。
无限期关闭。
我像这只燕子么?!不像。我太懦弱了,没准儿不敢降落去叫她,呵呵。真的是禽兽不如。心债啊,我自己跳下去,欠下的,用什么来还?我知道我会失去更多... ...
学了一招怎么在日志里插入图片,试验一下,呵呵呵
搞了三次,才搞定,嗯,不错还!
代码人生。
昨天刚夸了天气好,今天就变得灰蒙蒙了,伴随着心情,早上一坐在这,头就疼,好像被涨大了,恼人的游戏哦,加着好像没有空调,屋子里闷热,更增加了心情烦躁。
还好沈工没叫我,我的脑袋可转不动了,头疼...
敢问路在何方?!
路在脚下。
哈哈哈哈!
郁闷!
呵呵,改了字体大小,看看是不是看起来舒服一些。
这个星期都是好天气,阳光普照,好像昨天是处暑,天气转凉了。
日子还是照常一天一天过着,我的让人头疼的游戏继续让人头疼着,自己已经疯了好几次了,看看这些旧知道了,呵呵。
255 定义内存指针 碎片缓冲 ★ 碎片缓冲 100 看内存 起始地址: FF9D0898 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF
FF9D0890 FF 00 00 00 BC 42 9D FF 00 00 00 00 73 5C 53 51 ...�?....s\SQ FF9D08A0 4C 58 4D 4C 20 34 2E 30 5C 62 69 6E 5C 00 4C 4F LXML 4.0\bin\.LO FF9D08B0 47 4F 4E 53 45 52 56 45 52 3D 5C 5C 41 4D 50 43 GONSERVER=\\AMPC FF9D08C0 00 4E 55 4D 42 45 52 5F 4F 46 5F 50 52 4F 43 45 .NUMBER_OF_PROCE FF9D08D0 53 53 4F 52 53 3D 32 00 4F 53 3D 57 69 6E 64 6F SSORS=2.OS=Windo FF9D08E0 77 73 5F 4E 54 00 50 61 74 68 3D 43 3A 5C 57 49 ws_NT.Path=C:\WI FF9D08F0 4E 44 4F 57 53 5C 73 79 73 74 65 6D 33 32 3B 43 NDOWS\system32;C★ 碎片缓冲 100 填0 ★ 碎片缓冲 100 看内存 起始地址: FF9D0898 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF
FF9D0890 FF 00 00 00 BC 42 9D FF 00 00 00 00 00 00 00 00 ...�?........ FF9D08A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FF9D08B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FF9D08C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FF9D08D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FF9D08E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ FF9D08F0 00 00 00 00 00 00 00 00 00 00 00 00 33 32 3B 43 ............32;C★ 1 碎片缓冲 0 字节写 ★. 碎片缓冲 100 看内存
让人头疼的东西啊,这部折磨人呢么?!
以前平淡的生活已去回不来了,虽然生活一直是平淡的,可是..,总感觉少了些什么,难道真的要面对现实么,真的不想去想,得过且过的苟活。
刚才看了一个博客,看人家好幸福,充实,美满,呵呵,看来我只能妄想了。
呵呵,人不是想怎么样就能怎么样的,不羡慕了,继续苟活吧/
把自己说的这么可怜,可是这一切却都是你一手造成的,而且还带着她,唉...
我顶你个肺儿.............
今天是周末了,过得真快,时间过得真的很快,转眼八月过了大半了,时间在行不留情的走着,而我呢,而我们呢,有时候时间是漫长的,有时候时间是匆忙的,昨天看到小范写的blog,羡慕于他能写出那么欢快而且细于观察生活的的文字,想想自己,肯定写不出那样的文字,至少现在不能了。 呵呵,这也许可以解释为这就是毕业跟没毕业的差别吧?!希望真的不像我这有点残酷的解释,多让人绝望阿。现在真的越来越像一个禽兽了。随着时间的走着,不留情的走着,我在变,就像生物变异,我也在变异,不确定会进化到什么,进步?倒退?也许强弩之功首先要倒退给自己一个憋红了脸的...之势(想不出词来),这好像是给自己的一个进步的解释,给自己倒退的一个狡辩,看到这些文字的朋友可能会觉得我有些怪异,呵呵,其实不怎么愿让别人看到 。
可能人越发的成长,会变得越发的没有思维,越发的不了解自己,越发的不知道自己心底还没有有那点曾经的梦想,为什么叫梦想,可能跟梦更想象,梦总归是梦,很容易破灭的。又在狡辩,呵呵。
现在真的迷茫了,以前也迷茫过,不同于以前的迷茫,这次是大方向的迷茫,这是必然的么,生物是在外界环境的雕刻下进化的,为了适应生活而进化,哈哈,打这个比喻好像还有点不恰当,恩,我也是为了适应生活么?那就又要讲到自私了,周围环境塑造一个人,有劣根性,这也许是正确的,有劣根性也应该有优根性吧,哈哈,又在为自己狡辩。几千年中的那几千分之二十几就塑造了我这么个...(什么?),而这个“什么”应该在它拥有的所有时间里追求自己的快乐呢还是应该...(不知道怎么写了,这个“应该...还是...” 只能||不能&&的,所以 ),好了,不说这些让人难懂的了。
听说我以前的日志是快乐的,是积极向上的,我记不起来了,我,是健忘的了,前两天去面试,那么简单又熟悉一个语句,竟然硬是想不起来,无奈!可能燕雀永远不会进化到鸿鹄吧,呵呵。以前想做的只是个燕雀,其实现在也没有鸿鹄之志,从生物上讲鸿鹄的妈妈爸爸肯定是鸿鹄,燕雀的妈妈爸爸肯定是燕雀,哈哈,又在狡辩了,你说非要把燕雀变成鸿鹄岂不是很累?!而为什么燕雀就没有鸿鹄之志呢,也不是所有燕雀都没有,反正这个比喻是不可推敲的,哈哈,为什么是比喻呀,比喻总是要有一些不切实际的。
也许燕雀就应该有鸿鹄之志的。
很多事,都是一念之间的,一件事和另一件事之间可能有几个if{}else if{}else{}建立了它们之间的联系,每次给的参数肯定是唯一的,所以结果也是唯一的,并且不是可逆的,一不小心,参数给错了,也许太空中的航天飞机就回不来了,呵呵,在属于自己的那几千分之几十分之几的时间里,如果你决定的一个参数错了,可能本来应该是第一个{}的结果,结果确是第二||三else...个{} 的结果,其实事先也不知道哪个{}里是哪个结果,呵呵,这就麻烦了,应该依据什么给这个参数呢?!可能到最后,也不知道是不是给错了参数,不知道应该给哪个参数,人生的程序是不可以调试的。
本来想写几行文字,没想到都出滚动条了,哈哈,稀里糊涂的不知说了些什么想说些什么,自己都看不懂,好了,喂肚子去吧........
| |
今天天气格外好,据说昨天还出现难得一见的彩虹了,呵呵,有了太阳可定要热的要命,呵呵,这是悲观的想法。大概又半个月过去了,每天有规律的生活,消费的挺奢侈的,每天都去下馆子,唉...,到现在还没发过钱呢,钱真是好东西,呵呵呵呵!
第一行字是早上来的时候写的,现在都中午了,忙别的事了,想写点什么来着,现在又想不起来了,再说吧,吃饭去。
路走到这里,都是自己的脚一步步迈出来的,其实,其实我挺后悔的,但是,又找不到回去的路,或许有,但是相当难,或者,或许有,但是只是或许,不知道能不能回去,或许,只是更深的深渊。
没有她的日子就像一具行尸走肉,木讷、冷漠,虽然她也有很多缺点。她要来了,觉得心里很轻松,舒畅了很多,可是,见到她,又有好像被包围的压力,路已经到了这里,还能怎么回去呢?!我有太多的后顾之忧,使我不能抉择,呵呵,其实是抉择了,选择了痛苦...
我是自私么?某方面是的,可是,我也是痛苦的...
如果要为我的自私狡辩一下的话,我心里我向往的不是这样的,我没那么“志向远大”。
如果我是自由的,我想我会是幸福的!
今天天气还算不错,比前一个星期好多了,伴随着我昏暗的心情。上个月发生了太多事,哈哈,都是自己做出来的,原来我是有梦想的,是有憧憬的,但是现在,我好像空白了,我的事业,我的爱情,我的...,都有他们来掌控,哈哈,自由是要有代价的!
我到底是个什么?我应该为了什么而做出决策?我,是冷血的,而且有病,哈哈!
免于失业的十大软件技术
作者:A. Russell Jones出处:南京大学小百合站
[ 2006-07-02 19:03 ]
摘要:你对我们列出的十门技术精通吗?哪怕是大略精通?
能跟上关键技术的发展,是你在就业市场和未来保持优势的最佳手段。你对我们列出的十门技术精通吗?哪怕是大略精通? -- 罗素・琼斯,执行编辑。
我不知道你的具体工作是什么。如果你是某冷门领域的专家而变得不可或缺,或者你们的公司十分稳固,以你现有的技术就足以安度你的职业生涯,那我不知道你是否有失业的危险。不管怎样,请你先不要急着寄出那些告诉我你们的公司对用VB3十分满意或你们除C以外永不用其它语言的信件,并保留起那些讲述.NET将如何把Java扫地出门、XML将如何取
代关系型数据库、或你怎样能用汇编语言或C写任何软件而任何其它开发工具都不重要的信件。
现在,想象一下如果你像很多受裁员和公司倒闭影响的同行一样失去了工作,那将会怎样。如果你突然需要搬往它处该怎么办?如果你的公司突然做了技术转向又怎么办?
在目前的就业市场,经理们是根据当前和未来的开发需要招聘雇员。作为开发人员,你所掌握的知识是你找工作和保住工作的关键。你要了解技术的发展方向,跟上技术的变化,这一点十分重要,即使你永远不用再找开发方面的工作。
1. XML
首先,你要了解XML。我不是说仅仅是XML规格本身,还包括一系列相关的基于XML的语言:最重要的是XHTML、XSLT、XSL、DTDs、XML Schema(XSD)、XPath、XQuery和SOAP。那些在过去5年内从未碰过键盘的人,可能不知道XML为何物。XML是一种文本文件,使用与HTML类似的标记。XML能定义一个树状结构,并能描述所含的数据。XML最好的一点是既能存结构化数据也能存非结构化数据。它既能存贮和描述“规格的” (regular)表格数据,也能容纳和描述“粗糙的”(ragged)文件数据。XHTML是现今写HTML的首选方法。因为它是形式完好(well formed)的XML,比起古老的、通常是畸形(malformed)的HTML文件,XHTML格式的文件更容易处理。XSLT和XSL是用于把XML文件转成其它格式的语言。可转换的格式包括:文本文件、PDF文件、HTML、以逗号为分隔符的文件,或其它XML文件。 DTD和XML Schema描述XML文件所能包含的内容的类型,并让你“验证”XML文件内容的合理性,而不用写特殊代码以确保内容符合规则要求。XPath和XQuery是用于从XML文件中抽取单个项目或一组项目的查询语言。XQuery扩展了XPath,因而更重要。XQuery与XML的关系正像SQL与关系数据库的关系。SOAP是Web服务之间的一个标准通讯协议。尽管你不需要对SOAP标准一清二楚,你应该熟悉一般的schema和它的工作原理,以便能应用这门技术。
2. Web服务
Web服务是XML流行后的一个直接产物。因为你能用XML描述数据和物件,因为你能用schema确保XML文件内容的合理性,因为XML是基于文本的规范,XML为跨平台通讯标准提供了一个极其方便的基本格式。如果你还从来没碰到Web服务,你可能很快就会碰到,在未来5年内,你几乎肯定会碰到。熟悉Web服务十分重要,因为它是目前所有跨不同机器、不同语言、不同平台和不同地点的通讯协议中最简单的一个。不管你需要与否,Web服务是迈向互用性的重要一步。
XML工作组主席John Bosak曾说XML“给Java一些事做”。实际上,Web服务让所有语言都有了一些事做。Web服务让在大型机上运行的COBOL应用软件能调用在手持设备上运行的Java应用程序、能让Java applet与.NET服务器交谈、能让微机软件与Web服务器无缝连接,并提供了一个相对容易的方法,让企业不光能向外界提供数据,还能提供功能,而且是一种与语言、平台和位置都独立的方法。
3. 面向对象的编程
很多程序员仍认为OOP是象牙塔里的技术。但如果你想一下是什么语言在过去的10年里占主导地位,你就会理解OOP不是象牙塔里的技术。OOP从Smalltalk开始,传到C++和Pascal (Delphi)。Java使OOP大踏步地迈向主流,几年后的VB.NET和C#则完全确立了OOP的优势地位。尽管这些语言中的多数并不要求你必须会OOP,但我觉得如果你不了解OOP的基本概念也不知道如何应用这些概念,你能找到的编程工作将越来越少。
4. Java、C++、C#和VB.NET
我把这些语言列在一起,并不是建议你成为每一种语言的专家。我的理由是:学习编程最有效的方法之一是看代码,而你能看到的大量的代码很可能不是用你所喜爱的语言编写的。
在过去几年,各语言的能力越来越接近。现在,你可以用VB.NET写Windows服务、Web应用程序或命令行程序。即使你只使用一种语言,你也应该学一些其它语言,以便能看懂那些样例,并将其翻译到你所用的语言。这4种语言是基本核心,还有其它一些满足不同需要、颇具用途的语言,如FORTRAN、COBOL、APL、ADA、Perl和Lisp。
5. JavaScript
尽管名字有些相像,但Java与JavaScript并无关联。为什么一个脚本语言会如此重要呢?因为所有主流浏览器都用JavaScript。如果你需要写Web应用程序,你就有足够的理由学JavaScript。JavaScript可以用作ASP或ASP.NET的服务器语言,也可以当做用于扩展XSLT的功能语言(functional language)。JavaScript是Mozilla/Netscape中用于激活基于XUL的程序接口的首选语言。JavaScript的一个变种ActionScript是Flash MX的编程语言。将来,JavaScript很可能成为新设备的编程语言,以及大型应用软件中的宏语言。
与JavaScript相对照的是VBScript。尽管Microsoft的软件对VBScript有良好的支持,但VBScript在未来的开发工作中很可能是一个糟糕的选择。就是Microsoft也倾向于用JavaScript(或Microsoft自己的变种:JScript)写客户端程序。在选择脚本语言时,请选择JavaScript。
6. 正则表达式(Regular Expressions)
查寻关系数据库可以用SQL,查询XML可以用XPath和XQuery,查询纯文本文件则可以用正则表达式。例如,你可以用一个命令从一个HTML文件中查找并删除所有的注释。各种开发语言内置的一些简单的文本查询功能,如"IndexOf"函数或VB中经典的"InStr"函数或"Like"操作符,根本不能与...(乱码)
7. 设计模式
正像OOP通过把对象分类以简化编程一样,设计模式对一些普遍的对象之间的交互进行分类,并赋予一个恰当的名称。OOP用得越多,设计模式就越有用。一些最常用的模式的名称已经变成了软件开发领域共同使用的术语,所以要跟上信息的主流,你就要对设计模式有相当的理解。
8. Flash MX
如果你需要在客户端得到比HTML和CSS更多的图形和更强的编程功能,Flash是你的答案。用Flash编程比开发Java applets或写.NET代码要快得多,也容易得多。在最新版本 (MX) 中,Flash不仅仅是画图和制造动画的工具,它已经成为一个编程功能强大的开发环境:能调用SOAP Web服务,也能调用远端服务器上的ColdFusion、Java或.NET程序。Flash无处不在。它的引擎存在于世界上大多数客户端计算机,包括手持设备、置顶盒、甚至是新的书写板电脑
。所以使用Flash能大大扩展你的程序的应用范围。
9. Linux/Windows
熟悉Linux。在一台旧机器或新机器上安装Linux。下载图形用户界面,在其基础上写一些程序。安装Apache,写一个Web应用程序。这个世界不再仅仅是属于Windows,这种趋势可能还会持续下去。如果你是一名中坚的Linux开发人员,那就抛弃你对Windows的憎恶,看看你能否做一些Windows编程。Windows能继续在台式电脑上称王是有其原因的,这不仅仅是因为Microsoft控制了这个市场。
没人知道你们公司会在什么时候决定从Linux转向Windows(或从Windows转向Linux),或者你想跳到一家用另一种平台的公司,或者你想出了开发一个杀手软件的好主意,所以你要争取拥有在不同操作系统上的编程经验。
10. SQL
尽管SQL不像本文讨论的其它技术那样新,而且SQL的重要性在未来10年内很可能降低,但它仍然是一项基本技能。很多开发人员还没有掌握这门技术,或掌握得不够,不足以有效率地使用它。不要依赖具有图形用户界面的SQL生成器替你做事情,你要自己手工地写查询命令,直到你熟悉基本的SQL语法为止。了解SQL不仅能帮助你日后学习XQuery,你还有可能马上发现能简化或改进目前项目的方法。
培养好奇心
最后,(对,我意识到这是第11门技术),好奇心是你最重要的技能。要去尝试各种东西。新语言或新技术对你当前或将来的工作可能有用,也可能没用,但并不是你所学的每一件事都是为了工作。不要害怕失败,万事开头难,学新技术也是如此。大多数失败是因为人们希望太快地学到太多的东西。要对每一点进步感到满意,不要让时间(或缺乏时间)妨碍你。相反,你要安排时间留心、研究、试验新的开发技术和工具。
你可能永远也没有必要成为这些技术的专家,而且我的选择可能根本不适合你的特殊情况,但通过培养好奇心,你将会发现你应该了解的东西。
两则故事
什么是爱情
有一天,柏拉图问老师苏格拉底什么是爱情?老师就让他先到到麦田里去,摘一棵全麦田里最大最金黄的麦穗来,期间只能摘一次,并且只可向前走,不能回头。柏拉图于是按照老师说的去做了。结果他两手空空的走出了田地。老师问他为什么摘不到?他说:因为只能摘一次,又不能走回头路,期间即使见到最大最金黄的,因为不知前面是否有更好的,所以没有摘;走到前面时,又发觉总不及之前见到的好,原来最大最金黄的麦穗早已错过了;于是我什么也没摘。老师说:这就是‘爱情’。
什么是婚姻
柏拉图问他的老师什么是婚姻,他的老师就叫他先到树林里,砍下一棵全树林最大最茂盛、最适合放在家作圣诞树的树。其间同样只能砍一次,以及同样只可以向前走,不能回头。柏拉图于是照着老师的说话做。今次,他带了一棵普普通通,不是很茂盛,亦不算太差的树回来。老师问他,怎么带这棵普普通通的树回来,他说:‘有了上一次经验,当我走到大半路程还两手空空时,看到这棵树也不太差,便砍下来,免得错过了后,最后又什么也带不出来。’老师说:‘这就是婚姻!’人生就正如穿越麦田和树林,只走一次,不能回头。要找到属于自己最好的麦穗和大树,你必须要有莫大的勇气和付出相当的努力。
从此不再相信有电影中的麦穗和圣诞树......
走出校门了,发现自己越来越不像个人了,兽一头,还不凶猛,兽也有好兽,唉,反正不是东西了!在这个世界无能为力的偷生!从此更加冷漠!
应届毕业生少走弯路的十条忠告
2006.06.29 来自:pconline 佚名
刚刚走上社会的年轻人,充满了蓄势待发的豪情、青春的朝气、前卫的思想,梦想着丰富的待遇和轰轰烈烈的事业。可是,社会毕竟是一所包罗万象、喧嚣复杂的大学校,这里没有寒暑假,拒绝虚假和肤浅,更拒绝空想和庸碌,难以预告何时开课何时放学。
如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告。好好地遵循、把握这些忠告和建议吧,比起所学的课堂课程来,它毫不逊色!
1、买个闹钟,以便按时叫醒你。贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样。不仅要学会准时,更要学会提前。就如你坐车去 某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达。“闹钟”只是一种简单的标志和提示,真正灵活、实用的时间,掌握 在每个人的心中。
2、如果你不喜欢现在的工作,要么辞职不干,要么就闭嘴不言。初出茅庐,往往眼高手低,心高气傲,大事做不了,小事不愿做。不要养成挑三拣四的习惯。不要雨天烦打伞,不带伞又怕淋雨,处处表现出不满的情绪。记住,不做则已,要做就要做好。
3、每个人都有孤独的时候。要学会忍受孤独,这样才会成熟起来。年轻人嘻嘻哈哈、打打闹闹惯了,到了一个陌生的环境,面对形形色色的人和事,一 下子不知所措起来,有时连一个可以倾心说话的地方也没有。这时,千万别浮躁,学会静心,学会忍受孤独。在孤独中思考,在思考中成熟,在成熟中升华。不要因 为寂寞而乱了方寸,而去做无聊无益的事情,白白浪费了宝贵的时间。
4、走运时要做好倒霉的准备。有一天,一只狐狸走到一个葡萄园外,看见里面水灵灵的葡萄垂涎欲滴。可是外面有栅栏挡着,无法进去。于是它一狠心 绝食三日,减肥之后,终于钻进葡萄园内饱餐一顿。当它心满意足地想离开葡萄园时,发觉自己吃得太饱,怎么也钻不出栅栏了。相信任何人都不愿做这样的狐狸。 退路同样重要。饱带干粮,晴带雨伞,点滴积累,水到渠成。有的东西今天似乎一文不值,但有朝一日也许就会身价百倍。
5、不要像玻璃那样脆弱。有的人眼睛总盯着自己,所以长不高看不远;总是喜欢怨天尤人,也使别人无比厌烦。没有苦中苦,哪来甜中甜?不要像玻璃那样脆弱,而应像水晶一样透明,太阳一样辉煌,腊梅一样坚强。既然睁开眼睛享受风的清凉,就不要埋怨风中细小的沙粒。
6、管住自己的嘴巴。不要谈论自己,更不要议论别人。谈论自己往往会自大虚伪,在名不副实中失去自己。议论别人往往陷入鸡毛蒜皮的是非口舌中纠 缠不清。每天下班后和你的那些同事朋友喝酒聊天可不是件好事,因为,这中间往往会把议论同事、朋友当做话题。背后议论人总是不好的,尤其是议论别人的短 处,这些会降低你的人格。
7、机会从不会“失掉”,你失掉了,自有别人会得到。不要凡事在天,守株待兔,更不要寄希望于“机会”。机会只不过是相对于充分准备而又善于创 造机会的人而言的。也许,你正为失去一个机会而懊悔、埋怨的时候,机会正被你对面那个同样的“倒霉鬼”给抓住了。没有机会,就要创造机会,有了机会,就要 巧妙地抓住。
8、若电话老是不响,你该打出去。很多时候,电话会给你带来意想不到的收获,它不是花瓶,仅仅成为一种摆设。交了新朋友,别忘了老朋友,朋友多了路好走。交际的一大诀窍就是主动。好的人缘好的口碑,往往助你的事业更上一个台阶。
9、千万不要因为自己已经到了结婚年龄而草率结婚。想结婚,就要找一个能和你心心相印、相辅相携的伴侣。不要因为放纵和游戏而恋爱,不要因为恋爱而影响工作和事业,更不要因一桩草率而失败的婚姻而使人生受阻。感情用事往往会因小失大。
10、写出你一生要做的事情,把单子放在皮夹里,经常拿出来看。人生要有目标,要有计划,要有提醒,要有紧迫感。一个又一个小目标串起来,就成了你一生的大目标。生活富足了,环境改善了,不要忘了皮夹里那张看似薄薄的单子。
昨天,晚上,喝了些没意思的酒,吃了些不知道啥名儿的菜...
想在关闭子窗口同时刷新父窗口,在网上搜了半天终于实现啦,哈哈,只要一句话:
“HttpContext.Current.Response.Write("<Script language='JavaScript'>opener.location.href=opener.location.href;window.close();</Script>"); ”
还有个写法:“HttpContext.Current.Response.Write("<Script language='JavaScript'>parent.location.reload();</Script>")"
我的父窗口加载需要传入一个参数,这样出现了一个头疼的问题,就是页面产生了回送事件弹出一个对话框,用第一个写法就没问题了,哈哈!
Jscript真是太厉害了,能实现好多事,学习Ing!
好了,下班拉,回家啦!哦,对了,明天周末,休息...
想用Jscript的"<script language='javascript'>window.parent.location.href('"+strUrl+"');</script>"弹出一个提示框,想将里面的消息换行,搞了半天,“\t”、"\r”、“\r\t”、“<br>都不行,这才知道JavaScript的转换成这个样子的:“\\r\\t”
"
又学一招,哈哈,高兴!
2006年5月27日上午十点整 ,哈哈,刚刚解决了一个简单的问题 ,但足以让我这个菜猪 兴奋高兴啦,哈哈 ,赶忙跑来记下拉,以供以后察看,哈哈 !
问题:RadioButton加入DataGrid模板列引起的问题。我的页面有几个panel,用户在datagrid里选中一个RadioButton点击下一步,进入下一个panel,上个panel隐藏,问题出现于,在点击上一步回到选择RadioButtn页时(是同一个页,不同panel的切换),单选框RadioButton失灵了...
解决方案:
在html页添加脚本
| |
卫星图片
| |
张永乐(张永乐) 17:38:02 明天我就不来了 我的部分应该有不少问题 你就帮忙改吧 改不过来的 就用公司的电话给我打 说不明白我就自己过来 刘朝春(刘朝春) 17:38:41 明就不来啦? 刘朝春(刘朝春) 17:38:46 刘朝春(刘朝春) 17:39:00 知道了 张永乐(张永乐) 17:39:10 我把这的人都惹了还来做什么啊 刘朝春(刘朝春) 17:39:33 没惹谁啊 刘朝春(刘朝春) 17:40:01 一会一起走啊 张永乐(张永乐) 17:40:11 好的 我这么固执当然不好 刘朝春(刘朝春) 17:40:57 是 ,大家都不想让你走 张永乐(张永乐) 17:41:28 可不是, 刘朝春(刘朝春) 17:42:14 以后保持联系阿 张永乐(张永乐) 17:42:24 好的,有Q呢 刘朝春(刘朝春) 17:42:40 恩, 张永乐(张永乐) 17:42:56 你看我写的小帖呵呵, 刘朝春(刘朝春) 17:43:04 哪呢? 张永乐(张永乐) 17:43:28 开始想发在CRM上,现在觉得不好啊 刘朝春(刘朝春) 17:43:30 你接固定电话很贵的吧 张永乐(张永乐) 17:43:53 我这有168分钟免费 刘朝春(刘朝春) 17:44:11 哦,我接3毛 呵呵 刘朝春(刘朝春) 17:44:18 那你放哪了阿 张永乐(张永乐) 17:44:21 数亿年前,当漫漫海水退却不久,小强便在蕨类的枝蔓间诞生了; 一亿年前,一群被称为恐龙的家伙统治了大陆,小强在硕大的翅膀和脚掌间穿梭;
七千五百万年前,庞然大物的尸骨深埋于陨石尘埃中,小强在昏暗的天暮下勿勿爬过;
再后来,海水继续退却,一种以吃它祖先奶水成长的动物爆炸式地占领了大陆,四条腿的,六条腿的和不长腿的,奇形怪状,陆地再大,也显得拥挤不堪。小强晃动着触须,吮吸露水;
三四百万年前,在一个叫非洲的地方,一只不安的猴子跳下树来,学会了两只脚挪动,自以为聪明绝顶,千秋是它的,以至于它健忘地认为,它既不来自大海也不来自丛林,而是一个叫上帝的老头儿派来的使者,这个世界是那老头的也是它的。为了证明给其它吃奶的和不吃奶的同类,它编了一个花环套在头上,说:看,这是上帝的草帽。跑啊跳啊,饿了,摘果子,钓蚂蚁,也捉小强来吃。
《天演论》里找不到小强,因为严先生身于“清”而不清,不是他有老花眼;《资本论》里找不到小强,因为马先生满心向着光明盛着欣喜,错过了暗角里的小强;但爱情故事里少不了小强,因为小强常常能制造甜蜜的借口,比如唐哥,一只脚踩死了小强,另一只脚也便顺利来到秋香姐的床边。
N年以后,四条腿的不长腿的不见了,草帽不见了,两条腿的吃奶的家伙也不见了,小强还是小强,它游走夹缝,沐浴石尘,躲避毒雾和拖鞋,不曾被消灭也不会被消灭,生来没有坚硬的脊椎支撑躯干,却有一根见不到的柱石。小强无处不在,小强永远是小强。 刘朝春(刘朝春) 17:47:17 哈哈 强 刘朝春(刘朝春) 17:47:27 收藏 张永乐(张永乐) 17:47:29 小强小强,小强啊小强 张永乐(张永乐) 17:47:42 刘朝春(刘朝春) 17:48:01 放我msn空间里行不行 张永乐(张永乐) 17:48:17 呵呵,没问题啊, 刘朝春(刘朝春) 17:48:23 OK 张永乐(张永乐) 17:48:30 msn空间是你的博客吗 刘朝春(刘朝春) 17:48:39 算是把
经过两个月的实习,终于可以转正了,在学校规定的五月底前能签协议了,高兴高兴
美国职业篮球协会最佳新秀「杰森.基德」,谈到自己成功的历程时说:「小时候,父亲常常带我去打保龄球。我打得不好,总是找借口解释自己为什么打不好,而不是去找原因。父亲就对我说:「别再找借口了,这不是理由,你保龄球打得不好是因为你不练习。」他说得对,我发现自己的缺点,便努力改正,绝对不找借口塘塞。」 |
生活中,我们经常可以碰到类似的情况,遇到一些自己不愿做或不想做的事情,总是找个理由替自己推脱-说「没有时间」;看到一些成功人士的事例,想到自己一事无成,总是找个理由安慰自己-说「别人的机遇好,是我自己不走运」 如果我们真的想做一件事,想得食不甘味,夜不能睡,就一定会去做,而且一定会做得很好,要是你真的喜欢,总会有时间的。每一个成功者都清楚知道自己需要的是什么,他们懂得如何去寻找答案,而不是整天为自己找理由开脱。「不要为自己寻找理由」,这看似简单的一句话,却是打开成功之门最好的钥匙 |
一、每天辛勤工作,因为生命便系于此
二、持之以恒,方可掌握命运 三、深谋远虑,否则你将终身随波逐流 四、未雨绸缪,在顺境中为逆境做准备 五、陷入苦难困境时,仍要面带微笑,直到逆境向你俯首称臣 六、只有计划,没有行动,永远只是空想家
看完后想10秒,你会获益匪浅
[转贴] 发表者: karer
有一对兄弟,他们的家住在80层楼上。有一天他们外出旅行回家,发现大楼停电了!虽然他们背着大包的行李,但看来没有什么别的选择,于是哥哥对弟弟说,我们就爬楼梯上去!于是,他们背着两大包行李开始爬楼梯。爬到20楼的时候他们开始累了,哥哥说“包包太重了,不如这样吧,我们把包包放在这里,等来电后坐电梯来拿。”于是,他们把行李放在了20楼,轻松多了,继续向上爬。
他们有说有笑地往上爬,但是好景不长,到了40楼,两人实在累了。
想到还只爬了一半,两人开始互相埋怨,指责对方不注意大楼的停电公告,才会落得如此下场。他们边吵边爬,就这样一路爬到了60楼。到了60楼,他们累得连吵架的力气也没有了。弟弟对哥哥说,“我们不要吵了,爬完它吧。”于是他们默默地继续爬楼,终于80楼到了!兴奋地来到家门口兄弟俩才发现他们的钥匙留在了20楼的包包里了。
有人说,这个故事其实就是反映了我们的人生:20岁之前,我们活在家人、老师的期望之下,背负着很多的压力、包袱,自己也不够成熟、能力不足,因此步履难免不稳。20岁之后,离开了众人的压力,卸下了包袱,开始全力以赴地追求自己的梦想,就这样愉快地过了20年。可是到了40岁,发现青春已逝,不免产生许多的遗憾和追悔,于是开始遗憾这个、惋惜那个、抱怨这个、嫉恨那个.就这样在抱怨中度过了20年。到了60岁,发现人生已所剩不多,于是告诉自己不要在抱怨了,就珍惜剩下的日子吧!于是默默地走完了自己的余年。到了生命的尽头,才想起自己好象有什么事情没有完成.原来,我们所有的梦想都留在了20岁的青春岁月。
希望有一天
我能用鼠标双击我的钱包
然后选中一张100元
按住“ctrl+c”
接着不停的“ctrl+v”
嘻嘻~~~笑醒~~~
时间过得真快,四月份马上就要过去了,感叹~`太快了@@ ,如此轮回,工作地二个月了,开始习惯了,在学习,在进步,在成长,在感触,在理解,也在感叹,哈哈 ,猪*&^%$#@!――继续奋斗吧!!!
安装SQL Server2000的时候,安装程序提示我安装程序被挂起,让我重新启动电脑,但我即便是重新启动了再次安装,SQL Server2000的安装程序依旧提示我这个错误。看来重起并不能解除被挂起的安装程序。
查阅了资料,得知要解决这个问题需要删除注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
Control\Session Manager下的PendingFileRenameOperations子键。 按
照名称来理解,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager应该存放的是当前系统会话的快照,而PendingFileRenameOperations记录的是一个未成功进行的文件更名操作,
SQL Server2000在安装时可能会使用这个键值,记录在安装过程中对临时文件的操作,如果SQL
Server2000在安装进程启动时就发现这个键值存在,它就认为上一个安装程序没有完成,从而拒绝继续自身的安装进程。而按照道理,任何一个改写过此
键值的程序都应当在结束或者系统重新启动的时候将这个键值删除,但如果由于种种原因这个操作没有被进行的话
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.如果你带领一个团队,在总结工作时要把错误都揽在自己身上,把功劳都记在下属身上。当上司和下属同时在场时要记得及时表扬你的下属。批评人的时候一定要在只有你们两个人的情况下才能进行。
只能输入数字:“^[0-9]*$” 只能输入n位的数字:“^\d{n}$” 只能输入至少n位数字:“^\d{n,}$” 只能输入m-n位的数字:“^\d{m,n}$” 只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$” 只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$” 只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$” 只能输入非零的正整数:“^\+?[1-9][0-9]*$” 只能输入非零的负整数:“^\-[1-9][0-9]*$” 只能输入长度为3的字符:“^.{3}$” 只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$” 只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$” 只能输入由26个小写英文字母组成的字符串:“^[a-z]+$” 只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$” 只能输入由数字、26个英文字母或者下划线组成的字符串:“^\w+$” 验证用户密码:“^[a-zA-Z]\w{5,17}$”正确格式为:以字母开头,长度在6-18之间,
只能包含字符、数字和下划线。 验证是否含有^%&',;=?$\"等字符:“[^%&',;=?$\x22]+” 只能输入汉字:“^[\u4e00-\u9fa5],{0,}$” 验证Email地址:“^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$” 验证InternetURL:“^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$” 验证电话号码:“^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$”
正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,
“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。 验证身份证号(15位或18位数字):“^\d{15}|\d{}18$” 验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12” 验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
正确格式为:“01”“09”和“1”“31”。
毕业的我真的要学习长大了阿,开始在一个公司里拼搏了,呵呵似乎这样说把自己说的有点壮烈了。其实只是生活所迫下的积极罢了!仍然相信着美好 ,生活的美好,未来的美好,努力美好,一直的!
工作了,忙了,时间少了,自己也在变了
|