我的技术旅程(一)

  说到技术,那就要从2006年开始说起了。那时是大四的下半学期,临近毕业,自然也就面临着就业的压力。在某个周末,我和同学们第一次去了人才市场,逛了一圈后,结果灰溜溜地回来了,因为根本找不到一个招聘物理学的岗位,难得没毕业就要失业了?No!专业冷,但心不能冷,回来后,我就在想对策了。

  其实当时的我也有点迷茫,到底转哪一行比较好呢?仔细想想,虽然我学的是应用物理学,公共课也只学了一门C语言,但我还是一直对计算机比较感兴趣,在大四上半学期准备考研时报的也是计算机专业,虽然最后因为一分之差失去了第二轮面试的机会,但在那一段时间里还是让我学到了不少计算机专业方面的知识,并且,平时这一块接触的也比较多。思来想去,最后还是选择往IT发展。当然,IT也有很多个分支,出于个人的爱好,最终还是选择了网站制作这个行业。

  既然选了,那就要做。而且马上即将毕业,再不找到工作户口都落不下来。人生总是充满着选择,在择业方面更是如此。ASP/ASP.NET、PHP、JSP,当时这三大分支让我开始了痛苦的抉择,对于我这个只学过C语言的人来说,不管选哪个都是有风险的,最终,在综合考虑了学习成本和市场需求的情况下,我选择了ASP/ASP.NET这条路,不过当时犯了一个错误,就是我片面地认为,要学ASP .NET,就一定要先学ASP,后来我才发现,两者其实并没有它们名字所表现的那么紧密,但不管怎样,我还是从ASP这门古老的语言开始了我的IT之路。

  接下来,开始了ASP的学习之路,由于那时还在学校,可以到图片馆找相关的书籍,记得那时晚上去自习的时候都是抱着好几本ASP的书籍去啃的,花了半个月左右的时候,算是入门了,于是想开始练练手了。可问题又来了,网页不单单只有程序,还是有页面的,无奈,只好接着去学PS,顺便把Flash也一起学了,又过了半个月左右的时候,终于能勉强做个页面出来。万事俱备,终于可以开始我的首个网站的制作旅程。当时对韩国电影比较感兴趣,于是就以它为主题开始了设计,记得当时还像模像样地注册了个域名:www.krmovie.net,呵呵,当然现在已经失效了。那时我还记得是用flash做了个导航,用PS设计了个Logo,再去网站找了些小图标点缀一下,内容嘛,是以介绍韩国电影的资讯为主,也都是网上找的,就这样,边学边做,终于赶在毕业前,算是做了个网站出来,并使其上线了。

  有作品在手,就去找工作了。还好有个网站能看到的作品在手,得到的面试机会也比较多,大概在第三次面试的时候,我找到了我的首份工作,是一个专门为中小企业建站的公司,以ASP+Access为主,人不多,一开始算上我只有4个,还是在一个公寓里面,没有专门的销售,靠SEO让客户自己找上门的比较多。当时我也没考虑那么多,由于自己这一块还只是刚刚入门,有个这样的锻炼机会也可以接受,于是就在那干了,这一干就是将近一年的时间。

  在这一年的时间,说实话,成长比较慢。除了ASP,Access搞得比较熟,SQL Server接触过几次之外,其它方面并没有太多的涉及。业余时间自己也在学ASP.NET的东西,可是一直没有练手的机会,都是停在纸上谈兵的层面,另外,CSS也是在那时开始接触的,不过那些小公司网站不在乎你用什么布局的,为了节约成本,自然用表格布局的占多数。正因为一直停留在用ASP+Access建站的阶段,这样下去不是个办法,于是乎,为了自己的发展,在一年合约到期后,选择一个更好的发展环境也是不可避免的了。

velocity里使用多个layout模板

layout模板可以帮助我们统一网站各个页面的外观布局,简化不必要的重复性工作。一般我们都是如下配置的:
首先,在调用velocity的spring配置文件里添加如下的视图解析器bean:


    ...

    ...

这里我们的模板文件为:layout/default.vm,内容为:


  

  
  
    ...
    $screen_content
    ...
  

其中$screen_content是用来显示每个子页的具体内容的。
这样配置后,网站里的每个页面都会应用这个layout模板了。
不过,大部分时候网站都不止一套模板,比如网站里的新闻频道和商机频道就会用到不同的模板,但刚才我们定义的模板会用在所有的页面上,那该怎么解决呢?很简单,只需再建一个模板,如:layout/default2.vm,然后在需要用到这个layout模板的vm文件加上:#set( $layout = “/layout/default2.vm” ),OK,这样就可以了,简单吧。

iBATIS的sqlMapConfig配置节与顺序有关

今天写代码时出现了一个很奇怪的错,一直提示org.xml.sax.SAXParseException: The content of element type “sqlMapConfig” must match “(properties?,settings?,resultObjectFactory?,ypeAlias*,typeHandler*,transactionManager?,sqlMap+)+”,不过这些配置节我都有配的呀,后来才发现,原来<sqlMapConfig>下的配置节与顺序有关,如顺序不对,就会报刚才那个错.同时,这里的报错信息也指明了顺序,以后要多多注意这一点.

5个你必须掌握的maven命令

说到maven,相信用过的人都会感叹原来部署也可以这么简单.我相信大家平时用的最多应该是mvn clean,mvn test,mvn install等命令,今天,我要向大家介绍5个暴光率不是很高,但却非常有用的命令,相信掌握了这些命令后,大家对maven会有一个更加深刻的认识.

1. mvn help:describe

你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的.
参数:
1.  -Dplugin=pluginName
2. -Dgoal(或-Dmojo)=goalName:与-Dplugin一起使用,它会列出某个插件的goal信息,如果嫌不够详细,同样可以加-Ddetail.(注:一个插件goal也被认为是一个 “Mojo”)

下面大家就运行mvn help:describe -Dplugin=help -Dmojo=describe感受一下吧!

2. mvn archetype:generate

你是怎么创建你的maven项目的?是不是像这样:mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common,如果你还再用的话,那你就out了,现代人都用mvn archetype:generate了,它将创建项目这件枯燥的事更加人性化,你再也不需要记那么多的archetypeArtifactId,你只需输入archetype:generate,剩下的就是做”选择题”了.

3. mvn tomcat:run

用了maven后,你再也不需要用eclipse里的tomcat来运行web项目(实际工作中经常会发现用它会出现不同步更新的情况),只需在对应目录(如/ryanote)里运行 mvn tomat:run命令,然后就可在浏览器里运行http://localhost:8080/ryanote查看了.如果你想要更多的定制,可以在pom.xml文件里加下面配置:

<build>
   <plugins>
     <plugin>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>tomcat-maven-plugin</artifactId>
       <configuration>
          <path>/web</path>
          <port>9090</port>
       </configuration>
     </plugin>
   </plugins>
</build>

当然你也可以在命令里加参数来实现特定的功能,下面几个比较常用:
1. 跳过测试:-Dmaven.test.skip(=true)
2. 指定端口:-Dmaven.tomcat.port=9090
3. 忽略测试失败:-Dmaven.test.failure.ignore=true
当然,如果你的其它关联项目有过更新的话,一定要在项目根目录下运行mvn clean install来执行更新,再运行mvn tomcat:run使改动生效.

4. mvnDebug tomcat:run

这条命令主要用来远程测试,它会监听远程测试用的8000端口,在eclipse里打开远程测试后,它就会跑起来了,设断点,调试,一切都是这么简单.上面提到的那几个参数在这里同样适用.

5. mvn dependency:sources

故名思义,有了它,你就不用到处找源码了,运行一下,你项目里所依赖的jar包的源码就都有了

velocity中容易忽视的问题

  1. velocity里的减号(-)与变量之间要加空格才能正常计算,否则会被一起当成变量来处理。
  2. 在vm里要用到<、>等数值比较时,放入变量时不能放入字符串的形式,要放入数字类型,否则会报“is not a valid Number”等错,如:out.put(“currentPage”, Integer.valueOf(p));
  3. 有时在网页里加锚点时,会在前面加上多个#号,如“###xxx”,结果同一行的后面的代码就显示不出来了,后来才发现因为velocity里的注释为”##”,后面的代码被注释了,改为一个“#”就可以了
Page 4 of 512345