关于javaef框架的信息
今天给各位分享javaef框架的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java有框架。。。c#也有吧????有哪些常见的框架啊??
- 2、.net web开发有WEBFORM,MVC,EF等来开发,各有什么优点和缺点?
- 3、c# winform框架的问题,之前学过java ssh,用eclipse可以自动生成,winform框架也是这样吗
- 4、在java中怎么让abcdef改成efedcba
- 5、java 怎么判断文本内容的编码格式
- 6、如何分析java.lang.outofmemoryerror
java有框架。。。c#也有吧????有哪些常见的框架啊??
java 和 C# 都是一门语言,只有关键字,语法,没有类库
语言的设计者一般会给使用者提供一些基础的类库,方便开发者使用,这个就叫着标准库
在实际的开发过程中,人们发现某些实际应用有一定标准可循,人们就把这些可以复用的东西收集起来,开发成一个框架,用来快速解决相应的问题。
.NET Framework就是C#的一个框架,其中它有包括了WinForm/WPF框架,ASP.NET/ASP.NET MVC框架,WCF框架等子框架
学微软的东西不要被它的开发工具迷惑了,由于Visual Studio做的太好了,太傻瓜了,导致很多人都不知道用C#写程序到底是怎么回事,无法区分一个控制台程序和一个WindowsForm程序的区别在哪里
.net web开发有WEBFORM,MVC,EF等来开发,各有什么优点和缺点?
net web主要的优点就是速度快,因为.net web使用的语言是C#,C#做的程序就是事件+控件,你比如使用EXTJS这个JS框架,C#只需要使用控件就可以搞定,MVC、EF这些如果使用EXTJS框架,只能自己手写代码,MVC、EF开发网站的周期较.net web长
C#里面使用ADO.NET连接数据库又不像MVC(JavaEE),不同的数据库操作引入不同的命名空间(Java里面叫导入包),这个比Java方便得多,因为Java使用数据库,必须找到对应版本数据库的jar包才可以,否则无法操作数据库,C#直接引入对应的命名空间,比如使用微软的MSSQL数据库,C#只需要导入System.Data, System.Data.SqlClient这两个命名空间即可调用对应的数据库操作类,但是Java不一样,比如SQL2000和SQL2005使用的jar包是不一样的,但是这C#使用这两个数据库直接导入System.Data, System.Data.SqlClient就可以了
C#使用AJAX也只需要使用一个控件,而MVC、EF肯定要手写
C#唯一的缺点是不能跨平台,也就是你开发的web网页,只能部署在Windows里面的IIS(Internet Informatica Server)服务器上
MVC、EF可以跨平台,也就是就算你使用Linux都可以将网页部署上去
c# winform框架的问题,之前学过java ssh,用eclipse可以自动生成,winform框架也是这样吗
微软的vs没有集成供winform自动生成ssh的工具,你需要自己写基础框架。java的ssh在.net中几乎全部由对应的框架实现,例如负责IOC的Spring.net,控制ORM的EntityFramework和Nhibernate,至于负责界面跳转和业务逻辑的struct你可以手写。
在java中怎么让abcdef改成efedcba
java:
public static void main(String[] args) {
String str = "ABCDEFGH";
String ss = "";
for (int i = str.length() / 2; i 0; i--) {
ss = ss + str.substring(i * 2 - 2, i * 2);
}
System.out.println(ss);
}
java 怎么判断文本内容的编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK。
按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。
对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:
File file = new File(path);
InputStream in= new java.io.FileInputStream(file);
byte[] b = new byte[3];
in.read(b);
in.close();
if (b[0] == -17 b[1] == -69 b[2] == -65)
System.out.println(file.getName() + ":编码为UTF-8");
else
System.out.println(file.getName() + ":可能是GBK,也可能是其他编码");
2:若想实现更复杂的文件编码检测,可以使用一个开源项目cpdetector,它所在的网址是:。它的类库很小,只有500K左右,cpDetector是基于统计学原理的,不保证完全正确,利用该类库判定文本文件的代码如下:
读外部文件(先利用cpdetector检测文件的编码格式,然后用检测到的编码方式去读文件):
/**
* 利用第三方开源包cpdetector获取文件编码格式
*
* @param path
* 要判断文件编码格式的源文件的路径
* @author huanglei
* @version 2012-7-12 14:05
*/
public static String getFileEncode(String path) {
/*
* detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、
* JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的
* 字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar
* cpDetector是基于统计学原理的,不保证完全正确。
*/
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
/*
* ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
* 指示是否显示探测过程的详细信息,为false不显示。
*/
detector.add(new ParsingDetector(false));
/*
* JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码
* 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
* 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
detector.add(JChardetFacade.getInstance());// 用到antlr.jar、chardet.jar
// ASCIIDetector用于ASCII编码测定
detector.add(ASCIIDetector.getInstance());
// UnicodeDetector用于Unicode家族编码的测定
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charset charset = null;
File f = new File(path);
try {
charset = detector.detectCodepage(f.toURI().toURL());
} catch (Exception ex) {
ex.printStackTrace();
}
if (charset != null)
return charset.name();
else
return null;
}
String charsetName = getFileEncode(configFilePath);
System.out.println(charsetName);
inputStream = new FileInputStream(configFile);
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, charsetName));
读jar包内部资源文件(先利用cpdetector检测jar内部的资源文件的编码格式,然后以检测到的编码方式去读文件):
/**
* 利用第三方开源包cpdetector获取URL对应的文件编码
*
* @param path
* 要判断文件编码格式的源文件的URL
* @author huanglei
* @version 2012-7-12 14:05
*/
public static String getFileEncode(URL url) {
/*
* detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、
* JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的
* 字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar
* cpDetector是基于统计学原理的,不保证完全正确。
*/
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
/*
* ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
* 指示是否显示探测过程的详细信息,为false不显示。
*/
detector.add(new ParsingDetector(false));
/*
* JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码
* 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
* 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
detector.add(JChardetFacade.getInstance());// 用到antlr.jar、chardet.jar
// ASCIIDetector用于ASCII编码测定
detector.add(ASCIIDetector.getInstance());
// UnicodeDetector用于Unicode家族编码的测定
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charset charset = null;
try {
charset = detector.detectCodepage(url);
} catch (Exception ex) {
ex.printStackTrace();
}
if (charset != null)
return charset.name();
else
return null;
}
URL url = CreateStationTreeModel.class.getResource("/resource/" + "配置文件");
URLConnection urlConnection = url.openConnection();
inputStream=urlConnection.getInputStream();
String charsetName = getFileEncode(url);
System.out.println(charsetName);
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, charsetName));
3:探测任意输入的文本流的编码,方法是调用其重载形式:
charset=detector.detectCodepage(待测的文本输入流,测量该流所需的读入字节数);
上面的字节数由程序员指定,字节数越多,判定越准确,当然时间也花得越长。要注意,字节数的指定不能超过文本流的最大长度。
4:判定文件编码的具体应用举例:
属性文件(.properties)是Java程序中的常用文本存储方式,象STRUTS框架就是利用属性文件存储程序中的字符串资源。它的内容如下所示:
#注释语句
属性名=属性值
读入属性文件的一般方法是:
FileInputStream ios=new FileInputStream(“属性文件名”);
Properties prop=new Properties();
prop.load(ios);
String value=prop.getProperty(“属性名”);
ios.close();
利用java.io.Properties的load方法读入属性文件虽然方便,但如果属性文件中有中文,在读入之后就会发现出现乱码现象。发生这个原因是load方法使用字节流读入文本,在读入后需要将字节流编码成为字符串,而它使用的编码是“iso-8859-1”,这个字符集是ASCII码字符集,不支持中文编码,
方法一:使用显式的转码:
String value=prop.getProperty(“属性名”);
String encValue=new String(value.getBytes(“iso-8859-1″),”属性文件的实际编码”);
方法二:象这种属性文件是项目内部的,我们可以控制属性文件的编码格式,比如约定采用Windows内定的GBK,就直接利用”gbk”来转码, 如果约定采用UTF-8,就使用”UTF-8″直接转码。
方法三:如果想灵活一些,做到自动探测编码,就可利用上面介绍的方法测定属性文件的编码,从而方便开发人员的工作
补充:可以用下面代码获得Java支持编码集合:
Charset.availableCharsets().keySet();
可以用下面的代码获得系统默认编码:
Charset.defaultCharset();
如何分析java.lang.outofmemoryerror
Java.lang.OutOfMemoryError是java.lang.VirtualMachineError的子类。在堆耗尽内存的时候,jvm会抛出Java.lang.OutOfMemoryError。这个错误大多数出现在当你去创建一个对象,但是在堆中却不能为这个对象分配足够多空间的时候。而且在java
api文档中,并没有对这个错误做大量的解释。
OutOfMemoryError的类型
在java中有两种主要的OutOfMemoryError类型:
(1) Java.lang.OutOfMemoryError: Java heap space
(2) Java.lang.OutOfMemoryError: PermGen space
尽管它们都发生在内存耗尽的情况下,但它们之间是相当不同的,它们的解决办法也是各不一样。
两种OutOfMemoryError之间的区别
如果你熟悉堆的历代版本和垃圾收集器的工作原理,并且知道到新的,老的和永久的堆空间,那么你将会非常容易解决OutOfMemoryError错误。永久的堆空间用于存储jvm相关类,方法和其他实体的字符串池和各种元数据。因为大多数jvm默认的Perm
Space(永久的堆空间)的大小是64M左右,所以如果你的工程里有太多的类或者数量巨大的字符串的话,那么很容易就会耗尽内存。需要指出的一点是它并不依赖”
Xmx”(译者注:
-Xms 指JVM初始分配的堆内存,-Xmx 指 JVM最大允许分配的堆内存)的值,所以不管你的堆空间多么大,一样会耗尽Perm
Space。好的办法是你可以根据工程的需要通过JVM的选项指定永久堆空间的大小,即"-XX:PermSize" and
"-XX:MaxPermSize"。
一个很小的事情是要记得在指定堆的Perm Space(永久的堆空间)的大小的时候需要用”=”来分离参数名称和值,但在指定堆得最大值的时候是不需要“=”的,正如下面的例子一样:
Export JVM_ARGS="-Xmx1024m -XX:MaxPermSize=256m"
"java.lang.OutOfMemoryError:
PermGen"的另一个原因是类加载器造成的内存泄漏,它经常出现在web服务器和应用服务器中,例如tomcat, webshere,
glassfish or
weblogic。在应用服务器中,不同的类加载器用于加载不同的web应用,以便在相同的服务器上部署和取消部署一个应用而且不会影响其他的应用程序。但是当取消部署的时候,如果容器持有类加载器已经加载的类的引用,那么这个类和相关的类就不会被垃圾回收器回收。如果你部署和取消部署你的应用很多次,那么很快PermGen
space就会被填满。"java.lang.OutOfMemoryError:
PermGen”在我们的上一个项目中的tomcat里已经被发现多次,但是这个问题的解决办法实在是令人捉摸不透。因为你首先知道哪个类引起了内存泄露,然后你才能修正它。这个问题的另一个原因是应用启动了一些线程,但是当取消部署的时候,这些线程并没有退出。
这只是一些臭名昭著的类加载器造成内存泄露的例子,任何人在编写加载类和取消加载类的代码的时候都要非常小心以避免这些问题。你也可以使用visualgc
监测PermGen space,这个工具会展示PermGen space的使用情况图表,你可以看到PermGen
space是怎样并且何时增长的。我建议在得出任何结论之前先使用这个工具。
关于"java.lang.OutOfMemoryError:
PermGen"的原因,我们发现另一个更加无知但有趣的是对于 JVM 的参数
"-Xnoclassgc"的介绍。这个选项用于避免加载和取消加载一些已经没有被引用的类,这样可以避免因为频繁的加载和取消加载而影响性能。但是在J2EE环境中使用这个选项是很危险的,因为许多框架,例如struts,spring等使用反射机制去创建类,并且会频繁的部署和取消部署,如果上一个引用没有被清除,那么很快PermGen
space就会被耗尽。这个例子也说明一些时候错误的JVM参数或配置也会引起OutOfMemoryError错误。
所以结论是不要在J2EE环境中使用"-Xnoclassgc",尤其是在应用服务器上。
Tomcat解决Java.lang.OutOfMemoryError: PermGen space错误的办法
对于tomcat6.0及其以上版本,提供了内存泄漏侦测的能力。它可以通过web应用视图展示一些侦测到的平常的内存泄漏问题,例如web应用中的ThreadLocal内存泄漏,JDBC驱动注册,RMI
,LogFactory和线程等。你可以在htp://wiki.apache.org/tomcat/MemoryLeakProtection
查看具体的细节,也可以通过tomcat提供的管理程序侦测内存泄漏。你如果想在web应用程序上检验内存泄漏问题,使用tomcat是个不错的主意。
如何解决java.lang.OutOfMemoryError: Java heap space
1)
解决OutOfMemoryError的简单方法是通过指定JVM参数"-Xmx512M"来指定最大的堆空间,这种方法效果立竿见影。当我使用eclipse,maven,ant编译工程遇到OutOfMemoryError的时候,我更喜欢使用这种办法。这里有一个增加JVM堆空间的例子,建议为你的程序增加堆空间的时候最好保持-Xmx
相比-Xms 是1:1或者1:1.5的比例。
例: export JVM_ARGS="-Xms1024m -Xmx1024m"
2)
第二种解决办法是很困难的,当你拥有的内存并不多或者在你增加了堆内存但是你依然会遇到OutOfMemoryError错误时,这种情况下你可能想要去分析你的应用程序并且寻找内存泄漏的原因。你可以使用Eclipse
Memory Analyzer来检查heap dump,或者可以使用Netbeans,
Jprobe等这些分析工具。这种方法比较困难,需要花费大量时间去分析找出内存泄漏的原因。
如何解决java.lang.OutOfMemoryError: PermGen space
正如前面讲到的一样,java.lang.OutOfMemoryError: PermGen
space发生在永久堆内存耗尽的情况下。要修正这个情况,需要通过JVM选项 "-XX:MaxPermSize"来增加Perm
space的最大大小,也可以通过"-XX:PermSize"指定Perm space的初始大小。同时设置这两个值,可以避免在Perm
Space重置大小的时候发生完全的垃圾回收。下面是设置初始化和最大值的例子:
export JVM_ARGS="-XX:PermSize=64M -XX:MaxPermSize=256m"
有时候java.lang.OutOfMemoryError是莫名其妙的,这种情况下分析是最终的解决办法。尽管你有增加堆内存的空间的自由,但还是建议遵循内存管理实践,在编码的时候将没用的引用设置为null。以上我对OutOfMemoryError的全部理解,我也在其他的一些帖子中努力写出java关于查找内存泄漏的文章和使用分析器的方法。希望你也能分享解决OutOfMemoryError的观点。
注意:
对于tomcat6.0及其以上版本,提供了内存泄漏侦测的能力。它可以通过web应用视图展示一些侦测到的平常的内存泄漏问题,例如web应用中的ThreadLocal内存泄漏,JDBC驱动注册,RMI
,LogFactory和线程等。你可以在htp://wiki.apache.org/tomcat/MemoryLeakProtection
查看具体的细节,也可以通过tomcat提供的管理程序侦测内存泄漏。你如果想在web应用程序上检验内存泄漏问题并且找到PermGen
space造成的OutOfMemoryError的原因,使用tomcat是个不错的主意。
调查修正OutOfMemoryError的工具
Java.lang.OutOfMemoryError是一种你需要做大量的调查才能找到根本原因的错误。没有对内存工具的足够了解,你不可能做某些事情,例如查找哪个对象在占用内存,占用了多少内存,以及找到可怕的内存泄漏等等。这里我列出一些免费的工具可以帮助你分析堆的使用情况,以及造成OutOfMemoryError的罪魁祸首。
1)Visualgc
Visualgc代表Visual
Garbage Collection Monitoring Tool 。你可以将它用于你的hostspot
JVM。Visualgc最大的优势是能生动展现出各种关键数据,包括类加载器,垃圾回收和JVM编译器性能数据。
JVM被识别是通过虚拟机的标识符,称为: vmid。你可以在这了解更多关于visualgc和vmid的东西。
2)Jmap
Jmap是来自JDK6的命令行工具,它允许你将堆的内存转储信息保存到文件中。而且很方便使用,如:jmap -dump:format=b,file=heapdump 6054
这里指定的内存转储的文件名称是heapdump,6054是java进程的PID。你可以通过"ps -ef”或者windows任务管理器或者“jps”工具(Java Virtual Machine Process Status Tool)查找PID.
3) Jhat
Jhat之前被称为hat (heap analyzer tool),现在它是JDK6的一部分,你可
以使用Jhat去分析"jmap"生成的文件。Jhat也是一个命令行工具,你可以在windows命令行这样使用它,如: jhat -J-Xmx256m heapdump
这里它会分析“heapdump”文件中的内存问题。当你启动Jhat后,它就会读取内存转储文件,并且在http端口监听。只需要通过浏览器进入端口,你就可以开始分析内存转储文件中的对象。Jhat默认监听7000端口。
4)Eclipse memory analyzer
Eclipse memory analyzer
(MAT)是来自eclipse基金会的一个分析java堆内存的工具。它能帮助你找到类加载器的泄漏,内存泄漏和减少内存消耗。你可以使用MAT分析内存转储中数以百万计的对象,也可以帮助你提取怀疑的内存泄漏。
关于javaef框架和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-10,除非注明,否则均为
原创文章,转载请注明出处。