最近一段时间忙于学习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所示:

图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一个对象实例,然后把这个实例注入到代码中某一属性,通过注入,这个属性就是一个有着实例的对象,就可以进行相关操作。

图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方法,这样就实现了刚刚看似神奇的操作。

图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的相关配置说明。

图4 hibernate配置相关

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

和java_那些和Java的点滴相关推荐

  1. 手写java_手写JAVA虚拟机(二)——实现java命令行

    咱们都知道,咱们编译.java并运转.class文件时,需求一些java指令,如最简略的helloworld程序.java初学者可以看一下下面的教程. 这儿的程序最好不要加包名,因为加了包名的话编译和 ...

  2. 【Java_基础】Java中Native关键字的作用

    本篇博文转载与:Java中Native关键字的作用 转载于:https://www.cnblogs.com/leiblog/p/10529056.html

  3. 第一个java_第一个java程序

    要想在自己电脑上运行一个Java程序,首先要安装Java的jdk,网上有很多的安装教程,这篇文章写的比较详细,可以参考.https://blog.csdn.net/qq_35246620/articl ...

  4. 日期如何比较 java_如何比较Java中的日期?

    Basil Bourqu.. 30 TL;博士 LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ...

  5. Java_异常_03_ java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory

    异常信息: java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory 原因: 我用的是commons ...

  6. try catch语句 java_深入剖析java的try…catch…finally语句

    一.前言 前些天参加面试的时候有一道题: public classtest { public static voidmain(String[] args){try{return; }finally{ ...

  7. 上海两年java_两年Java工程师应该掌握的知识点

    学习两年的Java技术,设涉及到工作方面的零零散散累积起来还真多,但不知道这些是否太浅显,这里上海Java培训班小编来盘点一下关于spring的知识,看你都掌握了没? 说到spring,我们先从定义到 ...

  8. 装了java_下载安装Java

    初学Java,似乎安装有那么一点不同(也就多了添加环境变量哈哈哈),我也小小记录一下. 自我介绍:win10 x64 1. 下载Java 用于现在大多数使用者用的是java 8,小白的我先安装java ...

  9. redis 永不过期 java_死磕 Java

    原文出处:Java 技术驿站 『chenssy』 前面两篇博客已经详细介绍了主从复制的原理,相信各位对 Redis 的主从复制有了一个比较深入的了解,这篇博客主要介绍主从复制的应用以及它的一些问题. ...

  10. java编程点滴(3)--ubuntu下jdk的配置

    1.下载jdk安装包,并且解压到一个目录. 2.配置环境变量 ,在/etc/profile中添加 #jdk7 begin export JAVA_HOME=/software/jdk7 export ...

最新文章

  1. Python中的函数参数类型
  2. Vue2 利用 v-model 实现组件props双向绑定的优美解决方案
  3. 热电偶校验仪_热电偶校验方法_电厂系列之热控仪表装置校验讲解
  4. 大表ddl工具online-schema-change使用
  5. Flink – JobManager.submitJob
  6. Android 开发性能优化
  7. 单片机C语言LED点阵编程,基于单片机的8*8 LED点阵显示技术
  8. 三十岁那年,我的梦想是年薪十万
  9. PHP制作简单图床,利用微博当图床-php语言实现
  10. Observability:Wavefront
  11. 钢筋直螺纹套筒A钢筋直螺纹套筒A钢筋直螺纹连接丝扣加工要求
  12. c语言中1120是什么错误,C++编译常见问题汇总(二)fatal error LNK1120 错误
  13. 1709 ltsb 内存占用_腾讯游戏学院专家分析:Unity在移动设备的GPU内存机制
  14. 彻底解决ie11浏览网页双击放大的问题,安全无污染!
  15. 苦战samba乱码『看我出招系列』
  16. openwrt之quilt 补丁
  17. java基于springboot英语学习网站
  18. 智能售餐系统通过重量转换按份售卖概要设计及业务关键点
  19. 张同学的 SQL中对材料报价单的数据权限进行操作 (如列转行 行转列的处理) 学习一下....
  20. CAD中怎么局部升降桥架?CAD局部升降操作技巧

热门文章

  1. 使用 jdk 1.8 lambda forEach 对 ArrayList 遍历,数组越界,索引是负数 -15591
  2. python print(chr(65))_python 内置函数
  3. 如何用c++画图_看 FILA 与白山如何用经典黑白演奏不一样的C大调!
  4. C# DateTime的ToString()方法的使用
  5. Oracle中删除重复记录
  6. 看完这篇 你就能完全操作git 远程分支的增、删、改、查了
  7. 京东智能硬件平台Alpha 让零售“无界限”
  8. JS 屏蔽按键效果和改变按键效果
  9. Android 解决表情面板和软键盘切换时跳闪的问题
  10. JMX Java Management Extensions