#
调试JSP时,在tomcat里改\conf\server.xml
< path="/myweb" docbase="C:\eclipse\workspace\MyJ2EEProject\myweb" workDir="C:\eclipse\workspace\MyJ2EEProject\j2src" />
< docBase="D:\workspace\myJSP\test" path="/test" reloadable="true" workDir="D:\workspace\myJSP\j2src"/>
j2src不要改动
Eclipse插件JSEclipse 1.5 近日宣布发布新版本。
JSEclipse 是个Eclipse 下的免费Javascript 脚本编辑器,最大的特点就是支持js的自动完成功能,支持普通DOM对象的点取,如文档对象,screen对象。除过基本的DOM对象支持外, JSEclipse对js文件内的Class和Function也能完美地支持自动完成。除过自动完成功能外,该插件还支持JS的语法高亮,错误和警告提示等等。该插件支持Eclipse 3.X。此次发布的新版本中进行了非常重要的提升。其中包括对代码完成引擎的大幅度的改进,增加了代码模板支持以及大量的帮助信息来简化工作。
JSEclipse 1.5 支持JRE 1.4。
下载地址:
http://www.interaktonline.com/Products/Eclipse/JSEclipse/Try- Download/
我在教授
軟體設計課程,尤其是以使用案例圖在說明架構設計時,每一個用套件(Package)所界定範圍的系統,係指軟體應用系統,但卻幾乎不會談及到資料庫。因
為,軟體應用系統與資料庫是兩個不同的層次,甚至,把資料庫視為是應用系統的 "私有倉儲(private storage)",會比較恰當。
不過,這衍生出一個問題,學員不容易分清楚如何 "mapping" 抽象面的架構設計至實體的 IT 系統,尤其是資料庫的問題。所以,我會先帶一個問題問學員:在設計層次的考量中,進銷存系統有幾個資料庫?
這一個問題要能回答得出來,其假設前提的考量必須要瞭解,在整體的架構設計中,設計團隊到底將 "進銷存" 視為是一個,還是三個,甚至多個的子系統?
參考下圖1,這是把 "進銷存" 視為是單一的系統,所以,資料庫只有一個。
好處是什麼? 就是簡單,開發也容易。進銷存相關的資訊處理,都是在同一個資料庫內,並沒有分散的問題,所以當處理銷貨需要查詢庫存資訊時,只要下 SQL 敘述直接連結庫存的 TABLE 即可。
圖1、將進銷存視為一個整體系統
參考下圖2,架構設計之初時,就已把 "進銷存"
分為三個子系統(Sub-system),或者也可以稱之為元件(Component),以凸顯子系統之間的溝通,是透過介面(Interface)的呼
叫。其實,論子系統的範圍與規模,稱為 "模組(Module)" 更為適合,不過,我個人並不喜歡以 "模組"
二字來稱之,因為,這個術語被業界給濫用了,已淪落為在業務面的術語,卻並沒有在實體的系統間,嚴格遵循透過介面的呼叫。
所以圖2,有三個資料庫。
當銷貨人員處理銷貨需要查詢庫存資訊時,需要透過庫存系統所提供的介面來呼叫,介面的實做可能是 "Web Service"、"Java
Bean"、"Session Bean"、"COM+" 等,但絕對不能直接下 SQL
來呼叫位於庫存系統內的資料庫,否則,就違背了圖2的整體架構設計。不遵循整體架構設計的規範,私自偷偷連接,稱之為 "跳線"。
圖2、將進銷存分成三個獨立的子系統
上圖2的抽象設計與IT面的實做技術,比較困難,也需要花較多成本,以專案為主(Project-based)的開發,時程短、預算
低廉,不容易達成圖2的設計目標。但若重覆性的專案,專注在進銷存這個領域上,有豐富足夠的領域知識(Domain
Knowledge),且打算產品化(Product),那麼,圖2的系統架構來得有彈性很多,"進"、"銷"、"存"
三個子系統(元件),均可以隨意抽換,各自更新或改版,而不會影響到另一個子系統,如同 PC 主機板內的硬體元件,可以造成 "PnP(Plug
and Play)" 的效果。
請注意,上述問題的提問,會有幾個資料庫,是指抽象的邏輯設計層面,可千萬不要與實體的資料庫混為一
談。例如,圖2雖然需要三個資料庫,但若以 Oracle 資料庫系統,DBA 可以將邏輯層面的三個資料庫,切分為三個 "TABLE
SPACE",然後放在同一個實體的 Oracle 資料庫系統內;而若是 MS SQL 或是 MySQL,則是切割為三個
"database",放入同一個實體資料庫系統內。
當然,若有地理位置或資料庫系統負載的問題,要分散至多個實體的資料庫系統,那也沒問題。例如,進銷存位於三個地點不同的廠,各自配置了三個實體資料庫,各自存放自己的資訊。這也是圖2架構設計的優點,一切分合自如!
e
化的系統設計,即使是 ERP
如此重視資料存取與處理的系統,應該要能摒除傳統以資料庫為中心的設計觀點,因為,系統整體的彈性度會不佳,很難應變需求面的頻繁變更,或是 IT
實體平台,包括資料庫系統的變更等。設計重心應該要轉移至 "Middleware",這個術語可能太貼近 IT
平台面了,倒不如乾脆這麼說,設計的重心就是回歸至以 "應用系統"
為主,是觀察應用系統可以提供那些服務(services)或功能(functions),這些服務與功能其實就是系統一個個可以量化的子目標(Sub-
goal),次一步驟才是考量如何取得要能達成這些子目標的資訊(資料),要取得資訊,就是到實體的倉儲,也就是私有的資料庫系統去找,或是,透過標準的
程序,也就是透過標準的介面,至外部系統取得相關的資訓來處理。
在server.xml配置文件中,增加
URIEncoding=GBK":
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
<!-- Note : To disable connection timeouts, set connectionTimeout value
to 0 -->
第一部分:选择题
QUESTION NO: 1
1、
public
class
Test {
public
static
void
changeStr(String str){
str
=
"
welcome
"
;
}
public
static
void
main(String[] args) {
String str
=
"
1234
"
;
changeStr(str);
System.out.println(str);
}
}
Please write the output result :
QUESTION NO:2
1. public class Test {
2. static boolean foo(char c) {
3. System.out.print(c);
4. return true;
5. }
6. public static void main( String[] argv ) {
7. int i =0;
8. for ( foo('A'); foo('B')&&(i<2); foo('C')){
9. i++ ;
10. foo('D');
12. }
13. }
14. }
What is the result?
A. ABDCBDCB
B. ABCDABCD
C. Compilation fails.
D. An exception is thrown at runtime.
QUESTION NO: 3
1. class A {
2. protected int method1(int a, int b) { return 0; }
3. }
Which two are valid in a class that extends class A? (Choose two)
A. public int method1(int a, int b) { return 0; }
B. private int method1(int a, int b) { return 0; }
C. private int method1(int a, long b) { return 0; }
D. public short method1(int a, int b) { return 0; }
E. static protected int method1(int a, int b) { return 0; }
QUESTION NO: 4
1. public class Outer{
2. public void someOuterMethod() {
3. // Line 3
4. }
5. public class Inner{}
6. public static void main( String[]argv ) {
7. Outer o = new Outer();
8. // Line 8
9. }
10. }
Which instantiates an instance of Inner?
A. new Inner(); // At line 3
B. new Inner(); // At line 8
C. new o.Inner(); // At line 8
D. new Outer.Inner(); // At line 8//new Outer().new Inner()
QUESTION NO: 5
Which method is used by a servlet to place its session ID in a URL that is written to the servlet’s response output stream?
A. The encodeURL method of the HttpServletRequest interface.
B. The encodeURL method of the HttpServletResponse interface.
C. The rewriteURL method of the HttpServletRequest interface.
D. The rewriteURL method of the HttpServletResponse interface.
QUESTION NO: 6
Which two are equivalent? (Choose two)
A. <%= YoshiBean.size%>
B. <%= YoshiBean.getSize()%>
C. <%= YoshiBean.getProperty("size")%>
D. <jsp:getProperty id="YoshiBean" param="size"/>
E. <jsp:getProperty name="YoshiBean" param="size"/>
F. <jsp:getProperty id="YoshiBean" property="size"/>
G. <jsp:getProperty name="YoshiBean" property="size"/>
QUESTION NO: 7
Which of the following statements regarding the lifecycle of a session bean are correct?
1.
java.lang.IllegalStateException is thrown if
SessionContext.getEJBObject() is invoked when a stateful session bean
instance is passivated.
2. SessionContext.getRollbackOnly() does
not throw an exception when a session bean with bean-managed
transaction demarcation is activated.
3. An exception is not
thrown when SessionContext.getUserTransaction() is called in the
afterBegin method of a bean with container-managed transactions.
4.
JNDI access to java:comp/env is permitted in all the
SessionSynchronization methods of a stateful session bean with
container-managed transaction demarcation.
5. Accessing resource
managers in the SessionSynchronization.afterBegin method of a stateful
session bean with bean-managed transaction does not throw an exception.
第二部分:概念题
1. 描述Struts体系结构?对应各个部分的开发工作主要包括哪些?
2. XML包括哪些解释技术,区别是什么?
3. JSP有哪些内置对象和动作?它们的作用分别是什么?
4、SQL问答题
SELECT * FROM TABLE
和
SELECT * FROM TABLE
WHERE NAME LIKE '%%' AND ADDR LIKE '%%'
AND (1_ADDR LIKE '%%' OR 2_ADDR LIKE '%%'
OR 3_ADDR LIKE '%%' OR 4_ADDR LIKE '%%' )
的检索结果为何不同?
5、SQL问答题
表结构:
1、 表名:g_cardapply
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_applydate bigint 8;//申请日期
g_state varchar 2;//申请状态
2、 表名:g_cardapplydetail
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号(关键字)
g_name varchar 30;//申请人姓名
g_idcard varchar 18;//申请人身份证号
g_state varchar 2;//申请状态
其中,两个表的关联字段为申请单号。
题目:
1、 查询身份证号码为440401430103082的申请日期
2、 查询同一个身份证号码有两条以上记录的身份证号码及记录个数
3、 将身份证号码为440401430103082的记录在两个表中的申请状态均改为07
4、 删除g_cardapplydetail表中所有姓李的记录
世界杯赛事时间表:
1、先自定义Comparator
// 对象的比较器,如1.1.1<1.2.1<1.11.1<1.1.1.1
public final class LcsjMapComparator implements Comparator
{
public int compare(Object arg0, Object arg1) {
GdnkVO_Lcsj_Map vo1=(GdnkVO_Lcsj_Map)arg0;
GdnkVO_Lcsj_Map vo2=(GdnkVO_Lcsj_Map)arg1;
String[] flowCode1=vo1.getFlowCode().trim().split("\\.");
String[] flowCode2=vo2.getFlowCode().trim().split("\\.");
for(int i=0;i<2;i++)
{
if(Integer.parseInt(flowCode1[i])<Integer.parseInt(flowCode2[i]))
return -1;
else if(Integer.parseInt(flowCode1[i])>Integer.parseInt(flowCode2[i]))
return 1;
}
return 0;
}
}
compare方法中的对象类型必须是集合中的元素的数据类型。
排在后面的返回1,排在前面的返回-1,相同顺序的返回0。
2、使用
Comparator lcsjComparator=new LcsjMapComparator();
Collections.sort(lcsjList,lcsjComparator);
即可得到排好序的集合。
有一些网友问我字符串转日期或日期转字符串要如何做,本来已经在留言板回答了,但觉得似乎有满多的网友有这种困扰,因此我把它整理整理贴出来。
在这篇文章中,我用的API是SimpleDateFormat,它是属于java.text.SimpleDateFormat,所以请记得import进来!
用法:
SimpleDateFormat sdf
=
new
SimpleDateFormat(
"
yyyy-MM-dd HH:mm:ss
"
);
这一行最重要,它确立了转换的格式,yyyy是完整的公元年,MM是月份,dd是日期,至于HH:mm:ss就不需要我再解释了吧!
ps:为什么有的格式大写,有的格式小写,那是怕避免混淆,例如MM是月份,mm是分;HH是24小时制,而hh是12小时制
1.字符串转日期:
2002-10-8 15:30:22要把它转成日期,可以用
Date date
=
sdf.parse(
"
2002-10-8 15:30:22
"
);
2.日期转字符串
假如把今天的日期转成字符串可用
String datestr
=
sdf.format(
new
Date());
这个字符串的内容便类似2002-10-08 14:55:38
透过这个API我们便可以随心所欲的将日期转成我们想要的字符串格式,例如希望将日期输出成2002年10月08日,
我们可以这么写:
SimpleDateFormat sdf
=
new
SimpleDateFormat(
"
yyyy年MM月dd日
"
);
String datestr
=
sdf.format(
new
Date());
datestr便会依照我们设定的格式输出
以Oracle + Tomcat 5.0为例:
1.配置server.xml
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/myoracle">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:myschema@127.0.0.1:1521:mysid</value>
</parameter>
<parameter>
<name>username</name>
<value>scott</value>
</parameter>
<parameter>
<name>password</name>
<value>tiger</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
2.配置web.xml
在</web-app>节点下加下面信息:
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.测试的代码
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
//etc.