和java_那些和Java的点滴

最近一段时间忙于学习java,而对于从事.net framework 使用C#语言开发的我而言有一定的难度,虽然语言基本上都一样,但是在使用中仍有一些区别。.net只是微软一家,不开源,做了很多底层的封装,因此学习.net的时候很多都不用去关注,不过似乎专研.net底层的实现已成为一种乐趣,而java开源,版本众多,这些对于java的开发工具、框架的使用等等,各种不一样的版本之间存在着一定的兼容性问题,这让在使用SSH开发项目的时候费劲脑汁。如下就说说自己这段时间对java的学习理解,以及java和C#不同点、开发工具、SSH相关等。

Java PK C#

J#,大家对这个应该不陌生吧(要是不熟悉的就去问度娘吧),它是微软模拟Java开发的一门语言,它有着Java的特性,是一个Java平台,但是由于版权和利益纠纷,微软不得不停止J#的维护,然而就是因为这个,一个站在更高角度上模拟的语言诞生了——C#,它也是面向对象的语言,并且有着java的相关特性,但它又多了很多自有的功能,C#运行在.net 平台上并着力于底层的封装,而Java完全开源,底层实现只要懂一点code,都能看得懂,而因开源存在版本兼容性问题。Java和C#都是面向对象的语言,他们都有着面向对象的特性,封装、继承、多态,只是各自的实现不一样,Java中使用extends和implements分别表示继承和接口实现,而C#则是使用冒号“:”即可,Java中对属性使用Set和Get方法来设置值和获取值,C#中则使用“.”即可显示出该属性字段,然后可以通过赋值的方式进行Set操作,取值则直接“.”即可,可见微软对一些关键词个性化了。说到继承,Java中使用super获取父类的对象,C#则使用base,同时都是单继承模式。C#中提供了强大的List泛型集合,可以很好的操作对象并在效率上有一定的提高,而Java则在1.6版本的时候才引进泛型,同时其功能也不差,不过更多的是在取值和设置值的时候遵循了其Set和Get原则,因此在使用起来不会像C#那样方便,其他的集合对象有,Java中Map对应于C#中Dictionary,Set则对应于没有重复的List或者collection等等。Java语言始终遵循着一种“所见即所想”的思想,因为这种思想我们总是能看到很多的set、get以及2(To)、4(For)等等,因此开发起来对于C#更容易理解,其命名更能清楚的表达其意,而C#则正致力于这方面发展。

Java中有控制台项目、窗体项目、Web项目,C#中有着同样的项目。Java中的包就相当于C#项目中的类库,其内部可以有各种类,包的引用和C#中的项目引用一样,它们都不允许循环引用,Java Web项目编译需要服务器,常使用tomcat,其部署则是将打包到tomcat中的webapps文件夹里面,并编译src文件中的.java文件为.class文件放入WEB-INF中classes文件夹内,发布的时候可以使用某些开发工具自带打包功能(比如Myeclipse)发布成一个文件夹,然后copy到webapps内即可,而C#则比这方便的多,由于微软一家的产品,因此VS中会带有一个虚拟的IIS,项目在运行后会自动发布到这个IIS上即可。类库编译为dll文件,不需要类的源文件,也可以使用VS自带发布功能,打包后需要将文件夹的路径定向到IIS(这里是windows自带的IIS,并不是VS的虚拟IIS)里的虚拟路径,然后进行相关操作即可。对于Java web项目和C# web项目都不可缺少的是其配置文件,java中的web.xml对应于C#中的web.config文件。具体的项目对比如图1所示:

f83bf4bb77d7d59052639b396413da4a.png

图1 javaWeb项目和C#Web项目对比

Java是自编译,而C#需要每次手动编译,Java跨平台,其实是因为Java最终会在JVM上执行,因为JVM跨平台,所以Java被夸为“一次编译,到处运行”。C#则不行,其.net平台并不兼容其他操作系统。

将MyEclipse  Visual Studio化

“工欲善其事必先利其器”,在开发C#项目我们可以使用微软的Visual studio工具,毕竟是自家的东西,开发起来效率高,同时VS致力于傻瓜化的理念,它将把复杂的工作都交由工具处理,开发人员只要很简单的几个步骤即可以搞定。而对于Java,由于开源,确实存在很多的开发工具,由之前使用txt文本写java语句,然后CMD命令执行编译输出,这样的操作把我们带回了dos年代。现在Java主流的开发工具还是很多,用的最多的是eclipse,而其插件Myeclipse则更让我们迷恋。由于习惯了VS的各种智能提示,各种简单操作,因此对Myeclipse做了一些优化。

l  大家都知道在使用Myeclipse时,会很卡,而且有时候会冒出内存溢出等问题。这其实是Myeclipse自作聪明,它在启动时设置了很多的自启动并带有自动更新等等,这需要我们去掉这些设置即可。(windows–>perferences–>general–>startup and shutdown  (这里我们一般就用到tomcat、web、Jsp、File、以及相关UI,其他的都可以去掉))

l  Java中的验证规则很严格,我们常常会开到带感叹号的小三角形,这些都是警告,有一些是没有必要的,而且在每次编写的时候都会自动的验证,这样用起来会很卡,因此只要去掉这些检验即可。(windows-->perferences-->myeclipse-->validation ,除开Manual下面的复选框全部选中之外,其他全部不选;windows–>perferences–>general–>validation->editors->Text Editors->spelling取消拼写检查)

l  VS的智能提示功能,是公认很强大的功能,而习惯了它的智能提示,初步接触Myeclipse却没有这个功能,用起来很不舒服。琢磨后发现Myeclipse实现了这一功能,而且比VS更能智能化,可以自动配置。(window---preferences---Java---Editor---Contenet Assist 接着在右下角“Auto activation triggers for Java:”这句话右边文本框值改成 ".abc"改成“" .abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"”)而这样的设置只能对于Java文件而言,VS中可以对aspx、xml等的智能提示,Myeclipse也不甘示弱,只要一下配置即可。(window---preferences---Myeclipse---Files and Editors 修改source即可,当然这会因为版本不同而不同),对于XML的提示还有一种方法就是引入XML中的声明,主要在SSH配置中会使用到。

l  在VS中给出了很好的调试过程,我们可以使用F5运行调试并跳到下一个断点,F9插入断点,F10执行一步一步调试,F11进入方法内,同时给出了watch,Output、修改值等功能。而Myeclipse也具有同样的功能,F8对F5,F6对F10,F5对F11,同时也可以Watch、修改值等功能。

这里主要介绍Myeclipse常用的优化方法,通过这样的优化后,找到了VS的身影,又更亲切了,而对于Myeclipse的优化有更多的方法,很多方法在网上可以找到,但是需要慎用,比如在某一个项目需要某一启动项时,而该启动项被优化禁止了,那就会有各种各样的问题被抛出,那时只能郁闷了。

SSH2配置之烦

很多人抱怨,Java配置太复杂了,其实这些抱怨是学习.net或者其他不需要配置或者配置很简洁的语言的开发者创造的。而懂Java的人都知道Java不需要过多的配置,而为什么它会存在这么多的配置呢?主要是Java开源,为了适应于各种版本的兼容,因此掀起了配置旋风,通过配置可以很好的解决各种版本间的兼容性问题,比如SSH,当然这样的配置有着它自己的风格,并且可以很好的增加项目的灵活和健壮性。

SSH2,这就是Java中大名鼎鼎的三大框架(struts+spring+hibernate),当然那个2并不是说这个框架很“二”,而是指struts2,初步接触这三大框架完全不知道是怎么回事,还好有度娘和谷哥,struts主要是实现一个路由(因为个人觉得struts的功能和asp.net mvc中的控制器差不多,因此习惯把它叫做路由)的管理,通过struts.xml配置文件实现action和formbean的控制,spring则更多的关注业务层的处理,其实spring就是一个大杂烩,它什么都想插一腿,它可以实现struts的路由控制,也可以实现hibernate的数据库操作,不过这些操作都做的还可以,但是由于其AOP和IOC的出众,因此被用作处理业务层,而且使用applicationContext.xml(applicationContext-*.xml可以配置多个,星号“*”一般分为web、service、dao以及hibernate)管理整个项目,hibernate就是一个ORM工具,和.net中使用的EF、Linq都是一样的,使用hibernate.cfg.xml管理数据库链接以及具体实体类和数据表对应的映射,这三大框架都可以单独的使用在项目中,但是在一起使用功能确实很强大。

三大框架在项目中该怎么连接在一起呢?其主要是使用spring的依赖注入思想,在.net中没有这个思想,.net中声明一个类就直接new,这样让程序不好控制,因此spring中的依赖注入思想就是解决这一缺陷的。其实现代码如图2,这样的依赖注入其实就是new一个对象实例,然后把这个实例注入到代码中某一属性,通过注入,这个属性就是一个有着实例的对象,就可以进行相关操作。

c74a3e3943a16c4013e73418b30a1d92.png

图2 ssh中Spring依赖注入

配置文件中的一个bean其实就是一个类,在启动tomcat服务器的时候就会初始化这些bean,这些bean初始化后,在jsp发起一个请求后就会直接调用,然后注入到程序中相应的代码上,这里必须同名,如usersDao对应于name=”usersDao”即可。

这里使用struts2,主要是由于struts2比struts 1.x更好用,其实现的原理截然不一样(这个真的不知道开发方怎么搞得,一个高版本居然完全另辟蹊径,这让学习者郁闷啊)。具体的不同和原理的区别相信度娘和谷哥比我知道多。struts2主要合并了struts1中的formbean和action,它把formbean直接合并到action中,而且给出的配置完全不像struts1那样需要分开配置,不过它这样的合并可以让程序更好管理,并且只需要在页面给出具体的属性值即可。同时可以使用struts2特有的“!“表达式,可以实现一个表单中多submit提交管理,而使用ajax提交就完全可以不涉及到表单,提交需要的值即可,感叹号表达式的格式为:action名字!具体的action方法.action。如图3中,若要提交给users Action类中的Add方法则users!Add.action,若是需要参数即users!Add.action?users.userName=’admin’即可。说到这里大家会好奇为什么这样子就可以搞定,其实这归功于struts2中的拦截器,它是通过拦截URL,获取里面的数据然后通过配置文件映射到具体的action方法,这样就实现了刚刚看似神奇的操作。

de6ca827ab0d3ce53db02cd15bb4771d.png

图3 struts2路由分发及相关说明

熟悉ORM工具的就可以很容易的使用hibernate,hibernate其有着强大的数据库操作功能,其主要使用HQL语句,这个语句和Linq的语句差不多,可以把HQL语句的格式理解为“从哪里,要什么,怎么给“这样的模式,就可以很好的掌握HQl语句,这和Linq语句一样,不过它更聪明,还提供了一个直接执行SQl语句的方法,并且它仍然可以像.net 中SqlParameter[]一样实现参数化,这样可以防止SQL注入。当然它还提供了常用的join、order by、group by、聚集函数等功能。在项目中我们可以使用Spring的配置文件进行hibernate的初始化,同时使用hibernate标志性文件hibernate.cfg.xml文件实现多表的路由分发,到具体的xxx.hbm.xml文件,这个文件里面主要是把实体类和具体的数据库表对应即可。如图4是hibernate的相关配置说明。

ba76f9b60d6c1d8889e6b21495e0e9c2.png

图4 hibernate配置相关

通过上述过程,我的第一个SSH2项目终于实现了,这里struts和hibernate的配置文件很多主要是考虑到项目以后的拓展,以及项目的结果清晰明了,因此使用路由分发的方式实现。而spring的配置文件也不差于这哥俩,对于spring的这种分层可以很好的管理项目,其实这样做的目的就是让整个项目管理起来更明了,不过分层的多必然会影响到性能,因此要针对具体的项目可言,这样才能获得最大的效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值