Professional Documents
Culture Documents
Huong Dan Java FrameWork2003
Huong Dan Java FrameWork2003
User
POST
Form(jsp)
(2)
FBean
(1)
Action Form
(9)
(10a)
(3)
(8)
Request
(11)
Out
(10b)
Business Object
(BO)
FBeans
Layout
(4)
(7)
(6)
Database
View: (Form(*.jsp) v Layout): Thnh phn giao din ca ng dng. S dng cc trang
jsp hin th v tng tc vi ngui s dng.
Controller: (Action Form, mapping-config.xml): Phn iu khin cu trc hot ng ca
ng dng l cc yu cu, d liu c a vo (qua phng thc POST), sau c
x l v tr v cc kt qu qua thnh phn View.
Action
BO
DAO
DAO
Ch : Quy tc gi cc lp nh sau:
- Lp Action c php gi ti nhiu lp BO
- Lp BO c php gi ti nhiu lp DAO
- Lp DAO c php gi ti cc lp DAO khc
2.1 Cu trc ca m hnh Framework
BO
DAO
DAO
Tn
FBean
FBeans
Nhim v
- Ly d liu mt i tng
- t d liu ln jsp
- Ly nhiu d liu
- t d liu ln jsp
Quy c
Cc file to ra k tha t FSeed v c
t tn di dng F*.java
Lun tn ti trong h thng t
com.form.FBeans
2.2.2. Action
To ra lp A*.java k tha t lp ACore.java, thc hin n nhn d liu ca Form, cha cac
phng thc iu hng, iu khin lp BO v nhn kt qu d liu t v t lp BO. Khung m
ngun nh sau:
Public class AClasName extends ACore
{
public ActionForward excuteAction(ActionMapping mapping, ActionForm form.
HttpServletResquest request, HttpServletResponse response) throws
Eception,IOException,SvletException,SQLException
{
-Nhn tham s t form
VD: F* bean = (F*)form;
-Kim tra tnh ng n ca d liu v thao tc
VD: errors = validateForm(bean);
-Truy vn BO (l cch gi cc lp B*)
VD: B* bo= new B*();
- A* tr li thng tin cn thit cho jsp
VD: request.setAttribute(bo,bo);
- nh hosng lung trn mapping-cnig.xml
VD: return mapping.findForward(target);
}
}
Thng thng vic kim ta tnh ng n ca cc thao tc v d liu do ngi s dng to ra s
c thc hin trn Action (nn hn ch kim tra client qua javascript(). Phng php thc hin
kim tra thng qua hm sau:
Private ActionErrors validateForm(F* bean)
{
Sttring anchor = bean.getValue(APP_ANCHOR,);
If(anchor.equals(Hng s iu hng 1)){
Kim tra;
Thng bo li
}else if(anchor.equals(Hng s iu hng 1)){
Kim tra;
Thng bo li
}
}
VD:
Private ActionErrors validateForm(FEmpDecides bean)
ActionErrors errors = new ActionErrors();
If(anchor.equals(_CREATE)){
If((bean.getateSign()==null)||(bean.getDateSign().equals())){
Errors.add(StudentErrors,
newActionError(errors.student.datesign));}}
Return errors;
}
M t: Nu d liu ngy k(getDateSign) t FEmpDecides m cha c nhp th a ra
thng bo thiu: errors.student.datesign, ni dung ca thng bo c lu tr ti
Application_vn_VN.properties phn com.res.
2.2.2.1 Ni dung cc thnh phn trong action
(xem trong file ACore)
1. Users: dung lu gi cc thng tin ton b ngi ang s dng ang lm vic vi ng
dng.
2. me: Thng tin ti kho ca ngi s dng ang online.
3. seed: ung nhn d liu t F* trong bao gm request v response.
2.2.2.2 Mt s hng s iu hng
1. APP _ANCHOR: l hng s nh hng c s dng nhn cc gi tr anchor t jsp.
Public static final String APP _ANCHOR;
2._HOME: dung khi mun quay v trang ch
Public static final String _HOME;
3. _LOGIN: dng khi login
Public static final String _LOGIN;
4. _LOGOUT: dung khi Logout
Public static final String _LOGOUT;
5.Cc hng s nh hng to d liu (CREAT)
public static final String _CREAT;
// Dng khi chun b to d liu
public static final String _PREPARE_CREAT;
// Dng khi to mi d liu thnh cng
public static final String _CREAT_SUCCESS;
// Dng khi to d liu nhng gp li
public static final String _CREAT_FALSE;
6. Cc hng s nh hng sa d liu (EDIT)
public static final String _EDIT;
// Chun b sa
public static final String _PREPARE_EDIT;
// Sa thnh cng
public static final String _EDIT_SUCCESS;
// Sa gp li
public static final String _EDIT_FALSE;
7.Cc hng s nh hng xa d liu (DELETE)
public static final String _DELETE;
// Chun b xa
public static final String _PREPARE_DELETE;
// Xa thnh cng
public static final String _DELETE_SUCCESS;
// Xa gp li
Hm x l li;
Throw new Eception(LOCATION,sqle);// Th li khi cn}
Kim tra v x l li: hn ch li c th xy ra th chng ta cn phi lm cc hm kim
tra li lp A* (Xem li lp A* c hng dn cch kim tra li)
Ni dung ca hm trong BO
1. DBConnector.starttransaction(conn)
Hm ny s gip khi ng cc phin lm vic voeis CSDL, bt u nhn c cc kt ni,
sp xp th t lm vic v nh hng n ni cn ly d liu thng qua cc yu caauf.
2. DBConnector.getConnection()
Hm ny gipkhowir ng cc kt ni n c s d liu, ch i cc thng tin a vo. Nu kt
ni n nhiu CSDL, sau lnh ny th cc kt qu ca cc cu lnh mi c thc hin v tc
ng vo CSDL mc nh ca h thng.
3. DBConnector.endTransaction(conn)
Hm ny s xc nhn ton b cc giao dch din ra trong DAO sau dng cc phin lm
vic vi CSDL, sau lnh ny th cc kt qu ca cc cu lnh mi c thc hin v tc ng
vo CSDL.
4. DBConnector.rollBackTransaction(conn)
Ngt kt ni vi CSDL, cc kt ni ny c th tn ti trong b nh ty thuc tham s
DTBASE.CONNECTION.TIMEOUT trong com.r.Cnigs.properties
2.2.4. DAO
To ra lp D*.java k tha t lp DSql cha cc phng thc tc ng n CSDL thng
qua vic gi cc truy vn SQL t trong DSql. Khung m chng trnh nh sau:
Public class Dample extends DSql
{
Public [kiu tr v] tn hm (Connection cnn,FSeed seed) throws Eexception{
- Xc lp cc thng s cho data base
VD: PreparedStatement prpstm = null;
RultSet rs = null;
- Nhn tham s t seed F* bean= (F*)seed;
- - Xc lp bin tr v (VD: FBeans beans = null;)
Try{
- Truy cp CSDL thng qua vic gi cc cu SQL
VD: prpstm=cnn.prepareStatement(SQL_GET_EMPECIDES_BY_EMDECIDES_ID);
- Ly thng tin cn thit cho vic thc thi cu lnh SQL
VD: prpstm.setInt(PARAM_01,bean.gtmployee_Id());
Prpstm.sttring(PM_02,bean.getCode());
- Thc thi lnh
VD: rs= prpstm.cuteQuery();}
Catch (Eception ex){
Dng bt li nu kt ni c vn }
Finally{
ng kt ni nu hon thnh cng vic
VD: closeResultSet(rs);
closePreparedStatement(prpstm);}
- Tr kt qu v cho BO(VD: return beans;)}
Ch :
- Kiu tr v ging nh B*.java
- tn hm tr v ging nh B*.java
2.2.4.1. Ni dung ca cc hm s dng trong DAO:
- prpstm=cnn.prepareStatement(SQL)
Hm ny ly cu lnh SQL t DSql.java trong DAO
- prpstm,setXxxx(PARAM_XX,bean.getXxxxxxx())
Lnh ny gn thng tin cho Qution. C th c nhiu PM, s lng PARAM s bng s
lng QUSTION trong cu lnh SQL.
- rs= prpstm.excecuteQuery()
Hm ny thc thi cu lnh SQL v ly ra thng tin tr v cho rs.
- closeResultSet(rs):
Sau khi cc thng tin cn thit c ly ra th ngt rs gii phng b nh cho h thng
- closePreparedStatement(prpstm):
Dng hy cu lnh SQL khi b nh ca h thng.
2.2.4.2. Lp DSql.java
y l lp rt quan trng, c dung tp hp cc cu lnh SQL truy cp vo CSDL.
Mt s hm, hng s c tha k t DCore.java c th ng dng trong DSql nh sau:
STT
1
Tn hm
Hm PARAMS(s lng tham s s
truyn vo)
Thng c dng vi lnh NERT,
ch nh n tp hp cc trng trong
c s d liu m ta mun sa d liu
Hm FIELDS(tn tp hp cc trng,
true(false))
Thng c dung vi lnh
NERT_INTO, ch nh n tp hp
cc trng trong c s d liu m ta
mun thm mi d liu. Gi tr mc
nh l false khi ta gi FIELDS(tn tp
hp cc trng)
Hm FIELDS(tn bng,tn tp hp cc
trng, true(false))
Thng c dung vi lnh
NERT_INTO hoc SELECT, ch
nh n tp hp cc trng trong c s
d liu m ta mun thm mi d liu.
Gi tr mc nh l false khi ta gi
FIELDS(tn tp hp cc trng)
Hm SETS(Tn tp hp cc trng,
true(false))
Thng c dng vi lnh UPDATE,
ch nh n tp hp cc trng
trong c s d liu m ta mun sa d
liu. Gi tr mc nh l false khi ta gi
SETS(Tn tp hp cc trng)
Cch s dng
Tham s Tn tp hp cc trng s c
nh ngha trong lp IField.java vi cu trc:
PARAMS(4)=(?,?,?,?)
Tham s Tn tp hp cc trng s c
nh ngha trong lp IFeld.java vi cu trc:
-public final String[] TN
BNG_ALL_FIELDS={trng 1, trng 2, .
. .};
- Tham s true hoc false:
+nu dng l true th chng trnh s t ng
thm () -> (trng 1, trng 2, )
+ nu dung l false th gi nguyn ->trng
1, trng 2,
Tham s Tn tp hp cc trng s c
nh ngha trong lp IFeld.java vi cu trc:
-public final String[] TN
BNG_ALL_FIELDS={trng 1, trng 2, .
. .};
- Tham s true hoc false:
+nu dng l true th chng trnh s t ng
thm () -> (tn bng.trng 1, tn
bng.trng 2, )
+ Nu dng l false th gi nguyn ->tn
bng.trng 1, tn bng.trng 2,
Tham s Tn tp hp cc trng s c
nh ngha trong lp IFeld.java vi cu trc:
-public final String[] TN
BNG_ALL_FIELDS={trng 1, trng 2, .
. .};
- Tham s true hoc false:
+nu dng l true th chng trnh s t ng
thm () -> (trng 1=?, trng 2=?. )
6
7
VALUES(4)=VALUES(?,?,?,?)
c s dng khi cn xa d liu trn bng
vi iu kin tng ng
10
11
12
13
14
15
16
17
18
19
20
21
24
25
26
27
28
29
30
32
33
34
35
36
37
31
38
39
Ly ra ngy hin ti
Chuyn mt ngy a vo thnh
ngy theo nh dng ca SQL
Ly ra th ca ngy m ta a
vo(th 2 l s 2)
Ly ra ngy th my ca ngy m ta
a vo(ngy 30 l s 30)
Ly ra thng ca ngy m ta a vo
Ly ra nm ca ngy m ta a vo
Ly ra s ngy nm trong 1 khong
ngy m ta a vo
Thm vo bao nhiu ngy k t ngy
ang tnh
Dng kim tra xem chui a vo l
s nguyn hay k
Dng kim tra xem chui a vo l
ng hay sai
Dng kim tra xem chui a vo l
s m hay dng
Dng kim tra xem chui a vo l
dng s thp phn
Chuyn tham s t dng ch NCR
sang dng String
Ly s ngy trong mt thng vi
tham s l kiu ngy
Ly s ngy trong mt thng vi
tham s thnags v nm
Kim tra nm c phi nm nhun hay
khng
2.2.6. Inf
Cha cc giao din, hng s, kha kt ni, danh sch bng c s d liu, m t tn trng
Iactions.java, Ifields.java, Iroles.java v Itable.java.
IActions.java: Khai bo hng s nhm iu hng cc hnh ng trong mappingconfig.xml, chng c khai bo dng chui vi quy tc _TENHANGSODIEUHUONG
V d:
public interface IActions extends ICoreAction{
public static final String _ENGLISH
=_ENGLISH;
public static final String _VIETNAMESE
=__VIETNAMESE;
public static final String _FALSEACCOUNT=_FALSEACCOUNT;
public static final String _FALSEACCOUNT_AJAX=_FALSEACCOUNT_AJAX;
public static final String _NORMAL
public static final String _AJAX
public static final String _SUCCESS_AJAX
= _NORMAL;
= _AJAX;
= _SUCCESS_AJAX;
}
Ch : Cc tn v cc gi tr phi ging nhau, khng nn khai bo thm v tn ti cc gi tr
iu hng cn thit trong IcoreAction.
IFields.java: Khai bo cc hng cha tn ca cc trng trong bng CSDL vi quy tc
sau:
TENBANG_TENTRUONG=Tn trng trong c s d liu ;
V d:
public interface Ifields extends IParams {
/** Fields of Account table **/
public final String ACCOUNT_ID = ID;
public final String ACCOUNT_USERNAME = USERNAME;
public final String ACCOUNT_PASSWORD = PASSWORD;
public final String [] ACCOUNT_ALL_FIELDS={ACCOUNT_USERNAME,
ACCOUNT_PASSWORD}
}
IRoles.java: Khai bo cc hng s v gn gi tr cho hng s l cc vai tr v quyn.
V d:
pubic interface IRoles{
public static final int NONE
= 0;
public static final int pSELECT = 1;
public static final int pUPDATE = 2;
public static final int pINSERT = 4;
public static final int pDELETE = 8;
public static final int pDOWNLOAD = 16;
/*All role*/
public static final int rOFFICER = 1;
public static final int rLEADER = 2;
public static final int rMANAGER = 4;
public static final int rACCOUNTANT = 8;
public static final int rEDITOR = 16;
public static final int rVIEWER = 32;
public static final int rDIRECTOR = 64;
/*Privileges for USER */
public static final int POFFICER =pSELECT| pUPDATE| pINSERT| pDELETE|
pDOWNLOAD| pUPLOAD;
public static final int PLEADER =pSELECT| pUPDATE| pINSERT| pDELETE|
pDOWNLOAD| pUPLOAD;
DATA.USERNAME=VMS_EMPLOYEE
#Mt khu
DATABASE.PASSWORD=1;
# i ch IP hoc tn my ch t CSDL
DATABASE.HOSTNAME=192.18.0.201.
#tn CSDL
DATABASE.NAME=VSN45
#chui kt ni a vo khi DATABASE.TYPE=-1;
DATABASE.URL=jdbc:oracle:thin:VMS_EMPLOYEE/@192.168.0.201:1521:
VNS45
# Tn trnh iu khin khi DATABASE.TYPE =-1;
DATABASE.DRIVE =com.microstof.sqlsever.djbc..SQLSeverDrive.
#Cng kt ni vi c s d liu trong trng hp kt ni khng thit lp ti cng mc nh
DATABASE.PORT =-1;
#S lng kt ni ti a c th ch to ra mt thi im.
DATABASE.CONNECTION.MAX=2;
#S ln c gng kt ni li nu kt ni c khng thnh
DATABASE.CONNECTION.RETRY= 4;
#Thi gian tt ti trong n nh ca mi kt ni.
DATABASE.CONNECTION.TIMEOUT=1;
Trn y l cch s dng CSDL mc nh cho defaurt cho framwork, tuy nhin trong nhiu
trng hp Framework ca chng ta c th s dng nhiu kt ni khc do thc hin vic
ny ta c th lm nh sau:
#------CSDL gc------#
DATABASE.TYPE=2
DATABASE.USERNAME=VMS_EMPLOYEE
DATABASE.PASSWORD=1
DATABASE.HOSTNAME=192.168.0.201
DATABASE.NAME=VNS45
DATABASE.URL=
DATABASE.DRIVER=com.microsoft.sqlserver.jdbc.SQLServerDrive
DATABASE.PORT=-1
DATABASE.CONNECTION.MAX=2
DATABASE.CONNECTION.RETRY=4
DATABASE.CONNECTION.TIMEOUT=1
#-----CSDL TH 2------#
DATABASE.TYPE.SALARY=2
DATABASE.USERNAME.SALARY=VMS_SALARY
DATABASE.PASSWORD.SALARY=1
DATABASE.HOSTNAME.SALARY=192.168.0.201
DATABASE.NAME.SALARY=VNS45
Nh vy, kt ni 2 cn thm 1 tham s na, chinh l .SALARY, v tham s ny s c khai
bo trong com.inf.IKey vi on m sau:
Public static final String SALARY_CONNECTION= .SALARY;
gi kt ny trong B* ta cn lm nh sau:
Conn =Dbconnector.getConnection(IKey.SALARY_CONNECTION);
thit lp phn trang cho JSP
APP.ROWS.VIEW=20 //s dng trong mt trang.
APP.PAGES.VIEW=10 //s trang nhiu nht.
hn ch dung lng ti a truyn file
FILE.UPLOAD.MAXSIZE=1048576 // Dng cho upload
Cha tt c cc trang jsp ca chng trnh, cc th vin, cc styles, cc file js, cc hnh nh
v hot ng c lin quan n nhau gia cc trang jsp.
2.3.1.WEB-INF
Phn quan trng trong WEB-INF l lib cha tt c cc th vin quan trng ca struts cc th
vin v SQL,ORACLE,cc lp bt li,cn thit cho vic thit k cc ng dng trn
framework v file mapping-config.xml.
Cc lin kt, hot ng gia cc trang jsp c th hin file mapping-config.xml. Tn cc
form cu cc trang jsp c trong ng dng c nh ngha cng vi kiu ca n bng cp th
:<form-bean></form-bean>, v d:
<form-beans>
<form-bean name= language type= com.form.language.Flanguage/>
<form-bean name= login type= com.form.login.FloginSystem/>
<form-bean name= kiemtramatkhauNormal type= com.form.kiemtra.FMatKhau/>
<form-bean name= kiemtramatkhauAjax type= com.form.kiemtra.FMatKhau/>
<form-bean name= produce type= com.form.hanghoa.Fproduce/>
</form-beans>
Cc iu hng hnh ng ca cc Action th hin trong cp th <action-mappings></action>
V d:
<action-mapping>
<action name =ten form=path=/ten form
type=com.action.vitri.AtenActionvalidate=false>
<forward name=_SUCCESS path=/produce.jsp/>
<forward name=_FALSE path=/DEMO/index.jsp/>
</action>
Chn General->Java Class ca s Create Java Class xut hin,ta t tn class v gi ca class,ri
nhp OK
M ca Fstudent.java nh sau:
Package.com.form.learning;
Import com.form.Fseed;
Import org.apache.struts.upload.FormFile;
Public class Fstudent extends Fseed
{
private String code;
private String firstName;
private String lastName;
private String birthday;
private String address;
}
Thc hin right click vo mt bin bt k trn form ta thy xut hin menu popup sau:
Chn ton b cc tn bin xut hin, sau chp nhn OK chng ta s thu c form c dng
sau
package com.form.learning;
import com.form.FSeed;
import org.apache.struts.upload.FormFile;
public class FStudent extends FSeed{
private String code;
private String firstName;
private String lastName;
private String birthday;
private String address;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
M ca DStudent.java nh sau
package com.form.learning;
import com.form.FSeed;
import org.apache.struts.upload.FormFile;
public class FStudent extends FSeed{
private String code;
private String firstName;
private String lastName;
private String birthday;
private String address;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
M ca Bstudent.java nh sau:
public class BStudent {
public boolean addNew(FSeed seed) throws EException{
final String LOCATION = this.toString() + "->addNew()";
boolean result = false;
Connection conn = null;
FStudent bean = (FStudent)seed;
try{
conn = DBConnecor.getConnection();
DBConnector.endTransaction(conn);//Bat dau giao dich
DStudent dao = new DStudent();
result = dao.checkCodeStudent(conn,bean) && dao.addNew(conn,bean);
Chn web tier JSPJSP ri nhp OK. Ca s Create JSP xut hin. Bn nhp tn trang l
student.jsp. Nhp nt finish chng trnh s t to trang jsp ca ban.
Cng trn web content, to trang studentSuccess.jsp khi to thnh cng, trang ny s hin th.
Trang student.jsp:
<%@ page contentType = text/html; charset = UTF-8 language = java%>
<%@include file = /commons/tags.jsp%>
<%@ include file = /commons/params.jsp%>
<html>
<head><jsp: include page = /commons/set.jsp></head>
<body>
<table>
<tr align = center><td>
<strong><bean: message key = notice.success bundle = <%=interfaces%>/></strong>
</td></tr>
<table>
</body>
</html>
Cng trn web content, to trang studentFail.jsp khi xut hin li, trang ny s hin th.
Trang studentFail.jsp
<%@ page contentType = text/html; charset = UTF-8 language = java%>
<%@include file = /commons/tags.jsp%>
<%@ include file = /commons/params.jsp%>
<html>
<head><jsp: include page = /commons/set.jsp></head>
<body>
<table>
<tr align = center><td>
<strong><bean: message key = notice.error bundle = <%=interfaces%>/></strong>
</td></tr>
<table>
</body>
</html>
Khi trong file mapping_configs.xml s c vit nh sau:
{
errors.add(StudentErrors, new ActionError(errors.student.code));
}
If ((bean.getFirstName()==null)||(bean.getFirstName().equal()))
{
errors.add(StudentErrors, new ActionError(errors.student.FirstName));
}
If ((bean.getLastName()==null)||(bean.getLastName().equal()))
{
errors.add(StudentErrors, new ActionError(errors.student.lastname));
}
If ((bean.getAddress()==null)||(bean.getAdress().equal()))
{
errors.add(StudentErrors, new ActionError(errors.student.address));
}
If ((bean.getBirthday()==null)||(bean.getBirthday().equal()))
{
errors.add(StudentErrors, new ActionError(errors.student.birthday));
}else if(!bean.isDate(bean.getBirhday())){
errors.add(StudentErrors, new
ActionError(errors.student.formatbirthday));
return errors;
}
}
4. Cng ngh AJAX
AJAX c dng khi d liu c gi ln x l v thay i ni dung tr v l mt trang JSP mi
th AJAX ch n nhn kt qu v a vo trang hin thi qua cc hm javascript. iu ny lm
cho giao din ca ng dng tri nn thn thin, linh hot v ng dng t c tc cao hn.
Ty vo tng chc nng, kh nng tng tc, c tnh s dng ca ng dng m ta c th s dng
POST AJAX hay POST thng.
Ly v d trn:
Khi nhp thnh cng mt sinh vin, s tr v trang studentSuccess.jsp hin th thng bo nhp
thnh cng. Nu s dng POST AJAX th thng bo nhp ny s ch hin th nh mt phn ca
trang student.jsp m thi v ta c th t thng bo ny vo nhng v tr m ta mun hin th.
Khi trong trang student.jsp ta s sa li nh sau:
<%@ page contentType = text/html; charset = UTF-8 language = java%>
<%@include file = /commons/tags.jsp%>
<%@ include file = /commons/params.jsp%>
<html>
<head><jsp: include page = /commons/set.jsp></head>
<body>
<html: form action = student>
<table>
<tr>
<td align = right>
<strong><bean: message key = student.code bundle = <%=interfaces%>/></strong>
<td align = left><html: text property = code/></td>
</tr>
<tr>
<td align = right>
5
6
AppConfigs.SESSION_MAX_USERS
AppConfigs.SESSION_DENY_GUEST
Client v Server
C cc phng thc sau: POST, GET;
S lng kt ni ti a n ng dng
Thit lp yu cu ti khon trc khi s
dng chng trnh
TRUE: Yu cu ng nhp trc
khi s dng
FALSE: Khng yu cu ng nhp
vn c th s dng ng dng.
Gi tr mc nh l report.xls
Public static final String REPORT_FILE_EXCEL = getValue(REPORT.FILE.EXCEL,
report.xls);
Bc 3: Khi cn gi ti tham s, bn s dng cch gi AppConfigs.Tn_Tham_S.