1.JSP的基础知识
__
_____ | directive (指令)
| |-- scripting (脚本)
JSP -------| |__ action (动作)
|
|_____Template data :除JSP语法外,JSP引擎不能解读的东西
1)在JSP中使用的directive(指令)主要有三个:
a) page指令
b) include指令
c) taglib指令在JSP的任何地方,以任何顺序,一个页面可以包含任意数量的page指令 2)Scripting(脚本)包括三种类型
a) <%!declaraction %>
b) <% scriptlet %>
c) <%= expression %>3)action(动作)
标准的动作类型有:
a) <jsp:useBean>
b) <jsp:setProperty>
d) <jsp:getProperty>
e) <jsp:param>
f) <jsp:include>
g) <jsp:forward>
h) <jsp:plugin>1. 注释: <% -----jsp comment-------%>
<! -----html comment-------%>2. <%@ page session = “true” import =”java.util.*” %>
session可以不赋值,默认为true,如果session=”false”,则在JSP页面中,隐含的变量session就不能使用。3. 请求控制器结构(Request Controller)
也被称之为JSP Model 2 Architecture
这种途径涉及到使用一个Servlet或一个JSP作为一个应用程序或一组页面的入口点。为创建可维护的JSP系统,Request Controller是最有用的方式之一。不是JSP,而是Java类才是放置控制逻辑的正确的地方。请求控制器的命名模式为: xxxController.jsp
请求控制器类的命名模式为: xxxRequestController2.JSP中的JavaBean
JSP三种bean的类型
1) 页面bean
2) 会话bean
3) 应用bean大多数的系统会使用一个会话bean来保持状态,而对每一个页面使用一个页面bean 来对复杂的数据进行表示。页面bean是一个模型,而JSP是一个视图。3.Custom tagbean是信息的携带者,
而tag更适用于处理信息。标记库包含一个标记库描述符(TLD)和用于实现Custom tag的Java类
在翻译阶段,JSP容器将使用TLD来验证页面中的所有的tag是否都被正确的使用。
标记处理程序只是一个简单的适配器,而真正的逻辑是在另一个类中实现的,标记处理程序只是提供了一个供其他的可复用的类的JSP接口
Servlet
1.ServletConfig
l 一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。ServletConfig包涵 ServletContext 和 一些 Name/Value pair (来自于deployment descriptor)l ServletContext接口封装了Web应用程序的上下文概念。2.会话跟踪
1) Session
l 当一个Client请求多个Servlets时,一个session可以被多个servlet共享。l 通常情况下,如果server detect到browser支持cookie,那么URL就不会重写。
2) cookie
l 在Java Servlet中,如果你光 Cookie cookie = new Cookie(name,value)
那么当用户退出Browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。如果要存储 cookie,需加一句 cookie.setMaxAge(200)l cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.3) URL Rewriting
在使用URL Rewriting来维护Session ID的时候,每一次HTTP请求都需要EncodeURL()
典型的用在两个地方
1) out.print(“form action=\” ”);
out.print(response.encodeURL(“sessionExample”));
out.print(“form action=\” ”);
out.print(“method = GET>”);
2) out.print(“<p><a href=\” ”);
out.print(response.encodeURL(“SessionExample?database=foo&datavalue=bar”));
out.println(“\” >URL encoded </a>”);3.SingleThreadModel
默认的,每一个servlet definition in a container只有一个servlet class的实例。
只有实现了SingleThreadModel,container才会让servlet有多个实例。Servlet specification上建议,不要使用synchronized,而使用SingleThreadModel。SingleThreadModel(没有方法)
保证servlet在同一时刻只处理一个客户的请求。
SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
这等同于在servlet的service()方法种使用synchronized.Single Thread Model一般使用在需要响应一个heavy request的时候,比如是一个需要和数据库打交道的连接。
2. 在重载Servlet地init( )方法后,一定要记得调用super.init( );3. the client通过发送一个blank line表示它已经结束request
而the server通过关闭the socket来表示response已结束了。4. 一个Http Servlet可以送三种东西给Client
1) a single status code
2) any number of http headers
3) a response body5. Servlet之间信息共享的一个最简单的方法就是
System.getProperties().put(“key”,”value”);6. Post和Get
Post:将form内各字段名称和内容放置在html header内传送给server
Get: ?之后的查询字符串要使用URLEncode,经过URLEncode后,这个字符串不再带有空格,以后将在server上恢复所带有的空格。
Get是Web上最经常使用的一种请求方法,每个超链接都使用这种方法。7. Web.xml就是Web Applicatin 的deployment descriptor
作用有:组织各类元素
设置init param
设置安全性
8. Request Dispatcher用来把接收到的request forward processing到另一个servlet
要在一个response里包含另一个servlet的output时,也要用到Request Dispatcher.9. Servlet和Jsp在同一个JVM中,可以通过ServeltContext的
setAttribute( )
getAttribute( )
removeAttribute( )
来共享对象
10. 利用request.getParameter( )得到的String存在字符集问题。
可以用 strTitle = request.getParameter(“title”);
strTitle = new String(strTitle.getBytes(“8859-1”),”gb2312”);如果你希望得到更大得兼容性
String encoding = response.getCharacterEncoding();
//确定Application server用什么编码来读取输入的。
strTitle = new String(strTitle.getBytes(encoding),”gb2312”);
__
_____ | directive (指令)
| |-- scripting (脚本)
JSP -------| |__ action (动作)
|
|_____Template data :除JSP语法外,JSP引擎不能解读的东西
1)在JSP中使用的directive(指令)主要有三个:
a) page指令
b) include指令
c) taglib指令在JSP的任何地方,以任何顺序,一个页面可以包含任意数量的page指令 2)Scripting(脚本)包括三种类型
a) <%!declaraction %>
b) <% scriptlet %>
c) <%= expression %>3)action(动作)
标准的动作类型有:
a) <jsp:useBean>
b) <jsp:setProperty>
d) <jsp:getProperty>
e) <jsp:param>
f) <jsp:include>
g) <jsp:forward>
h) <jsp:plugin>1. 注释: <% -----jsp comment-------%>
<! -----html comment-------%>2. <%@ page session = “true” import =”java.util.*” %>
session可以不赋值,默认为true,如果session=”false”,则在JSP页面中,隐含的变量session就不能使用。3. 请求控制器结构(Request Controller)
也被称之为JSP Model 2 Architecture
这种途径涉及到使用一个Servlet或一个JSP作为一个应用程序或一组页面的入口点。为创建可维护的JSP系统,Request Controller是最有用的方式之一。不是JSP,而是Java类才是放置控制逻辑的正确的地方。请求控制器的命名模式为: xxxController.jsp
请求控制器类的命名模式为: xxxRequestController2.JSP中的JavaBean
JSP三种bean的类型
1) 页面bean
2) 会话bean
3) 应用bean大多数的系统会使用一个会话bean来保持状态,而对每一个页面使用一个页面bean 来对复杂的数据进行表示。页面bean是一个模型,而JSP是一个视图。3.Custom tagbean是信息的携带者,
而tag更适用于处理信息。标记库包含一个标记库描述符(TLD)和用于实现Custom tag的Java类
在翻译阶段,JSP容器将使用TLD来验证页面中的所有的tag是否都被正确的使用。
标记处理程序只是一个简单的适配器,而真正的逻辑是在另一个类中实现的,标记处理程序只是提供了一个供其他的可复用的类的JSP接口
Servlet
1.ServletConfig
l 一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。ServletConfig包涵 ServletContext 和 一些 Name/Value pair (来自于deployment descriptor)l ServletContext接口封装了Web应用程序的上下文概念。2.会话跟踪
1) Session
l 当一个Client请求多个Servlets时,一个session可以被多个servlet共享。l 通常情况下,如果server detect到browser支持cookie,那么URL就不会重写。
2) cookie
l 在Java Servlet中,如果你光 Cookie cookie = new Cookie(name,value)
那么当用户退出Browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。如果要存储 cookie,需加一句 cookie.setMaxAge(200)l cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.3) URL Rewriting
在使用URL Rewriting来维护Session ID的时候,每一次HTTP请求都需要EncodeURL()
典型的用在两个地方
1) out.print(“form action=\” ”);
out.print(response.encodeURL(“sessionExample”));
out.print(“form action=\” ”);
out.print(“method = GET>”);
2) out.print(“<p><a href=\” ”);
out.print(response.encodeURL(“SessionExample?database=foo&datavalue=bar”));
out.println(“\” >URL encoded </a>”);3.SingleThreadModel
默认的,每一个servlet definition in a container只有一个servlet class的实例。
只有实现了SingleThreadModel,container才会让servlet有多个实例。Servlet specification上建议,不要使用synchronized,而使用SingleThreadModel。SingleThreadModel(没有方法)
保证servlet在同一时刻只处理一个客户的请求。
SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
这等同于在servlet的service()方法种使用synchronized.Single Thread Model一般使用在需要响应一个heavy request的时候,比如是一个需要和数据库打交道的连接。
2. 在重载Servlet地init( )方法后,一定要记得调用super.init( );3. the client通过发送一个blank line表示它已经结束request
而the server通过关闭the socket来表示response已结束了。4. 一个Http Servlet可以送三种东西给Client
1) a single status code
2) any number of http headers
3) a response body5. Servlet之间信息共享的一个最简单的方法就是
System.getProperties().put(“key”,”value”);6. Post和Get
Post:将form内各字段名称和内容放置在html header内传送给server
Get: ?之后的查询字符串要使用URLEncode,经过URLEncode后,这个字符串不再带有空格,以后将在server上恢复所带有的空格。
Get是Web上最经常使用的一种请求方法,每个超链接都使用这种方法。7. Web.xml就是Web Applicatin 的deployment descriptor
作用有:组织各类元素
设置init param
设置安全性
8. Request Dispatcher用来把接收到的request forward processing到另一个servlet
要在一个response里包含另一个servlet的output时,也要用到Request Dispatcher.9. Servlet和Jsp在同一个JVM中,可以通过ServeltContext的
setAttribute( )
getAttribute( )
removeAttribute( )
来共享对象
10. 利用request.getParameter( )得到的String存在字符集问题。
可以用 strTitle = request.getParameter(“title”);
strTitle = new String(strTitle.getBytes(“8859-1”),”gb2312”);如果你希望得到更大得兼容性
String encoding = response.getCharacterEncoding();
//确定Application server用什么编码来读取输入的。
strTitle = new String(strTitle.getBytes(encoding),”gb2312”);
解决方案 »
- weblogic 10.3 错误,求解?高分!!!
- 怎么把hibernate merge的实体存到数据库中
- maven jetty配置问题
- flex是否更像c#
- 【用action过滤相同用户名】下面的代码为什么不行?
- 想在外面找个java程序员的工作,要掌握哪几种技能啊?
- 请教运行Axis的例子attachments时遇到的问题
- Runtime类使用时遇到一个问题,希望大家出手帮忙,先谢了!
- 使用apache soap 时,客户端掉用时出现下面的错误,请问是什么原因
- 关于jboss对数据库操作的疑问
- 散分!讨论《sun官方提出EJB是J2EE之败笔》
- java servlet的字节码文件究竟要放在Tomcat的哪里才能检测得到?
1. EJB组件实现代码的限制
EJB组件的约束
EJB的开发者并不需要在EJB的组件实现代码中编写系统级的服务,EJB提供商/开发
者需知道并且严格地遵守一些限制,这些限制与开发稳定的和可移植的EJB组件的利益有
关。
以下是你应该回避使用的一些Java特色,并且在你的EJB组件的实现代码中要严格限
制它们的使用:
1.使用static,非final 字段。建议你在EJB组件中把所有的static字段都声明为final型的。这样可以保证前后一致的运行期语义,使得EJB容器有可以在多个Java虚拟机之间分发组件实例的灵活性。
2.使用线程同步原语来同步多个组件实例的运行。避免这个问题,你就可以使EJB容器灵活的在多个Java虚拟机之间分发组件实例。
3.使用AWT函数完成键盘的输入和显示输出。约束它的原因是服务器方的商业组件意味着提供商业功能而不包括用户界面和键盘的I/O功能。
4.使用文件访问/java.io 操作。EJB商业组件意味着使用资源管理器如JDBC来存储和检索数据而不是使用文件系统API。同时,部署工具提供了在部署描述器(descriptor)中存储环境实体,以至于EJB组件可以通过环境命名上下文用一种标准的方法进行环境实体查询。所以,使用文件系统的需求基本上是被排除了。
5.监听和接收socket连接,或者用socket进行多路发送。EJB组件并不意味着提供网络socket服务器功能,但是,这个体系结构使得EJB组件可以作为socket客户或是RMI客户并且可以和容器所管理的环境外面的代码进行通讯。
6.使用映象API查询EJB组件由于安全规则所不能访问的类。这个约束加强了Java平台的安全性。
7.欲创建或获得一个类的加载器,设置或创建一个新的安全管理器,停止Java虚拟机,改变输入、输出和出错流。这个约束加强了安全性同时保留了EJB容器管理运行环境的能力。
8.设置socket工厂被URL's ServerSocket,Socket和Stream handler使用。避免这个特点,可以加强安全性同时保留了EJB容器管理运行环境的能力。
9.使用任何方法启动、停止和管理线程。这个约束消除了与EJB容器管理死锁、线程
和并发问题的责任相冲突的可能性。
通过限制使用10-16几个特点,你的目标是堵上一个潜在的安全漏洞:
10.直接读写文件描述符。
11.为一段特定的代码获得安全策略信息。
12.加载原始的类库。
13.访问Java一般角色所不能访问的包和类。
14.在包中定义一个类。
15.访问或修改安全配置对象(策略、安全、提供者、签名者和实体)。
16.使用Java序列化特点中的细分类和对象替代。
17.传递this引用指针作为一个参数或者作为返回值返回this引用指针。你必须使用
SessionContext或EntityContext中的getEJBObject()的结果。
Java2平台的安全策略
以上所列的特点事实上正是Java编程语言和Java2标准版中的标准的、强有力的特色。EJB容器允许从J2SE中使用一些或全部的受限制的特色,尽管对于EJB组件是不可用的,但需通过J2SE的安全机制来使用而不是通过直接使用J2SE的API。
Java2平台为EJB1.1规范中的EJB容器所制定的安全策略定义了安全许可集,这些许可在EJB组件的编程限制中出现。通过这个策略,定义了一些许可诸如:java.io.FilePermission,java.net.NetPermission,java.io.reflect.ReflectPermission,java.lang.security.SecurityPermission,以便加强先前所列出的编程限制。
许多EJB容器没有加强这些限制,他们希望EJB组件开发者能遵守这些编程限制或者是带有冒险想法违背了这些限制。违背这些限制的EJB组件,比标准方法依赖过多或过少的安全许可,都将很少能在多个EJB容器间移植。另外,代码中都将隐藏着一些不确定的、难以预测的问题。所有这些都足以使EJB组件开发者应该知道这些编程限制,同时也应该认真地遵守它们。
任何违背了这些编程限制的EJB组件的实现代码在编译时都不能检查出来,因为这些特点都是Java语言和J2SE中不可缺少的部分。
对于EJB组件的这些限制同样适用于EJB组件所使用的帮助/访问(helper/access)类,J2EE应用程序使用Java文档(jar)文件格式打包到一个带.ear(代表Enterprise Archive)扩展名的文件中,这个ear文件对于发送给文件部署器来说是标准的格式。ear文件中包括在一个或多个ejb-jar文件中的EJB组件,还可能有ejb-jar所依赖的库文件。所有ear文件中的代码都是经过深思熟虑开发的应用程序并且都遵守编程限制和访问许可集。
未来版本的规范可能会指定通过部署工具来定制安全许可的能力,通过这种方法指定了一个合法的组件应授予的许可权限,也指定了一个标准方法的需求:如从文件系统中读文件应有哪些要求。一些EJB容器/服务器目前在它们的部署工具中都提供了比标准权限或多或少的许可权限,这些并不是EJB1.1规范中所需要的。
理解这些约束
EJB容器是EJB组件生存和执行的运行期环境,EJB容器为EJB组件实例提供了一些服务如:事务管理、安全持久化、资源访问、客户端连接。EJB容器也负责EJB组件实例整个生命期的管理、扩展问题以及并发处理。所以,EJB组件就这样寄居在一个被管理的执行环境中--即EJB容器。
因为EJB容器完全负责EJB组件的生命期、并发处理、资源访问、安全等等,所以与容器本身的锁定和并发管理相冲突的可能性就需要消除,许多限制都需要使用来填上潜在的安全漏洞。除了与EJB容器责任与安全冲突的问题,EJB组件还意味着仅仅聚焦于商务逻辑,它依赖于EJB容器所提供的服务而不是自己来直接解决底层的系统层的问题。
可能的问题
通常,EJB组件在容器之间的移植不可避免地与如下问题相关:
1.它需要依靠的受限制的特点在特定EJB容器中没有得到加强。
2.它需要依靠的非标准的服务从容器中可获得。
为了保证EJB组件的可移植性和一致的行为,你应该使用一个具有与Java2平台安全
策略集相一致的策略集的容器来测试EJB组件,并且其加强了前述的编程限制。
总结
EJB组件开发者应该知道这些推荐的关于EJB组件的编程限制,明白它们的重要性,并且从组件的稳定性和可移植性利益方面考虑来遵循它们。因为这些编程限制能阻止你使用标准的Java语言的特点,违背了这些编程限制在编译时不会知道,并且加强这些限制也不是EJB容器的责任。所有这些原因都使你应很小心地遵守这些编程限制,这些限制在组件的合同中已经成为了一个条款,并且它们对于建造可靠的、可移植的组件是非常重要的。
entity bean为在应用程序和设计中描述持久化商业对象(persistent business objec ts)提供了一个清晰的模型。在java对象模型中,简单对象通常都是以一种简单的方式进行处理但是,很多商业对象所需要的事务化的持久性管理没有得到实现。entity bean将持久化机制封装在容器提供的服务里,并且隐藏了所有的复杂性。entity bean允许应用程序操纵他们就像处理一个一般的java对象应用。除了从调用代码中隐藏持久化的形式和机制外,entity bean还允许EJB容器对对象的持久化进行优化,保证数据存储具有开放性,灵活性,以及可部署性。在一些基于EJB技术的项目中,广泛的使用OO技术导致了对entity bean的大量使用,SUN的工程师们已经积累了很多使用entity Bean的经验,这篇文章就详细阐述的这些卡发经验:
*探索各种优化方法
*提供性能优化和提高适用性的法则和建议
*讨论如何避免一些教训。法则1:只要可以,尽量使用CMP
CMP方式不仅减少了编码的工作量,而且在Container中以及container产生的数据库访问代码中包括了许多优化的可能。Container可以访问内存缓冲中的bean,这就允许它可以监视缓冲中的任何变化。这样的话就在事物没有提交之前,如果缓存的数据没有变化就不用写到数据库中。就可以避免许多不必要的数据库写操作。另外一个优化是在调用find方法的时候。通常情况下find方法需要进行以下数据库操作:
查找数据库中的纪录并且获得主键
将纪录数据装入缓存
CMP允许将这两步操作优化为一步就可以搞定。[具体怎么做我也没弄明白,原文没有具体阐述]法则2:写代码时尽量保证对BMP和CMP都支持
许多情况下,EJB的开发者可能无法控制他们写的bean怎么样被部署,以及使用的container是不是支持CMP.
一个有效的解决方案是,将商业逻辑的编码完全和持久化机制分离。再CMP类中实现商业逻辑,然后再编写一个BMP类,用该类继承CMP类。这样的话,所有的商业逻辑都在CMP类中,而持久化机制在BMP中实现。[我觉得这种情况在实际工作中很少遇到,但是作者解决问题的思路值得学习]法则3:把ejbStore中的数据库访问减小到最少。
如果使用BMP,设置一个缓存数据改变标志dirty非常有用。所有改变数据库中底层数据的操作,都要设置dirty,而在ejbStore()中,首先检测dirty的值,如果dirty的值没有改变,表明目前数据库中的数据与缓存的一致,就不必进行数据库操作了,反之,就要把缓存数据写入数据库。法则4:总是将从lookup和find中获得的引用进行缓存。(cache)
引用缓存对session bean和entity bean 都是适用的。
通过JNDI lookup获得EJB资源。比如DataSource,bean的引用等等都要付出相当大的代价。因此应该避免多余的lookup.可以这样做:
将这些引用定义为实例变量。
从setEntityContext(session Bean使用setSessionContext)方法查找他们。SetEntityContext方法对于一个bean实例只执行一次,所有的相关引用都在这一次中进行查找,这样查找的代价就不是那么昂贵了。应该避免在其他方法中查找引用。尤其是访问数据库的方法:ejbLoad()和ejbStore(),如果在这些频繁调用的方法中进行DataSource的查找,势必造成时间的浪费。
调用其他entity bean的finder方法也是一种重量级的调用。多次调用finder()方法的代价非常高。如果这种引用不适合放在setEntityContext这样的初始化时执行的方法中执行,就应该在适当的时候缓存finder的执行结果。只是要注意的是,如果这个引用只对当前的entity有效,你就需要在bean从缓冲池中取出来代表另外一个实体时清除掉这些引用。,这些操作应该在ejbActivate()中进行。法则5:总是使用prepare statements
这条优化法则适用于所有访问关系数据库的操作。
数据库在处理每一个SQL Statement的时候,执行前都要对Statement进行编译。一些数据库具有缓存statement和statement的编译后形式的功能。数据库可以把新的Statement和缓存中的进行匹配。然而,如果要使用这一优化特性,新的Statement要必须和缓存中的Statement完全匹配。
对于Non-prepared Statement,数据和Statement本身作为一个字符串传递,这样由于前后调用的数据不同而不能匹配,就导致无法使用这种优化。而对于prepared Statement,数据和Statement是分开传递给数据库的,这样Statement就可以和cache中已编译的Statement进行匹配。Statement就不必每次都进行编译操作。从而使用该优化属性。
这项技术在一些小型的数据库访问中能够减少Statement将近90%的执行时间。法则6:完全关闭所有的Statement
在编写BMP的数据库访问代码时,记住一定要在数据库访问调用之后关闭Statement,因为每个打开的Statement对应于数据库中的一个打开的游标。
Helloworld功略
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=84path和classpath
1.什么是java的path和classpath?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=904
2.如何一次把一个目录下的所有.jar加入到classpath?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=905
3.classspath 的默认值是什么?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=906
4.怎样找到程序运行需要的类?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=907
5. Linux下Path和ClassPath是怎么设的?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=908
6.如何修改path和classpath?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=909java的帮助和api文档
1.什么是java的api参考?
api是html格式的从sun的网站上可以找到一个包
包括api的参考和user guide,本站有做成.chm格式的便于查找。
api参考是用jdk的工具javadoc 生成的是开发者必备的文档。
2.哪里有JAVA基本类库的源代码?
jdk的安装目录下有源码src.zip
3.java web start 是干什么用的?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=911开发环境
1.jre下的lib和jdk下的lib到底有什么区别?
jre是JDK的一个子集。提供一个运行环境。JDK的lib目录是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件。例如,编译器等。JRE的lib目录是为JVM,运行时候用的。包括所有的标准类苦,和扩展类
2.我的jbuilder光标对不齐?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=913
3.JDK版本冲突怎么办?
要决定windows使用哪一个JDK(win2000),改注册表:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\CurrentVersion
的值,要决定JBuilder使用哪个JDK在project properties中可以设置。
4.editplus能够编译java嘛? 如何设置?
先要将JAVA的运行环境安装并且调试好。
首先,从菜单“工具(Tools)”->“配置用户工具...”进入用户工具设置。
在类别里展开“工具”树形菜单->“用户工具”,选择“组和工具项目”中的“Group 1”,点击面板右边的“组名称...”按钮,将文本“Group1”修改成“编译JAVA程序”。
然后选择修改的组“编译JAVA程序”,点击“添加新工具”按钮,选择程序,建立“新建程序”,选中它。
然后就是最重要的步骤(修改属性):
1.1 添加编译功能
“菜单文字”里的内容修改为“JAVAC”;
“命令”选择安装JDK后的BIN目录中的编译程序JAVAC.EXE,如果JDK 安装路径为“c:\jdk”,那么此路径为“c:\jdk\bin\javac.exe”;
“参数”选择“文件名称”,即显示为“$(FileName)”;
“初始目录”选择“文件目录”,显示为“$(FileDir)”;
选择“捕获输出”复选框。
1.2 添加执行功能
“菜单文字”里的内容修改为“JAVA”;
“命令”选择安装JDK后的BIN目录中的编译程序JAVA.EXE,路径为“c:\jdk\bin\java.exe”;
“参数”选择“文件名(不含扩展名)”,即显示为“$(FileNameNoExt)”;
“初始目录”选择“文件目录”,显示为“$(FileDir)”;
选择“捕获输出”复选框。
这样就完成了基本的配置工作基础概念
1.public,private,protect的访问机制http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=914
2.Java中如何定义一个常量?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=915
3.异常的throw和throws有什么区别
throw是在程序中抛出异常,而throws是在方法的声明中声明抛出异常
4.upcasting是什么意思
upcasting就是上溯.也就是说把一个子类当作它的父类看待,比如:对方法void do(Object obj){...},你可以把任何对象作为参数来调用.编译运行
1.怎么把多个.java源文件编译成一个.class?
java -d . a.java b.java
2. depreciated API 是什么意思?
java发展太快,所以你应该尽可能用最新的api,但是老的api还是兼容的,所以回waning 你deprecated api
3.怎么样编译一个目录下的所有java文件?
ant或者jbuilder,或者自己写脚本.
4.如何让执行程序时不会出现dos窗口?
javaw
5.如何运行jar文件?
java -jar ***.jar
6.如何去掉JAVA的内存限制
加 -Xmx参数来设置maximum Java heap size,如: java -Xms10M MyClass
7.什么是Java混淆编译器?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=916
8.如何将Java应用程序本地编译为EXE?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=917
9.jar命令?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=918数据类型与转换
1.int、char、double与byte如何相互转换?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=919
2.int与byte array之间的转换程序?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=920
3.string和int之间的转换?
a1=Integer.parseInt(s1);
s1=Integer.toString(a1);
4.java如何获得随机整数?
首先利用random()获得一个随机浮点数,然后乘以你希望得到的整数
的最大值,最后对得到的结果取整。
5.怎么把String类型转换成16进制的整数?
public static void main(String args[]){
String x = "0x300C8";
int y = Integer.decode(x).intvalue();
System.out.println(y);
}
6.int和java.lang.Integer有和区别?
int是数据类型,Integer是类Integer的功能更强,可以将整数转换为浮点数运算,在java这种强类型语言中是很有用的。可以利用Integer的构造函数Integer(int)来对一个整数建立对象。类似的类还有Float,Short,Long等等数据结构
1.如何实现二维向量?
Vector vector1=new Vector();
Vector vector2=new Vector();
...
..
HashTable numbers=new HashTable();
numbers.put("vector1",vector1);
numbers.put("vector2",vector2);
2. JAVA中怎么得到现在的系统时间?
比如,当前date,Date today=new Date(System.currentTimeMillis());
3.如何将java.util.Date转化为java.sql.Date?
转化:
java.sql.Date sd;
java.util.Date ud;
//initialize the ud such as ud = new java.util.Date();
sd = new java.sql.Date(ud.getTime());
如果要插入到数据库并且相应的字段为Date类型
那么可以用PreparedStatement.setDate(int ,java.sql.Date)方法
其中的java.sql.Date可以用上面的方法得到
也可以用数据库提供TO_DATE函数
比如 现有 ud
TO_DATE(new SimpleDateFormat().format(ud,"yyyy-MM-dd HH:mm:ss"),
"YYYY-MM-DD HH24:MI:SS")
注意java中表示格式和数据库提供的格式的不同系统相关
1.在JAVA中如何启动一个程序?
String strCommand;
String cmd = "cmd";
if (! System.getProperty("os.name").equals("Windows NT")) cmd = "command";
cmd = cmd + " /c " + strCommand;
try {
Runtime.getRuntime().exec(cmd);
}
catch (IOException ex) {
}
strCommand 为命令串,DOS 底下怎么用,这儿就可以怎么用
2.如何得到应用程序的路径
Properties System.getProperties()里面有
3.如何得到当前系统时间?
1.SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd");
String time=formatter.format(new Date());
2.Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
month=..类推
输入输出
1.是否可以用纯JAVA 编写程序来访问串口?
Sun提供了一个叫javax.comm的package,专门用来对serial port进行操作.
2.writeutf和write的区别
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=921
3.如何利用FileWriter在文本中换行?
\r\n网络相关
1.如何让我的程序通过proxy访问外部网络?
System.setProperty("java.proxyHost","your proxy here"); 本地相关
1.如何调用本地的dll?
jni
2.如何用java编写扫描仪程序?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=2741
这是本站网友 xiaoyao 提供的 Java 编码规范的一部分。本站有下载chm电子版。
。整个jsp/jsp bean表示层应当尽可能的瘦和简单化。。牢记大多数的JSP都应当是只读的视图,而由页面bean来提供模型。。应当一起设计JSP和JSP bean。在尽可能合理的情况下,把业务逻辑从JSP中移走。具体于HTTP的逻辑(如,对Cookie的处理)属于bean或支持类中,而不是JSP中。。尽量把条件逻辑放在控制器中而不是放在视图中。。为JSP、包含的文件、JSP Bean和实现扩展标记的类使用遵循标准的命名惯例。如:
jsp控制器 xxxxController.jsp
被包含的: jsp _descriptiveNameOfFragment.jsp
jsp页面模型bean: <pagename>Bean 如loginBena.java
jsp会话bena: xxxxSessionBean
标记类 : xxxxTag,xxxxTagExtraInfo。应当在JSP中避免使用页面引入指令。import指令会促使类的实列化而不是jsp bean的实例化:
不用:<%@ page import = "com.java.util.*" %>
而用:<% java.util.List l = new java.util.LinkedList(); %>。jsp不应该直接去访问请求参数。bean应当执行这样的处理过程并且输出所处理的模型数据。。jsp不应当访问属性文件,或者使用JNDI。bean可以访问属性。。如果jsp bean具有的所有的属性不能够从页面请求中被映射到,就要尽力在<jsp:useBean>标记中设置属性。。应当避免设计既显示表单又处理结果的页面。。在jsp中避免代码重复。把要重复的功能放在一个包含的jsp、bean或标记扩展中,使得它能够被重用。。jsp bean应当永远不要去产生HTML。在jsp中应该避免使用out.pringln()发放来产生页面内容。。jsp层不应该直接访问数据,这包括JDBC数据库访问和EJB访问。。在长度上,scriptlests的代码最好不要超过5行。。除了jsp bean之外,jsp不应当去实例化复杂的可读写的对象。如果这样的话,就有可能在jsp中去执行不适当的业务逻辑。。jsp bean中不应当包含大量的数据。。如果使用了<jsp:forward>和<jsp:include标记>,并且必须使用简单类型的值来与外部页面进行通讯的话,就应当使用一个或多个<jsp:param>元素。定制标记应当用在适当把逻辑从jsp中移走的地方。。应当谨慎地使用<jsp:forward>标记,在jsp中它是一个等价的goto。。应当使用隐藏的注释来阻止输出的HTML过大。。在jsp中避免进行异常处理。每个jsp文件中都应当使用一个错误页面来处理不能够从中恢复的异常。。在jsp错误页面中,使用HTML注释来显示传递到该页面中的异常跟踪信息。。只有在能够获得性能上的好处时,才使用jspInin()方法和jspDestroy()方法。获取和放弃资源是jsp beans和标记处理器的事,而不是由jsp来负责的。。如果没有充分的理由,就不要在jsp中定义方法和内部内。
http://www.djtz.net/get.asp?get=9662
随着互联网的发展和计算机应用的普及,电子邮件越来越成为一种重要的通信方式。目前,有多种开发工具可以编制邮件发送程序,其中以利用JavaMail API编程最为简单。本文通过一个完整的例子介绍如何通过JavaMail API编制邮件发送程序。
没有装载JavaMail API的读者,可以到www.javasoft.com站点下载JavaMail API 1.2或JavaMail API 1.3, 并按照Readme.txt设置好ClassPath。例子代码如下:
import java.util.* ;
import java.io.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
public class jsendMail {
//定义收件人、发送人、主题等
String to=“”,from=“”,host=“”,filename=“”,messagetext=“”,subject=“”;
boolean debug=false;
//保存发送的文件名
Vector vfile = new Vector(10,10);
//保存发送的正文
Vector vmsg = new Vector(10,10);
public jsendMail() {}
public jsendMail(String to,String from,String smtpServer,String subject)
{
//初始化收件人、发送人、主题
this.to=to;
this.from=from;
this.host=smtpServer;
this.subject=subject;
}
//收集附加文件
public void attachfile(String fname)
{
vfile.addElement(fname);
}
//收集邮件正文
public void setMessage(String msg)
{
vmsg.addElement(msg);
}
//设置调试标志
public void setDebug(boolean debug)
{
this.debug=debug;
}
//邮件发送函数
public boolean startSend()
{
Properties props = System.getProperties();
props.put(“mail.smtp.host”, host);
Session session=Session.getDefaultInstance
(props, null);
session.setDebug(debug);
try {
//创建一个消息,并初始化该消息的各项元素
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address={new Internet
Address(to)};
msg.setRecipients(Message.RecipientType.TO,address);
msg.setSubject(subject);
//把message part加入新创建的Multipart
Multipart mp = new MimeMultipart();
// 邮件内容的第一部分
Enumeration emsg=vmsg.elements();
while(emsg.hasMoreElements())
{
messagetext=emsg.nextElement().toString();
MimeBodyPart mbp1=new MimeBodyPart();
mbp1.setText(messagetext);
mp.addBodyPart(mbp1);
}
vmsg.removeAllElements();
// 邮件内容的第二部分
Enumeration efile=vfile.elements();
while(efile.hasMoreElements())
{
MimeBodyPart mbp2=new MimeBodyPart();
filename=efile .nextElement().toString();
FileDataSource fds=new FileDataSource(filename);
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(fds.getName());
mp.addBodyPart(mbp2);
}
vfile.removeAllElements();
// 把MultiPart加入邮件
msg.setContent(mp);
// 设置邮件头的发送日期
msg.setSentDate(new Date());
// 发送邮件
Transport.send(msg);
} catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ((ex=mex.getNextException())!=null)
{
ex.printStackTrace();
}
return false;
}
return true;
}//end public void startSend()
public static void main(String[] args)
{
jsendMail sendmail=new jsendMail(“[email protected]”,“[email protected]”,“smtp.21cn.com”,“test JavaMail API”);
sendmail.attachfile(“jsendMail.java");
sendmail.attachfile(“jsendMail.class");
sendmail.setMessage(“send a file");
sendmail.setMessage(“send a javafile");
sendmail.startSend();
}
}
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=84path和classpath
1.什么是java的path和classpath?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=904
2.如何一次把一个目录下的所有.jar加入到classpath?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=905
3.classspath 的默认值是什么?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=906
4.怎样找到程序运行需要的类?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=907
5. Linux下Path和ClassPath是怎么设的?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=908
6.如何修改path和classpath?
http://www.matrix.org.cn/forum_view.asp?forum_id=19&view_id=909
刻苦努力
好好学习!!!
另外我觉得j2ee中接口用的非常好,它定义了很多标准,而这些标准的实现只是给出了相关的接口.