You are on page 1of 69

Mc lc Mc lc......................................................................................................................1 SERVLET..................................................................................................................3 javax.servlet.Servlet ..................................................................................................3 GenericServlet:..........................................................................................................4 HttpServlet.................................................................................................................5 ServletReq est inter!ace:...........................................................................................5 ServletResp"nse inter!ace..........................................................................................# HttpServletReq est inter!ace:....................................................................................

# HttpServletResp"nse inter!ace:.................................................................................$ Servlet%"n!i& inter!ace..............................................................................................$ Servlet%"ntext...........................................................................................................' M(t v) * v+ ,- l.n/ l0n& n&/e s1 2i.n 3listener4....................................................5 Req est6ispatc/er.....................................................................................................5 Err"r l"& v7 sen* err"r.............................................................................................18 Sessi"n Trac2in& 9 L: *; sessi"n........................................................................18 Sec rit< %"n!i& rati"n............................................................................................15 =pplet......................................................................................................................15 >S? @ >ava Server ?a&es...........................................................................................A8 GiBi t/i. v+ >S?.....................................................................................................A8 Expresssi"n 3CiD t/Ec4...........................................................................................A8 Scriptlets..................................................................................................................A8

%",p"se* C< HaiFT

6eclarati"ns.............................................................................................................A1 %",,ents................................................................................................................A1 6irectives.................................................................................................................A1 =cti"n......................................................................................................................AA >S? EL Expressi"ns ................................................................................................A5 >STL @ >ava Server ?a&es Stan*ar* Ta& LiCrar<...................................................A# G1'F 9 Gnternati"nalisati"n 3q Hc tI /Ja4 ..............................................................34 >S? c st", ta&s.......................................................................................................3' ?/ lc.....................................................................................................................4' KIt nHi cL sM *N li. ...............................................................................................#5

%",p"se* C< HaiFT

SERVLET javax.servlet.Servlet
Ta cJ t/D tO" ,(t servlet CPn& cQc/ implements tR inter!ace javax.servlet.Servlet. V) *:
package com.test.servlet; import java.io.IOException; import java.io.PrintWriter; import import import import javax.servlet.ServletConfig; javax.servlet.ServletException; javax.servlet.ServletRequest; javax.servlet.ServletResponse;

public class Servlet1 implements javax.servlet.Servlet public void !estro"#$ % public ServletConfig getServletConfig#$ return null; % public String getServletInfo#$ return null; % public void init#ServletConfig config$ throws ServletException % public void service#ServletRequest req& ServletResponse res$ throws ServletException& IOException PrintWriter out ' res.getWriter#$; out.println#()a" la servlet implements tu javax.servlet.Servlet($; % %

SD cJ t/D c/O< ,(t servlet ta cTn cQc C:Bc sa : 14 TO" !ile Servlet1.java vBi n(i * n& n/: trUn v7 VWt tr"n& pac2a&e
com.test.servlet

A4 K/ai CQ" tr"n& XeC.x,l


*servlet+ *servlet,name+Serv1*-servlet,name+ *servlet,class+com.test.servlet.Servlet1*-servlet,class+

%",p"se* C< HaiFT

*-servlet+ *servlet,mapping+ *servlet,name+Serv1*-servlet,name+ *url,pattern+-Serv1*-url,pattern+ *-servlet,mapping+

34 %/O< En& *n& trUn Cr"Xser: /ttp:YYl"cal/"st:'8'8Y6e,"YServ1

GenericServlet:
ZPn& cQc/ triDn 2/ai servlet n/: trUn t/[ ,\i vi.c V+ ]n n/:n& cJ A v;n V+ 2/J c/^ l7: 14 F/: ta t/;< M !ile Servlet1 M V6 trUn l _n cJ 5 p/:Ln& t/Ec l7
public public public public public void !estro"#$ ServletConfig getServletConfig#$ String getServletInfo#$ void init#ServletConfig config$ void service#ServletRequest req& ServletResponse res$

c`a inter!ace javax.servlet.Servlet C0t C (c p/ai V:bc triDn 2/ai ,Wc *c p/Tn lBn ta c/d se *n& 1 p/:Ln& t/Ec 3cQc p/:Ln& t/Ec 2/Qc VD trHn& 9 2" l7, &[ ca4. A4 FI ta , Hn l: &iN &iQ tr^ c`a Servlet%"n!i& t/[ ta p/ai 2/ai CQ" v7 l: &iQ tr^ c`a nJ t/"n& q a p/:Ln& t/Ec init34 n/: CUn *:Bi. Si+ n7< 2/_n& 2/J n/:n& tr"n& tr:fn& /bp n7< lOi t/U, ,(t C:Bc p/ai t/1c /i.n.
ServletConfig servletConfig; public void init#ServletConfig config$ throws ServletException servletConfig ' config; %

Si+ n7< V:bc &iai q <It CPn& cQc/ 2I t/Ra tR GenericServlet. Generic class Vt/1c t/i t;t ca cQc p/:Ln& t/Ecg /T /It l7 VD trHn&. Servlet%"n!i& V:bc t/1c /i.n CPn& cQc/ &\i getServletConfig() tr"n& service();. V7 &if Vh< 2/i ta tO" servlet 2I t/Ra tR lBp n7< si tr_n& VLn &ian v7 sQn& s`a /Ln n/i+ :
package com.test.servlet; import javax.servlet..; import java.io.IOException; import java.io.PrintWriter; public class Servlet1 extends javax.servlet./enericServlet

%",p"se* C< HaiFT

public void service#ServletRequest request& ServletResponse response$ throws ServletException& IOException PrintWriter out ' response.getWriter#$; out.println#()a" la servlet exten!s tu javax.servlet./enericServlet($; % %

HttpServlet
S:bc exten*s 32I t/Ra4 tR javax.servlet.GenericServlet v7 t/U, v7" ,(t sH cQc p/:Ln& t/Ec. j an tr\n& n/;t l7 # ,et/"* *"xxx V:bc &\i 2/i Http req est V:bc se *n& VJ l7: *"?"st34g doGet()g *"Trace34g *"kpti"n34g doDelete(). Tr"n& C7i n7< ta c/d c/l tr\n& v7" *"Get34 v7 *"?"st34m
package com.test.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.0ttp.1ttpServletRequest; import javax.servlet.0ttp.1ttpServletResponse; public class Servlet2 extends javax.servlet.0ttp.1ttpServlet public void !o/et#1ttpServletRequest request& 1ttpServletResponse response$ throws ServletException& IOException PrintWriter out ' response.getWriter#$; out.println#()a" la servlet exten!s tu javax.servlet.0ttp.1ttpServlet($; % %

*"?"st34 V:bc &\i 2/i ,et/"* V:bc VWt tr"n& !"r, l7 ?kST v7 *"Get 2/i ,et/"* n GET. MWc V^n/ *"Get34 si V:bc &\i. V6: opkRM METHk6n?kSTq

ServletRe !est inter"ace:


ServletReq est inter!ace c n& c;p cQc p/:Ln& t/Ec q an tr\n& c/" p/rp COn tr < csp t/"n& tin v+ ser. V) *g p/:Ln& t/Ec &et?ara,eterFa,es tra v+ 2iD En ,erati"n c/Ea tsp /bp cQc tUn para,eter c`a req est /i.n t/fi. SD l;< t/_n& tin c`a cQc req est n7< ta se *n& p/:Ln& t/Ec &et?ara,eter. V61: in ra *an/ sQc/ t;t ca cQc ?ara,eter c`a req est /i.n t/fi
Enumeration parameters ' request.getParameter3ames#$; 40ile #parameters.0as5oreElements#$$ String parameter3ame ' #String$ parameters.nextElement#$;

%",p"se* C< HaiFT

S"stem.out.println#(Parameter 3ame6 ( 7 parameter3ame$; S"stem.out.println#(Parameter 8alue6 ( 7 request.getParameter#parameter3ame$$;

t
1"Wc

ta cJ t/D l;< V^a c/d G? c`a ser n p/:Ln& t/Ec &etRe,"te=**ressg tUn ,Q< n p/:Ln& t/Ec &etRe,"teH"st. Ta cJ t/D xe, v7 c/O< t/e t;t ca cQc p/:Ln& t/Ec c`a ServletReq est tr"n& Can& *an/ ,c cQc p/:Ln& t/Ec c`a ServletReq est M c Hi t7i li. n7<: V6A: L;< V^a c/d ,Q< c`a ser
out.println#(9serRemote1ost6( 7 request.getRemote1ost#$$;

ServletResponse inter"ace
?/:Ln& t/Ec q an tr\n& n/;t l7 java.i".?rinturiterg vBi VHi t:bn& n7< COn cJ t/D in ra cQc t/v HTML /"Wc *N li. *On& text lUn tr[n/ * <.t. V6:
PrintWriter out ' response.getWriter#$;

" t.println3woHTMLqw4m xx. " t.println3woYHTMLqw4m

HttpServletRe !est inter"ace:


Gnter!ace n7< V:bc 2I t/Ra tR javax.servlet.ServletReq est VD c n& c;p cQc t/_n& tin v+ req est c/" HTT? servlet. HttpServletReq est V:bc t/U, v7" ,(t sH cQc p/:Ln& t/Ec ,7 ServletReq est 2" cJ p/c v c/" HttpServlet. V6: &et= t/T<pe34: tra v+ 2iD xQc t/1c VD Ca" v. servlet. KIt q a tra v+ cJ t/D l7 yZ=SG%zg ySSLz /"Wc F{LL nI servlet 2" V:bc Ca" v.. &et%"ntext?at/34: tra v+ 1 p/Tn {RL c`a c"ntext c`a req est 3V6: YServet6e,"4. %Qc p/:Ln& t/Ec HTT? Case* 2/Qc l7: &et%""2ies34g &etHea*erxxx34x. Tt c cc phng thc ca interface ny c lit k trong phn ph lc

%",p"se* C< HaiFT

HttpServletResponse inter"ace:
KI t/Ra tR ServletResp"nse inter!ace VD c n& c;p cQc c/Ec n|n& VWc ta c`a HTT? servlet tr"n& vi.c &ei resp"nse. V) V cQc p/:Ln& t/Ec tr < csp HTT? /ea*ers v7 c""2ies. Tt c cc phng thc ca interface ny c lit k trong phn ph lc

Servlet#on"i$ inter"ace
S:bc se *n& CMi servlet c"ntainer VD tr <+n t/_n& tin tBi servlet tr"n& 2/i 2/Mi tO". V6: Se *n& Servlet%"ntext VD V\c cQc t/a, sH 2/Mi tO" c`a servlet. 14 %Qc t/a, sH n7< V:bc 2/ai CQ" tr"n& XeC.x,l n/: sa :
*4e:,app+ .;;. *servlet+ *servlet,name+Serv1*-servlet,name+ *servlet,class+com.test.servlet.Servlet1*-servlet,class+ *init,param+ *param,name+a!minEmail*-param,name+ *param,value+a!min<aptec0.com*-param,value+ *-init,param+ *init,param+ *param,name+a!minContact3um:er*-param,name+ *param,value+=>2?@AB12AB*-param,value+ *-init,param+ *-servlet+ ;;;;

oYXeC@appq A4 S\c cQc t/a, sH:


package com.test.servlet; import import import import import import import java.io.IOException; java.io.PrintWriter; java.util.Enumeration; javax.servlet.ServletConfig; javax.servlet.ServletException; javax.servlet.0ttp.1ttpServletRequest; javax.servlet.0ttp.1ttpServletResponse;

public class Servlet2 extends javax.servlet.0ttp.1ttpServlet public void !o/et#1ttpServletRequest request& 1ttpServletResponse response$ throws ServletException& IOException PrintWriter out ' response.getWriter#$;

%",p"se* C< HaiFT

ServletConfig sc ' getServletConfig#$; Enumeration parameters ' sc.getInitParameter3ames#$; int count ' =; while #parameters.0as5oreElements#$$ count77; String parameter ' #String$ parameters.nextElement#$; out.println#(Para name6 ( 7 parameter 7( value6 ( 7 sc.getInitParameter#parameter$$; % if #count '' =$ out.println#(Co co parameter nao !uoc cai !at trong 4e:.xml cua servlet6 ( 7 sc.getServlet3ame#$$; % %

Tt c cc phng thc ca interface ny c lit k trong phn ph lc

Servlet#ontext
S^n/ n&/}a tsp /bp cQc p/:Ln& t/Ec ,7 ,(t servlet se *n& VD &ia" tiIp vBi Servlet %"ntainer. V6: set=ttriC te c/" p/rp &\i t/ (c t)n/ n7< M t;t ca cQc servlet tr"n& ccn& ,(t c"ntext
package com.test.servlet; import import import import import javax.servlet..; javax.servlet.0ttp.1ttpServlet; java.util.Enumeration; java.io.IOException; java.io.PrintWriter;

public class Servlet1 extends 1ttpServlet public void service#ServletRequest request& ServletResponse response$ throws ServletException& IOException PrintWriter out ' response.getWriter#$; ServletContext servletContext ' getServletConfig#$.getServletContext#$; Enumeration attri:utes ' servletContext.getDttri:ute3ames#$; while #attri:utes.0as5oreElements#$$ String attri:ute ' #String$ attri:utes.nextElement#$; out.println#(Dttri:ute3ame6 ( 7 attri:ute$; out.println#(Dttri:ute8alue6 (7 servletContext.getDttri:ute#attri:ute$$; % out.println#(5ajor8ersion6 (7 servletContext.get5ajor8ersion#$$; out.println#(5inor8ersion6 (7 servletContext.get5inor8ersion#$$; out.println#(Server info 6 ( 7 servletContext.getServerInfo#$$; % %

%",p"se* C< HaiFT

Tt c cc phng thc ca interface ny c lit k trong phn ph lc

%&t v' d v( m) l*n+ l,n$ n$+e s- .i*n (listener)


M~i 2/i ,(t s1 2i.n &[ VJ xa< ra t/i cQc p/:Ln& t/Ec t:Ln& En& si V:bc &\i
package com."ourcompan".listener; import javax.servlet.ServletContextDttri:uteEvent; import javax.servlet.ServletContextDttri:uteEistener; public class 5"ServletContextDttri:uteEistener implements ServletContextDttri:uteEistener public void attri:uteD!!e!#ServletContextDttri:uteEvent sca:$ S"stem.out.println#(Dn attri:ute 4as a!!e! to t0e ( 7 (ServletContext o:ject($; % public void attri:uteRemove!#ServletContextDttri:uteEvent sca:$ S"stem.out.println#(Dn attri:ute 4as remove! from ( 7 (t0e ServletContext o:ject($; % public void attri:uteReplace!#ServletContextDttri:uteEvent sca:$ S"stem.out.println#(Dn attri:ute 4as replace! in t0e ( 7 (ServletContext o:ject($; % %

%; /[n/ tr"n& XeC.x,l


*listener+ *listener,class+ com."ourcompan".listener.5"ServletContextDttri:uteEistener *-listener,class+ *-listener+

Re !estDispatc+er
G, A p/:Ln& t/Ec l7 incl *e 3VD l;< n(i * n& c`a ,(t tran& 2/Qc v7" servlet /i.n t/fi. ?/:Ln& t/Ec !"rXar* VD c/ <Dn VIn 1 {RL 2/Qc. ZOn cJ t/D l;< Req est6ispatc/er t/e" 1 tr"n& 3 cQc/ sa :

Se *n& p/:Ln& t/Ec getRequestDispatcher c`a javax.servlet.ServletContext inter!aceg t/a, sH tr <+n v7" l7 c/ ~i c/Ea V:fn& *n tBi t7i n& <Un 2/Qc. S:fn& *n l7 V:fn& *n t:Ln& VHi vBi &Hc c`a Servlet#ontext. Se *n& p/:Ln& t/Ec getRequestDispatcher c`a javax.servlet.ServletRequest inter!aceg t/a, sH tr <+n v7" l7 c/ ~i c/Ea V:fn& *n tBi t7i n& <Un 2/Qc. S:fn& *n l7 t:Ln& VHi

%",p"se* C< HaiFT

vBi HTT? req est /i.n /7n/. S:fn& *n cJ t/D l7 t:Ln& VHi n/:n& nJ 2" t/D ,M r(n& ra n&"7i servlet c"ntext /i.n /7n/.

Se *n& p/:Ln& t/Ec getNamedDispatcher c`a javax.servlet.ServletContext inter!aceg t/a, sH tr <+n v7" l7 c/ ~i c/Ea tUn c`a t7i n& <Un 2/Qc 3V6: tUn 1 servlet V:bc V^n/ n&/}a tr"n& XeC.x,l4.

!" khc #it gi$a % phng thc ny l &a'a( )er'let *onte(t get+e,-e)t.i)patcher/0 c1 th2 34ng 5ng 36n tng 7i

request.getRequest)ispatc0er#(-in!ex.jsp($.inclu!e#request& response$; request.getRequest)ispatc0er#(-in!ex.jsp($.for4ar!#request& response$;

Error lo$ v/ send error


log#(Fest log error(& new Exception#$$; response.sen!Error#response.SC_BAD_GATEWAY$;

Session Trac.in$ 0 L1! d2! session


V[ p/:Ln& t/Ec HTT? l7 stateless 32" l: cQc t/_n& tin l^c/ se4g Vi+ n7< an/ /:Mn& sh s0c VIn lsp tr[n/ En& *n& XeC. %J 4 2 t/ st VD l: *; sessi"n: 14 {RL reXrittin& 9 T/U, cQc t/a, sH v7" c Hi {RL A4 Hi**en !iel*s 9 Se *n& cQc tr:fn& n 34 %""2ies 9 Se *n& c""2ie VD tra" V]i *N li. &iNa client v7 server 44 Sessi"n o#&ect) 9 Se *n& cQc VHi t:bn& cJ p/O, vi 3sc"pe4 l7 sessi"n VD tr <+n t/_n& tin.

3RL Re4rittin$:
V6: Http:YYl"cal/"st:'8'8Y6e,"YtestxnaCc<nx< ?/Tn sa xnaCc<nx< l7 p/Tn V:bc t/U, v7" VD tr <+n A para,eter x v7 < SD l;< &iQ tr^ n7< ta *cn& l.n/ re !est.$et5arameter(6x7)g t:Ln& t1 vBi <.

%",p"se* C< HaiFT

Hidden "ields:
oGF?{T T?EnHG66EF Fa,en/piel* V=L{EnwaCczq SD l;< &iQ tr^ n7< ta *cn& l.n/ re !est.$et5arameter(6+8ield7).

#oo.ies:
%""2ie V:bc l: CMi server v7 &ei v+ client ccn& resp"nse. Req est V:bc &ei tBi server ccn& vBi c""2ie n/:n& 2" t/a< V]i &iQ tr^ c`a c""2ie. GiQ tr^ c`a c""2ie V:bc l: tr"n& C( n/B 3] cEn& 4 c`a client. V61: l: c""2ie 3se *n& resp"nse4
CooGie c1 ' new CooGie#(user3ame(& (1elen($; CooGie c2 ' new CooGie#(pass4or!(& (Ceppler($; c2.set5axDge#A==$; response.a!!CooGie#c1$; response.a!!CooGie#c2$;

%""2ie V:bc c/ia l7, A l"Oi l7 c""2ie C^ xJa n&a< sa 2/i VJn& tr[n/ * <.t. L"Oi t/E A &\i l7 persistin& c""2iesg l"Oi l7 cA tr"n& v) * trUn. Ta se *n& setMaxa&e3int4 VD VWt t ]i t/e" &ih< c/" c""2ie. V6A: S\c &iQ tr^ c`a c""2ies:
CooGieHI cooGies ' request.getCooGies#$; for #int i ' =; i * cooGies.lengt0; i77$ CooGie cooGie ' cooGiesHiI; out.println#(3ame,+( 7 cooGie.get3ame#$ 7 ( 8alue,+( 7 cooGie.get8alue#$$; %

Session o9jects:
1ttpSession session ' request.getSession#true$; session.setDttri:ute#(logge!In(& ne4 String#(true($$;

V[ cJ p/O, vi 3sc"pe4 l7 sesi"n nUn &iQ tr^ n7< cJ t/D V:bc V\c CMi cQc servlet 3/"Wc >S?4 2/Qc.

8ilter v/ Servlet comm!nication


pilter l7 ,(t C] x n& ,Bi c/" Servlet A.3g c/" p/rp COn c/0n 1 req est tr:Bc 2/i nJ tBi cQc t7i n& <Un. FJi cQc/ 2/Qcg !ilter c/" COn q <+n tr < csp VIn cQc

%",p"se* C< HaiFT

HttpServletReq est v7 HttpServletResp"nse tr:Bc 2/i c/ln& V:bc c/ <Dn VIn 1 servlet. pilter cJ t/D r;t V0c *n&. V) *g COn cJ t/D viIt 1 !ilter VD l: t;t ca cQc req est V:bc &ei VIn v7 l"& V^a c/d G? c`a cQc ,Q< &ei req est. ZOn cn& cJ t/D se *n& !ilter n/: ,(t p/:Ln& ti.n VD ,- /Ja v7 &iai ,-. %n& cJ t/D *cn& VD xQc t/1c serg nrn *N li. g xQc t/1c *N li. ..vv... K/i viIt 1 !ilterg v+ cL Can COn si l7, vi.c vBi 3 inter!ace tr"n& pac2a&e javax.servlet: 14 pilter A4 pilter%"n!i& 34 pilter %/ain

Filter interface
Vn& Vfi 3li!e circle c`a 1 !ilter &, 3 ,et/"*4: 14 p Clic v"i* init3pilter%"n!i& !ilter%"n!i&4 A4 p Clic v"i* *"pilter3HttpServletReq est req estg HttpServletResp"nse
resp"nseg pilter%/ain c/ain4

34 p Clic v"i* *estr"<34 V) *1: Tr"n& v) * n7< si *e," vn& Vfi c`a !ilter: TestFilter.java
import import import import import import import import import import import import java.io..; java.net..; java.util..; java.text..; javax.servlet..; javax.servlet.0ttp..; javax.servlet.Jilter; javax.servlet.JilterC0ain; javax.servlet.JilterConfig; javax.servlet.ServletException; javax.servlet.ServletRequest; javax.servlet.ServletResponse;

public class FestJilter implements Jilter

%",p"se* C< HaiFT

private JilterConfig filterConfig ' null; public FestJilter#$ % public void !oJilter#ServletRequest request& ServletResponse response& JilterC0ain c0ain$ throws IOException& ServletException S"stem.out.printlnF0is is !oJilter($; --In ra 2 parameter cKa filter S"stem.out.println#(Init p16( 7 filterConfig.getInitParameter#(p1($$; S"stem.out.println#(Init p26( 7 filterConfig.getInitParameter#(p2($$; --EL" giM trN cKa parameter para1 OP sQa vR lSu vRo attri:ute att1 String para1 ' request.getParameter#(para1($; request.setDttri:ute#(att1(& para1 7 (,xxxT($; c0ain.!oJilter#request& response$; % public void setJilterConfig#JilterConfig filterConfig$ this.filterConfig ' filterConfig; % public void !estro"#$ S"stem.out.println#(F0is is !estro"($; % public void init#JilterConfig filterConfig$ % % S"stem.out.println#(FestJilter6 InitialiUing filter($;

We .xml %J A cQc/ t/iIt lsp ,appin& !ilter vBi servlet 14 T/e" tUn servlet 3kh8ng c1 3- 9:;4
*filter,mapping+ *filter,name+FestJilter*-filter,name+ *servlet,name+Jiltere!Servlet*-servlet,name+ *-filter,mapping+

A4 T/e" {RL pattern:


*filter,mapping+ *filter,name+FestJilter*-filter,name+ *url,pattern+-Jiltere!Servlet*-url,pattern+ *-filter,mapping+

6:Bi Vh< l7 2/ai CQ" 3t/e" {RL4 tr"n& XeC.x,l

%",p"se* C< HaiFT

*Vxml version'(1.=( enco!ing'(9FJ,@(V+ *4e:,app version'(2.W( xmlns'(0ttp6--java.sun.com-xml-ns-javaee( xmlns6xsi'(0ttp6--444.4A.org-2==1-X5ESc0ema,instance( xsi6sc0emaEocation'(0ttp6--java.sun.com-xml-ns-javaee 0ttp6--java.sun.com-xml-ns-javaee-4e:,appY2YW.xs!(+ *filter+ *filter,name+FestJilter*-filter,name+ *filter,class+com.aptec0.filter.FestJilter*-filter,class+ *init,param+ *param,name+p1*-param,name+ *param,value+v1*-param,value+ *-init,param+ *init,param+ *param,name+p2*-param,name+ *param,value+v2*-param,value+ *-init,param+ *-filter+ *filter,mapping+ *filter,name+FestJilter*-filter,name+ *servlet,name+-Jiltere!Servlet*-servlet,name+ *-filter,mapping+ *servlet+ *servlet,name+Jiltere!Servlet*-servlet,name+ *servlet,class+ com.aptec0.servlet.Jiltere!Servlet *-servlet,class+ *-servlet+ *servlet,mapping+ *servlet,name+Jiltere!Servlet*-servlet,name+ *url,pattern+-Jiltere!Servlet*-url,pattern+ *-servlet,mapping+ *-4e:,app+

Servlet
package com.aptec0.servlet; import import import import java.io..; java.net..; javax.servlet..; javax.servlet.0ttp..;

public class Jiltere!Servlet extends 1ttpServlet protected void !o/et#1ttpServletRequest request& 1ttpServletResponse response$ throws ServletException& IOException response.setContentF"pe#(text-0tml;c0arset'9FJ,@($; PrintWriter out ' response.getWriter#$; out.println#(Zefore6[( 7 request.getParameter#(para1($ 7([*ZR+($; out.println#(Dfter6[( 7 request.getDttri:ute#(att1($ 7([*ZR+($; % %

%",p"se* C< HaiFT

FilterConfig interface
Za" &, cQc p/:Ln& t/Ec: 14 &etpilterFa,e: Tra v+ tUn c`a !ilter A4 &etGnit?ara,eter3Strin&4: tra v+ &iQ tr^ c`a para, t:Ln& En& c`a para@na,e.
*init,param+ *param,name+p1*-param,name+ *param,value+v1*-param,value+ *-init,param+

34 &etGnit?ara,eterFa,es34: tra v+ tsp &iQ tr^ c`a tUn t/a, sH 2/Mi tO" c`a !ilter. 6N li. tra v+ l7 En ,erati"n c`a Strin&. 44 &etServlet%"ntext34: tra v+ t/a, c/iI tBi Servlet%"ntext c`a !ilter.

FilterChain interface
%J t/D se *n& n/i+ /Ln 1 !ilter. V6: A !ilter pilter v7 pilter1 Qp *n& c/" ccn& 1 servlet piltere*Servlet.
*filter,mapping+ *filter,name+Jilter*-filter,name+ *servlet,name+Jiltere!Servlet*-servlet,name+ *-filter,mapping+ *filter,mapping+ *filter,name+Jilter1*-filter,name+ *servlet,name+Jiltere!Servlet*-servlet,name+ *-filter,mapping+

Sec!rit: #on"i$!ration
We .xml
*securit",constraint+ *4e:,resource,collection+ *4e:,resource,name+ Restricte! Drea *-4e:,resource,name+ *url,pattern+-.*-url,pattern+ *-4e:,resource,collection+ *aut0,constraint+ *role,name+manager*-role,name+ *-aut0,constraint+ *-securit",constraint+

%",p"se* C< HaiFT

;<S=# <e# (=l


*login,config+ *aut0,met0o!+ZDSIC*-aut0,met0o!+ *realm,name+9ser Zasic Dut0entication*-realm,name+ *-login,config+

D=GEST
*login,config+ *aut0,met0o!+)I/ESF*-aut0,met0o!+ *-login,config+

8>R%
We .xml
*login,config+ *aut0,met0o!+JOR5*-aut0,met0o!+ *form,login,config+ *form,login,page+-Eogin.jsp*-form,login,page+ *form,error,page+-Error.jsp*-form,error,page+ *-form,login,config+ *-login,config+

!ogin.jsp

,et/"* c`a !"r, p/ai l7 5>ST. GiQ tr^ c`a =%TGkF attriC te p/ai l7 wj?sec!rit:?c+ec.w. p"r, p/ai cJ A textC"x l7 j?!sername v7 j?pass4ord.

*1F5E+ *1ED)+ *FIFEE+Eogin Page*-FIFEE+ *-1ED)+ *ZO)\+ *CE3FER+ *12+ Please enter "our user name an! pass4or! *-12+ *JOR5 DCFIO3'(jYsecurit"Yc0ecG( 5EF1O)'(POSF(+ *FDZEE+

%",p"se* C< HaiFT

*FR+

*F)+ *-F)+ *F)+ 9ser name6 *I3P9F F\PE'FEXF 3D5E'(jYusername(+

*-FR+ *FR+

*-F)+ *F)+ *-F)+ *F)+ Pass4or!6 *I3P9F F\PE'PDSSWOR)

3D5E'(jYpass4or!(+ *-FR+ *FR+

*-F)+ *F)+ *-F)+ *F)+ *-F)+ *-FR+ *-FDZEE+ *-JOR5+ *I3P9F F\PE'S9Z5IF 8DE9E'(Eogin(+

*I3P9F F\PE'RESEF+

*-ZO)\+ *-1F5E+

"rror.jsp
*1F5E+ *FIFEE+Error Page*-FIFEE+ *-1ED)+ *ZO)\+ Eogin faile!. ClicG *D 1REJ'(*]'request.getContextPat0#$]+-Eogin.jsp(+0ere*-D+ to tr" again. *-ZO)\+ *-1F5E+ *1ED)+

SSL (Soc.et Sec!re la:er )


SD c7i VWt SSL tr"n& t",cat COn p/ai t/1c /i.n 3 C:Bc sa : 1. TO" !ile Ke<st"re. A. %; /[n/ T",cat VD se *n& Ke<st"re. 3. %; /[n/ XeC applicati"n VD cJ t/D l7, vi.c vBi SSL.

%",p"se* C< HaiFT

T#o $e%store
Ke<st"re c/Ea cQc c/i tiIt v+ %erti!icates cTn t/iIt VD &ia" t/Ec V:bc Ca" ,st. Se *n& c",,an* Xin*"X v7 t/1c /i.n l.n/: keytool >genkey >alia) &e%'lias >keypa)) cert(ass >key)tore c)*testCertificate >)torepa)) cert(ass *h? @A ph+n in ,-m #n c. th/ tha% ,0i t1% 2 nh3ng 4&e%pass v5 4storepass ph6i c. gi7 tr8 gi9ng nhau

ZOn si p/ai tra lfi ,(t sH ch /i:


C6^)ocuments an! Settings^)D3CO+Ge"tool ,genGe" ,alias Ge"Dlias ,Ge"pass certPas s ,Ge"store c6-testCertificate ,storepass certPass W0at is "our first an! last nameV H9nGno4nI6 1ai 3gu"en F0an0 W0at is t0e name of "our organiUational unitV H9nGno4nI6 0ome W0at is t0e name of "our organiUationV H9nGno4nI6 Dptec0 W0at is t0e name of "our Cit" or Eocalit"V H9nGno4nI6 1anoi W0at is t0e name of "our State or ProvinceV H9nGno4nI6 5etri W0at is t0e t4o,letter countr" co!e for t0is unitV H9nGno4nI6 @> Is C3'1ai 3gu"en F0an0& O9'0ome& O'Dptec0& E'1anoi& SF'5etri& C'@> correctV HnoI6 "es

SWt !ile 2e<st"re v7" t/: ,c XeCapps c`a t",cat

C:u h;nh trong tomcat


MM !ile B*CTCDEFCGHIJKLYc"n!Yserver.x,l v7 t/iIt lsp n/: sa :
*Connector port'(@>>A( maxF0rea!s'(2==( sc0eme'(0ttps( secure'(true( SSEEna:le!'(true( Ge"storeJile'(4e:apps-testCertificate( Ge"storePass'(certPass( clientDut0'(false( sslProtocol'(FES( -+

We .xml
*securit",constraint+ *4e:,resource,collection+ *4e:,resource,name+secure!app*-4e:,resource,name+ *url,pattern+-.*-url,pattern+ *-4e:,resource,collection+ *user,!ata,constraint+ *transport,guarantee+CO3JI)E3FIDE*-transport,guarantee+ *-user,!ata,constraint+ *-securit",constraint+

%",p"se* C< HaiFT

<pplet
Test'pplet.java
i,p"rt java.applet.m i,p"rt java.aXt.m p Clic class Test=pplet exten*s =pplet p Clic v"i* paint3Grap/ics &4 &.*raXStrin&3wuelc",e in >ava =pplet.wg 48g A84m t p Clic int ,<Met/"*3int a4 ret rn 35 a4m t t

Test'pplet.html
*1F5E+ *1ED)+*title+Dpplet In _sp*-title+ *SCRIPF+ function a!!#$ var result ' !ocument.appletsH=I.m"5et0o!#(A($; alert#(F0e sum is ( 7 result$; % *-SCRIPF+ *-1ED)+ *ZO)\+ *DPPEEF CO)E ' (FestDpplet.class( 3D5E ' (FestDpplet( WI)F1 ' 2== 1EI/1F ' W= 1SPDCE ' = 8SPDCE ' = DEI/3 ' mi!!le + *-DPPEEF+ *I3P9F F\PE'Z9FFO3 onClicG'[a!!#$;[ 8DE9E'(Run Dpplet[s 5et0o! (+ *-ZO)\+ *-1F5E+

Min 3Nch Te)tCpplet &a'a thnh te)tapplet cla)) ' a 'o c4ng th- =c 'Oi Te)tCpplet ht=l /*hPn Te)tCpplet &a'a pre)) QR0

'pplet &<t n9i v=i c7c ,9i t3>ng &h7c)


14 =pplet cJ t/D &\i v7 V:bc &\i tR >avascript. A4 =pplet cJ t/D 2It nHi vBi applet 2/Qc se *n& javascript "Cject 3>SkCject4. 34 =pplet cJ t/D liUn /. vBi servlet

%",p"se* C< HaiFT

@S5 A @ava Server 5a$es GiBi t+i*! v( @S5


>sp V:bc se *n& VD tO" XeC V(n& 3*<na,ic XeC4g tr"n& En& *n& XeC Va tTn& 3, lti la<ere* XeC app4g >S? V:bc se *n& l7, tTn& tr[n/ *in. FJ cn& cJ 2/a n|n& t:Ln& tQc vBi tTn& En& *n& 3applicati"n la<er4 v7 tO" ra XeC V(n& *1a trUn C siness l"&ic. K/i >S? V:bc &\i lTn VT g nJ V:bc tr[n/ CiUn *^c/ p/hn t)c/ v7 CiUn *^c/ t/7n/ servlet class. FI CiUn *^c/ t/7n/ c_n&g jsp servlet class n7< si V:bc nOp v7" C( n/B. Tr"n& lTn &\i tiIp t/e"g servlet clas n7< V- M sn tr"n& C( n/Bg t < n/iUn nJ cJ t/D V:bc p*ate. ZMi vs<g tr[n/ CiUn *^c/ si s" sQn/ ti,esta,p c`a jsp servlet vBi jsp. FI jsp ,Bi /Ln t/[ nJ si CiUn *^c/ lOi. V[ vs< COn cJ t/D ca, t/;< ,~i 2/i v7" tran& jsp lTn VT Ca" &if cn& t/;< c/s, /Ln cQc lTn sa . Vn& Vfi c`a >S? 3Li!e circle4 14 Translati"n: >S? V:bc *^c/ t/7n/ >S? servlet vBi 3 p/:Ln& t/Ec: jspGnit34g jspService34 v7 jsp6estr"<34. V6: p-#lic cla)) !i=pleSageG&)p e(ten3) HttpT)pMa)e A4 %",pilati"n: >S? servlet V:bc CiUn *^c/ san& class 34 T/1c t/i cQc p/:Ln& t/Ec init34 v7 service34 v7 c/ <Dn v+ *On& /t,l VD /iDn t/^ lUn Cr"Xser.

Expresssion (9iC! t+Dc)


on3Aq

Scriptlets
o Strin& an yaCczm Gnt i n 8m " t.println3yT/is is scriptlets sa,plez4m q

%",p"se* C< HaiFT

Declarations
6eclarati"ns c/" p/rp COn V^n/ n&/}a cQc ,et/"* v7 CiIn ,7 COn cJ t/D se *n& M C;t cE Vh tr"n& tran& jsp.
*]<page import'(java.util.Calen!ar(]+ *]` String getS"stemFime#$ return Calen!ar.getInstance#$.getFime#$.toString#$; % ]+ *] ]+ out.println#(Current Fime6 ( 7 getS"stemFime#$$;

#omments
Server si*e: o@@ @@q %lient si*e: o@@ @@q

Directives
6irectives l7 c/d *n tBi >S? c"ntainer c/Ea t/_n& tin c/d *n >S? c"ntainer p/ai CiUn *^c/ >S? t/7n/ servlet t:Ln& En&.
<ttri9!te lan& a&e in!" exten*s i,p"rt C !!er a t"pl s/ sessi"n err"r?a&e isErr"r?a&e Strin& %lass na,e p ll< q ali!ie* class na,e "r pac2a&e na,e Z !!er sie "r !alse Z""lean Z""lean {RL Z""lean EiC! $iF trG Scriptin& lan& a&e na,e wjavaw 6epen*s "n t/e >S? c"ntainer wtextY/t,lmc/arsetnGSk@''55@1w F"ne F"ne '15A wtr ew wtr ew wtr ew F"ne w!alsew GiF trG mHc IGn+

c"ntentT<pe MGME t<peg c/aracter set

isT/rea*Sa!e Z""lean

8)6 errorPage

%",p"se* C< HaiFT

Sh< l7 tran& XeC p/Qt sin/ l~i. K/i p/Qt sin/ l~i si &\i VIn tran& err"r?a&e.jsp 3*irective c`a tran& n7< p/ai VWt l7 isErr"r?a&e n tr e4
*]< page errorPage'(errorPage.jsp( ]+ *] ]+ int i ' 1=; i ' i - =;

Tran& /iDn t/^ l~i err"r?a&e.jsp


*]< page isErrorPage'(true(]+ *0tml+ *0ea!+ *title+Error Page*-title+ *-0ea!+ *:o!"+ *:+Exception6*-:+ *:r+ *]'exception.toString#$]+ *-:o!"+ </html>

autoFlush Attribute
a t"pl s/ liUn q an VUn pa&e C !!er. K/i &iQ tr^ V:bc VWt l7 tr eg >S? c"ntainer si t1 V(n& !l s/ C !!er 2/i C !!er VT<. FI !alseg cJ t/D si cJ excepti"n t/r"X ra nI C !!er C^ tr7n 3"ver!l"X4. Ta cJ t/D !l s/ C !!er ,an all< q a vi.c se *n& ,et/"* c`a >spuriterg V6:
out.flus0#$;

V6g V"On c"*e sa set a t"pl s/ attriC te CPn& !alse:


*]< page autoJlus0'(false( ]+

Session Attribute

FI VWt &iQ tr^ l7 tr e t/[ sessi"n "Cject si tr tBi sessi"n /i.n tOi /"Wc tO" ,Bi. F&:bc lOi si 2" cJ sessi"n n7" V:bc V^n/ n&/}a /"Wc tO" ,Bi. 6" VJ i,plicit "Cject c/" sessi"n 2" sn s7n& VD se *n&.
*]< page session'(false(]+

<ction
jsp:!se;ean

%",p"se* C< HaiFT

SD tO" 1 instance c/" java Cean VD cJ t/D se *n& tr"n& jsp: V6: ?ava@ean
package com.aptec0.:ean; public class Calc private int a; private int :; public int a!!#$ return getD#$7getZ#$; % public int getD#$ return a; % public void setD#int a$ this.a ' a; % public int getZ#$ return :; % public void setZ#int :$ this.: ' :; % %

jsp)
*jsp6useZean i!'(calc( class'(com.aptec0.:ean.Calc( scope'(request( -+

jsp)set(ropert%
GQn &iQ tr^ c/" t/ (c t)n/ c`a java Cean
*jsp6setPropert" name'(calc( propert"'(a( value'(>(-+ *jsp6setPropert" name'(calc( propert"'(:( value'(2(-+

jsp)get(ropert%
HiDn t/^ &iQ tr^ t/ (c t)n/ c`a java Cean
ojsp:&et?r"pert< na,enwcalcw pr"pert<nwCwYq oncalc.a**34q o@ c/" 2It q a n #@@q

jsp:param

%",p"se* C< HaiFT

e, p/Tn jsp:!"rXar*

jsp:incl!de
6cn& VD n/ln& n(i * n& c`a 1 tran& 2/Qc v7" tran& /i.n t/fi. V6:
*jsp6inclu!e page'(-success.jsp(-+

jsp:"or4ard
!"rXar* VIn tran& 2/Qcg cJ t/D tr <+n t/a, sH se *n& t/v jsp:para,
*jsp6for4ar! page'(-success.jsp(+ *jsp6param name'(a( value'(a:c(-+ *-jsp6for4ar!+

TO" s ccess.jsp vBi n(i * n& n/: sa :


Parameter a ' *]'request.getParameter#(a($]+

jsp:pl!$in
jsp:pl &in acti"n V:bc *cn& VD tO" ra t/D HTML okZ>E%Tq /"Wc oEMZE6q c/Ea cQc c; trlc t:Ln& En& VD c/d V^n/ tr[n/ * <.t *"Xl"a* p/Tn ,+, >ava pl &in 3nI cTn4g v7 2/Mi tO" >ava applet /"Wc cQc t/7n/ p/Tn javaCean V:bc c/d V^n/.
*jsp6plugin t"pe'(applet( co!e'(ClocG.class( co!e:ase'(0ttp6--local0ost6@=@=-0ome-applets( jreversion'(1.>.1(+ *jsp6params+ *jsp6param name'(scripta:le( value'(false( -+ *-jsp6params+ *jsp6fall:acG+Sorr"& 4e are una:le to start t0e _ava plugin-+ *-jsp6fall:acG+ *-jsp6plugin+

jsp:params
L7 t/v c"n nP, tr"n& jsp:pl &in

jsp:"all9ac.

%",p"se* C< HaiFT

L7 t/v c"n nP, tr"n& jsp:pl &in *cn& VD t/_n& CQ" l~i nI 2/_n& t/D 2/Mi tO" V:bc pl &in.

@S5 EL Expressions
EL 9 Expressi"n lan& a&e 3CiD t/Ec4

Disa9le EL
M Hn v_ /i. /Ja EL tr"n& >S? ta se *n& *irectives n/: sa :
*]<page isEEIgnore!'(true( ]+

kr c"n!i& re in XeC.x,l
*jsp,config+ *jsp,propert",group+ *url,pattern+..jsp*-url,pattern+ *el,ignore!+false*-el,ignore!+ *-jsp,propert",group+ *-jsp,config+

Tr!: cJp @ava;ean


Se *n& >avaZean tr"n& v) * v+ jsp: seZean 3%alc.java4
*jsp6useZean i!'(calc( class'(com.aptec0.:ean.Calc( scope'(request( -+ a calc.a% *`b,0iPn t0N Gct qud lR giM trN cKa propert" a,,+

HiCn t+G attri9!te


AB Ci/n th8 attri ute
*]request.setDttri:ute#(:(& (a:c($;]+ a :% *`b,0iPn t0N giM trN cKa attri:ute :,,+

DB Ci/n th8 collection


*] StringHI first3ames ' (Zill(& (Scott(& (Earr"( %; request.setDttri:ute#(first(& first3ames$; ]+

%",p"se* C< HaiFT

*9E+ *EI+a firstH=I% *EI+a firstH1I% *EI+a firstH2I% *-9E+

SK dn$ implicit o9ject


*:+ Session I)6*-:+ a pageContext.session.i!% *:r-+ *:+1ea!er accept6*-:+ a 0ea!er.Dccept% *:r -+ or *:r -+ a 0ea!erH(Dccept(I% *:r-+ *:+0ea!er accept,enco!ing6*-:+ a 0ea!erH(Dccept,Enco!ing(I%

SK dn$ cFc EL operator (toFn tK EL )


'rithmetic Eperators Fto7n tG s9 hHcB
g 9g g Y3*iv4g 3,"*4

Relational Eperators FTo7n tG quan hIB


nn 3 eq4g n 3ne4g o 3lt4g q 3&t4g on 3le4g qn 3&e4

!ogical Eperators Fto7n tG logicB


3an*4g 3"r4g 3n"t4

The empt% Eperator Fto7n tG empt%B


FI VHi t:bn& cJ &iQ tr^ l7 n ll t/[ tra v+ tr e v7 n&:bc lOi. %l p/Qp: a
empty x%

@i/u thJc ,iKu &iIn Fconditionall% expressionB


test expressi"n1 : expressi"nA t V6:
a 1''2 V (aaa( 6 (:::(%

@STL A @ava Server 5a$es Standard Ta$ Li9rar:


#Fc t+/n+ p+Ln v/ c+Dc nMn$ cNa:

%",p"se* C< HaiFT

Lteration FvMng lNpB v5 conditional F,iKu &iInB) Gterati"n v7 c"n*iti"nal l"&ic V:bc *cn& p/] CiIn CMi >S?m t <n n/iUng c/d ,(t sH p/:Ln& t/Ec tiU c/ n c`a l"Oi n7< V:bc t/1c /i.n CPn& cQc t/7n/ p/Tn script. S_i 2/i ta 2/_n& , Hn se *n& cQc t/7n/ p/Tng V[ vs< c st", ta&s V:bc tO" ra n/: 1 s1 t/a< t/I. >STL c n& c;p tsp cQc t/v c st", ta& c/" lWp v7 Vi+ 2i.n l"&ic. "xpression !anguage FngOn ngP i/u thJcB) 1 tr"n& cQc t/ (c t)n/ V:bc V+ csp n/i+ c`a >STL l7 >S? EL V:bc /~ trb. QR! manipulation: >S? /~ trb r;t &iBi /On v+ xe l RL. %Qc t7i n& <Un CUn n&"7i 1 En& *n& >S? 2/_n& t/D V:bc !"rXar* /"Wc incl *e se *n& cQc >S? acti"n tiU c/ ng >S? cn& 2/_n& c n& c;p cQc p/:Ln& t/Ec c/0c c/0n rPn& {RL V:bc ,- /Ja Vln& vBi cQc para,eter v7 t/_n& tin v+ sessi"n. >STL &iai q <It t;t ca cQc v;n V+ n7< vBi cQc t/D xe l {RL. CR tr> LASN Fqu9c t< h.aB) /~ trb Gnternati"naliati"n l7 ,(t n/i., v 2/J v7 >S? 2/_n& V:a ra cQc /~ trb ,Wc V^n/ c/" nJ. %Qc &iai p/Qp p/] CiIn n/Qt /~ trb cQc v;n V+ G1'F t/_n& q a >S? V:bc c/ n /Ja CMi tsp t/v c st", ta& c`a >STL TU! manipulation: ML V:bc se *n& r(n& r-i tr"n& javag v[ vs< >STL c n& c;p tsp cQc c st", ta& V:bc t/iIt 2I riUn& VD xe l ML. Tru% c-p Data ase) 6ataCases l7 ,(t &iai p/Qp tiU c/ n VD l: cQc *N li. p/Ec tOp tr"n& cQc tran& XeC V(n&. >STL V:a ra tsp cQc t/v SjL c/" p/rp tr < v;n %S6L.

TOi sao 9On nPn sK dn$ @STL


>STL 2/Q ,Bi n/:n& cQc c/Ec n|n& ,7 nJ t/a< t/I 2/_n& ,Bi. M\i t/E ,7 >STL c n& c;p cJ t/D V:bc t/1c /i.n v7 t/:fn& x <Un V:bc t/1c /i.n vBi cQc c st", ta& c`a 1 !ra,eX"r2 n7" VJ /"Wc >S? c"ntainer. L7 v_ n&/}a VD &ia C( rPn& >STL l _n l _n V:bc se *n& VD c/Hn& lOi cQc &iai p/Qp tr:Bc. >STL l7 ,(t tiU c/ ng v[ nJ V:bc xh< *1n& c/ n& CMi cQc t/7n/ viUn c`a c(n& Vn& >S? v7 nJ ,an& lOi ,(t s1 C] x n& tHt v7 /N *n& vBi n/i+ /7, /N )c/. >STL c n& c;p cQc t/7n/ p/Tn c/ n& cL Can VD xh< *1n& ,(t *1 Qn ,7 cQc *evel"per 2" cTn p/ai xh< *1n& lOi. M(t l *" lBn 2/Qc l7 CPn& vi.c se *n& >STL COn cJ t/D 2/_n& cTn CiIt n/i+ v+ java /"Wc COn 2/_n& ,;< q an th, VIn 2iIn trlc MV% liUn q an VI vi.c se *n& servletg !ilterg javaCean v7 >S?.

#/i IHt @STL


%"p< A .jar !ile v7" t/ ,c liC:

%",p"se* C< HaiFT

1$ 2$

stan!ar!.jar jstl.jar

#ore ta$s
VeneralW(urpose Tags
%Qc t/v n7< ccn& vBi EL V:bc se *n& c/" cQc tQc v VLn &ian t/_n& t/:fn&. Tsp t/v n7< Ca" &,: outg setg removeg an* catc0 acti"ns.

Xc)outY
T/v " t t/1c /i.n >STL expressi"n 3CiD t/Ec4 v7 VQn/ &iQ 2It q ag &ei 2It q a tBi VHi t:bn& >spuriter /i.n /7n/. T/v n7< /N *n& n/: 1 s1 t/a< t/I c`a &et?r"pert< acti"n. Tr"n& tr:fn& /bp >avaZean 2/_n& /i.n /N /"Wc *evel"per 2/_n& , Hn se *n& Ceang " t acti"n V:a ra cQc c/Ec n|n& t:Ln& V:Ln&. T < n/iUng tr"n& jsp A.8 se *n& " t l7 2/_n& t/)c/ /bp v[ COn cJ t/D VLn &ian V:a ,(t CiD t/Ec t:Ln& V:Ln& tr1c tiIp v7" tran& v7 cJ /i. En& t:Ln& t1.

out action c. attri utes) 1. value: &iQ tr^ c`a value attriC te l7 CiD t/Ec VD VQn/ &iQ. KIt q a c`a CiD t/Ec V:bc &ei tBi client se *n& VHi t:bn& >spuriter c`a tran& /i.n /7n/. GiQ tr^ c`a t/ (c t)n/ value cJ t/D V:bc c/d V^n/ llc c/O< 3r nti,e4. A. escapeTml: c/d ra rPn& nI 2It q a c/ ~i /iDn t/^ V:bc c/ <Dn san& *On& ,- l.n/ VHi vBi cQc 1 sH 2 t1 VWc Ci.t nI &iQ tr^ l7 !alse. GiQ tr^ ,Wc V^n/ l7 true. GiQ tr^ c`a escapeXml cJ t/D V:bc c/d V^n/ 2/i Van& c/O< 3r nti,e4. V6: oc:" t val enwltmg $tmg a,pmg 835mg 834mtw escape,lnw!alsewYq Tra v+ 2It q a l7: og qg g g w oc:" t val enwltmg $tmg a,pmg 835mg 834mtw Yq Tra v+ 2It q a l7: ltmg &tmg a,pmg 835mg 834m

%",p"se* C< HaiFT

3. default: V^n/ n&/}a &iQ tr^ ,Wc V^n/ V:bc se *n& 2/i CiD t/Ec 2/_n& c/O< /"Wc 2It q a l7 n ll. Xc)setY Set acti"n t:Ln& t1 vBi set?r"pert< acti"n. T/v n7< V0c *n& v^ nJ VQn/ &iQ CiD t/Ec v7 se *n& 2It q a c`a javaZean /"Wc 1 VHi t:bn& java. til.Map. set acti"n cJ cQc t/ (c t)n/ sa :
1. A. 3.

val e: l7 &iQ tr^ &Qn. T/ (c n7< cJ t/D l7 CiD t/Ec r nti,e. var: l7 tUn c`a tUn V:bc set &iQ tr^. sc"pe: l7 p/O, v^ c`a CiIn pageg requestg sessiong v7 applicationg pa&e l7 &iQ tr^ ,Wc V^n/. tar&et: L7 tUn c`a VHi t:bn& cJ t/ (c t)n/ V:bc set &iQ. T/:fn& l7 >avaZean "Cject vBi p/:Ln& t/Ec setter t:Ln& En& /"Wc a java.util.5ap "Cject. GiQ tr^ n7< cJ t/D l7 &iQ tr^ r nti,e. pr"pert<: l7 tUn c`a t/ (c t)n/ c`a VHi t:bn& V:bc c/d V^n/ CMi target attriC te. T/ (c t)n/ n7< cJ t/D l7 &iQ tr^ r nti,e.

4.

5.

V6:
*] ]+ *c6set var '(name( value'(5ic0ael_s( propert"'(username( target'(user(-+ *c6out value'(a name%( !efault'(xxx(-+ com.aptec0.:ean.9ser user ' new com.aptec0.:ean.9ser#$;

Xc)removeY
Se *n& VD xJa CiIn. %:re,"ve cJ A attriC te:

sc"pe: V^n/ n&/}a p/O, vi t[, 2iI, CiIn VD xJa. FI 2/_n& V:bc c/d V^n/ t/[ CiIn C^ xJa CMi p/:Ln& t/Ec PageContext removeDttri:ute#var3ame$. FI V:bc c/d V^n/ t/[ p/:Ln& t/Ec V:bc &\i l7 PageContext removeDttri:ute#var3ame& scope.

%",p"se* C< HaiFT

var: tUn CiIn VD re,"ve.

V6:
*c6set var '(a( value'(a:c( scope'(session(-+ *c6set var '(:( value'(x"U( scope'(session(-+ *c6out value'(a a%( !efault'(xxx(-+ *c6remove var'(a( scope'(session(-+ a after removing6*c6out value'(a a%(-+ *c6remove var'(:( scope'(request(-+ : after removing6 *c6out value'(a :%(-+

Xc)catchY

Lteration FvMng lNpB


<forEach>

!"rEac/ ta& /~ trb cQc 2iD *N li. &a'a -til *ollectiong &a'a -til Eteratorg &a'a -til Kn-=erationg /"Wc &a'a -til Jap. !"rEac/ ta& cJ cQc t/ (c t)n/ sa :

var: tUn c`a VHi t:bn& VWt ra VD se *n& tr"n& vn& lWp 3tc< 4. ite,s: VHi t:bn& V:bc c/d V^n/ VD lWp 3Gterat"rg En ,erati"n /"Wc Map4. GiQ tr^ cJ t/D l7 r nti,e. varStat s: tUn CiIn l: trOn& t/Qi c`a vn& lWp. SHi t:bn& cJ 2iD javax.servlet.jsp.jstl.EoopFagStatus. Ce&in: c/d V^n/ p/Tn te VT tiUn V:bc * <.t. en*: ?/Tn te c Hi V:bc * <.t. step: C:Bc * <.t.

V6:
*]< page import'(java.util..( ]+ *] Eist list ' new Drra"Eist#$; list.a!!#(a($; list.a!!#(:($; list.a!!#(c($; request.setDttri:ute#(set(& list.iterator#$$;

%",p"se* C< HaiFT

]+ *c6forEac0 var'(item( :egin'(=( items'(a set%(+ F0e value is *c6out value'(a item%( -+ *-c6forEac0+

XforTo&ensY T:Ln& t1 !"rEac/ n/:n& p/Tn te tsp /bp *" lsp tr[n/ viUn t1 V^n/ n&/}a tr"n& t/v ite,sg p/hn tQc/ CMi 2 t1 V:bc V^n/ n&/}a tr"n& t/v *e,i,s. %Qc t/ (c t)n/ 2/Qc t:Ln& t1. V6:
*c6forFoGens var'(item( !elims'(e( items'(toGen1etoGen2etoGenA(+ F0e value is *c6out value'(a item%( -+ </c:forTokens>

Conditionals FcZu lInh ,iKu &iInB


<c:if>

test: CiD t/Ec Vi+ 2i.n var: tUn CiIn l: &iQ tr^ c`a CiD t/Ec tr"n& test. ZiIn n7< l7 CiIn sc"pe cJ t/D se *n& sa n7< sc"pe: l7 p/O, v^ c`a CiIn V:bc V^n/ n&/}a tr"n& var

V6:
*] request.setDttri:ute#("(& (a:c($; ]+ *c6if test'(a "''[a:c[%( var'(a(+ Welcome *-c6if+ *:r -+,,+ *c6out value'(a a%( -+.

<choose>, <when>, v <otherwise>


*c6c0oose+ *c640en test'(a " '' [aa:c[%(+ " '' [aa:c[ *-c640en+ *c6ot0er4ise+ " `' [aa:c[ *-c6ot0er4ise+ *-c6c0oose+

%",p"se* C< HaiFT

QR! Uanipulation
<c:import> and <c:param>
T/e import ta& /as t/e !"ll"Xin& attriC tes:

rl: GiQ tr^ c`a {RL i,p"rt v7" Ca" &, ca t <.t VHi v7 t:Ln& VHi. GiQ tr^ cJ t/D c/d V^n/ r nti,e. c"ntext: T/e context attriC te can Ce se* t" pr"vi*e t/e na,e "! a c"ntext X/en accessin& a relative {RL res" rce t/at Cel"n&s t" a !"rei&n c"ntext. T/e val e ,a< Ce speci!ie* C< a r nti,e val e. = !"rei&n c"ntext is an"t/er ueC =pplicati"n t/at is exec tin& "n t/e sa,e ueC server. T/is val e s/" l* Ce se* i! t/e {RL is relative t" t/at na,e* !"rei&n c"ntext. F"te t/at t/is is t/e eq ivalent "! a req est *ispatc/ acr"ss ueC =pplicati"n C" n*aries an* ,a< n"t X"r2 "n partic lar c"ntainers * e t" sec rit< "r "t/er restricti"ns. var: T/e var attriC te can Ce se* t" na,e a sc"pe* variaCle t" c"ntain t/e res" rces c"ntent. T/e t<pe "! t/e variaCle is Strin&. sc"pe: T/e scope attriC te *e!ines t/e sc"pe "! a variaCle na,e* C< t/e var attriC te. Vali* val es are pageg requestg sessiong an* application. c/arEnc"*in&: T/e c0arEnco!ing attriC te can Ce se* t" speci!< t/e c/aracter enc"*in& "! t/e c"ntent at t/e inp t res" rce. Z< *e!a lt it is ass ,e* t/e stan*ar*g ISO,@@W?,1g enc"*in& is se*. varRea*er: T/e varRea!er attriC te is availaCle t" create a Rea!er "Cject !"r se C< c"ntent in t/e i,p"rt ta&s C"*<. T/e val e "! t/e varRea!er attriC te is t/e na,e "! t/e sc"pe* variaClem t/e t<pe "! t/e variaCle is java.io.Rea!er.
*c6import url'(-jstl.jsp( var'(value( -+ *c6out value'(a value%( -+

V6:

c)param L7 t/v c"n c`a c:i,p"rt vBi na,e l7 tUn para,eterg val e l7 &iQ tr^. c)url L7 p/:Ln& t/Ec V:a ra VD t1 V(n& ,- /Ja {RL vBi cQc t/_n& tin v+ sessi"n v7 para,eters. TQc *n& t:Ln& V:Ln& vBi p/:Ln& t/Ec 1ttpServletResponse enco!e9RE#$. V6:
*a 0ref'[*]' response.enco!e9RE#(-in!ex.jsp($]+[+ZooG Site*-a+

%",p"se* C< HaiFT

1ofc *c6url value'(-in!ex.jsp( var'(u( -+ *a 0ref'(a u%(+ZooG Site*-a+ url

ta& cJ cQc t/ (c t)n/ sa :


val e: T/e value attriC te is se* t" pr"vi*e t/e {RL t" Ce pr"cesse*. c"ntext: T/e context attriC te *e!ines t/e na,e "! t/e c"ntext X/en speci!<in& a relative {RL res" rce "! a !"rei&n c"ntext. var: T/e var attriC te can Ce se* t" exp"rt t/e reXritten {RL t" a sc"pe* variaCle. T/e val e "! t/e var variaCle is t/e pr"cesse* {RL. T/e t<pe "! t/e variaCle is Strin&. T/e variaCles sc"pe *epen*s "n t/e scope attriC te. sc"pe: T/e scope attriC te *eter,ines t/e sc"pe "! t/e "Cject na,e* C< t/e var attriC te. Vali* val es are pageg requestg sessiong an* application.

Xc)redirectY T:Ln& V:Ln& 1ttpServletResponse V6: oc:re*irect rlnwYjstl.jspwYq


sen!Re!irect#$

SQL ta$ Li9rar:


*sql6set)ataSource !river'(com.microsoft.sqlserver.j!:c.SgEServer)river( url'(j!:c6sqlserver6--local0ost^^0ai61>>A;!ata:ase3ame'test;( user'(sa( pass4or!'(....( var'(conn( -+ *sql6quer" var'(users( !ataSource'(a conn%(+ SEEECF . JRO5 H9SERI *-sql6quer"+ *ta:le :or!er'(1(+ *tr+ *c6forEac0 var'(col3ame( items'(a users.column3ames%(+ *t0+ *c6out value'(a col3ame%( -+ *-t0+ *-c6forEac0+ *-tr+ *c6forEac0 items'(a users.ro4sZ"In!ex%( var'(ro4(+ *tr+ *c6forEac0 var'(col( items'(a ro4%(+ *t!+ *c6out value'(a col%( -+ *-t!+ *-c6forEac0+ *-tr+ *-c6forEac0+

%",p"se* C< HaiFT

*-ta:le+

=RST 0 =nternationalisation ( !Uc tV +Wa)


14 T/a< V]i n&_n n&N t/e" 2/ v1c 3l"cale4 ,7 2/_n& cTn t/a< V]i n/i+ tr"n& c_n& n&/.. A4 L"caliati"n: &ilp tO" ra En& *n& Va n&_n n&Ng V^n/ *On& ti+n t. 3c rrenc<4g n&7< t/Qn& 3*ate@ti,e4 t/e" 2/ v1c V^a l 3&e"&rap/ic re&i"n4. Se *n& java. til.L"cale. 34 {nic"*e: l7 Can& ,- c/Ea cQc 2 t1 v7 cQc CiD t:bn& c`a t;t ca cQc n:Bc c/)n/ trUn t/I &iBi. 44 Res" rce C n*le: l7 .pr"perties !ile c/Ea *N li. *On& 2e< v7 val e t/D /iDn Va n&_n n&N. S^n/ *On& xx vBi xx l7 A c/N viIt t0t c`a n&_n n&N 3c/N t/:fn&m l7 A c/N viIt t0t c/" tUn q Hc &ia 3c/N /"a4. V6 Messa&eZ n*leen{S.pr"perties l7 !ile c; /[n/ c/" tiIn& an/ M. Messa&eZ n*le2"KR c/" Se l H7n j Hc. Messa&eZ n*le.pr"perties Messa&eZ n*le!r.pr"perties

Xp dn$ =RST tron$ @S5:


V6: 1 test.jsp
*]< tagli: uri'(0ttp6--java.sun.com-jstl-fmt( prefix'(fmt(]+ *fmt6:un!le :asename'(com.aptec0.conf.5essageZun!le(+ *0tml+ *0ea!+ *title+*fmt6message Ge"'(title(-+*-title+ *-0ea!+ *:o!"+ *fmt6message Ge"'(4elcome(-+ *-:o!"+ *-0tml+ *-fmt6:un!le+ MessageBundle.properties

%",p"se* C< HaiFT

title'Welcome` 4elcome'Welcome to t0e I1@3 resource :un!le sample.

V6A:
*]< page import'(java.util..& com.aptec0.:ean.Welcome(]+ *] Eocale locale ' Eocale.JRD3CE;--request.getEocale#$; ResourceZun!le r: ' ResourceZun!le.getZun!le#(com.aptec0.conf.5essageZun!le(& locale$; Welcome 4elcome ' new Welcome#$; 4elcome.setFitle#r:.getString#(title($$; 4elcome.setWelcome#r:.getString#(4elcome($$; request.setDttri:ute#(content(& 4elcome$; ]+ *]< tagli: uri'(0ttp6--java.sun.com-jstl-core( prefix'(c( ]+ *0tml+ *0ea!+ *title+a content.title%*-title+ *-0ea!+ *:o!"+ a content.4elcome% *-:o!"+ *-0tml+

Welcome.java
package com.aptec0.:ean; public class Welcome protected String title ' null; protected String 4elcome ' null;

@@@@@t/U, cQc p/:Ln& t/Ec &et v7 set v7"


%

T/a< V]i L"cale tR *e!a lt san& L"cale.pR=F%E si t/;< 2It q a /iDn t/^ t/a< V]i.

Xp dn$ =RST tron$ Servlet:


protected void !o/et#1ttpServletRequest request& 1ttpServletResponse response$ throws ServletException& IOException ResourceZun!le :un!le ' ResourceZun!le.getZun!le# (com.aptec0.conf.5essageZun!le(& Eocale.CORED3$; Enumeration Ge"s ' :un!le.getCe"s#$; PrintWriter out ' response.getWriter#$; while #Ge"s.0as5oreElements#$$ String Ge" ' #String$ Ge"s.nextElement#$; out.println#(Ge"6( 7 Ge"$;%%

Reso!rce;!ndle class

%",p"se* C< HaiFT

get@undleFB)
TO" VHi t:bn& C n*le vBi vcn& V^a l n7" VJ 3l"cale4: V6: ResourceZun!le
:un!le ' ResourceZun!le.getZun!le#(com.aptec0.conf.5essageZun!le(& Eocale.CORED3$;

get$e%sFB
Tra v+ tsp cQc 2e< tr"n& .pr"perties t/e" 2iD En ,erati"n
8)6 Enumeration Ge"s ' :un!le.getCe"s#$;

get!ocaleFB
Tra v+ VHi t:bn& l"cale C n*le &etkCject32e<4 T/a, sH l7 tUn 2e< tr"n& .pr"perties !ile. KIt q a tra v+ l7 val e c`a 2e< t:Ln& En&. FI 2e< 2/_n& tn tOi si t/r"X excepti"n:
java.util.5issingResourceException

getStringF&e%B
Tra v+ val e t:Ln& En& vBi t/a, sH 2e< tr"n& .pr"perties !ile.

Date 8ormattin$ (YGn+ dOn$ n$/: t+Fn$)


)ate to!a" ' new )ate#$; )ateJormat !f ' )ateJormat.get)ateInstance#)ateJormat.)EJD9EF& Eocale.JRE3C1$; )ateJormat !f1 ' )ateJormat.get)ateInstance#)ateJormat.)EJD9EF& Eocale.E3/EIS1$; PrintWriter out ' response.getWriter#$; out.println#!f.format#to!a"$$; out.println#!f1.format#to!a"$$; Simple)ateJormat sf ' new Simple)ateJormat#(""",55,!!(& Eocale.JRE3C1$; out.println#sf.format#to!a"$$;

#!rencies 8ormattin$ (IGn+ dOn$ ti(n t*):


Currenc% Class
getLnstanceF!ocaleB L;< instance 3VHi t:bn&4 2iD % rrenc< t/e" l"cale V:bc c/d V^n/.

%",p"se* C< HaiFT

8)6 Currenc" cr ' Currenc".getInstance#Eocale.9S$;

getCurrenc%CodeFB) tra v+ ,- ti+n t. t/e" l"cale V6:


out.println#(Currenc" co!e6( 7 cr.getCurrenc"Co!e#$$;--Gct qud trd vh lR 9S)

getS%m olFB) Tra v+ CiD t:bn& ti+n t. t/e" l"cale. V6: out.println#(Currenc"
s"m:ol$6( 7 cr.getS"m:ol#$$;--Gct qud trd vh lR a

Num erFormat Class)


formatFdou leB)
3um:erJormat nf ' 3um:erJormat.getPercentInstance#Eocale.JRD3CE$; out.println#(nf6( 7 nf.format#=.W1$$;

getLnstanceFB) Tra v+ VHi t:bn& F ,Cerp"r,at vBi l"cale ,Wc V^n/ getCurrenc%FB) Tra v+ VHi t:bn& 2iD % rrenc< .
Currenc" cr ' 3um:erJormat.getInstance#$.getCurrenc"#$; out.println#(CR s"m:ol6( 7 cr.getS"m:ol#$$;

parseFStringB) %/ <Dn tR c/ ~i t/7n/ sH


3um:erJormat nf ' 3um:erJormat.getInstance#$; out.println#(nf6( 7 nf.parse#(1.???.???&=1($$;--1iPn t0N Gct qud 1.???

setCurrenc%FCurrenc%B)
Currenc" c ' Currenc".getInstance#Eocale._DPD3$; nf.setCurrenc"#c$; out.println#(nf6( 7 nf.getCurrenc"#$.getCurrenc"Co!e#$$;

UessageFormat
String string ' (1ello =%& it is 1&!ate% an! "ou 0ave 2& num:er& currenc"% in "our pocGet.(; O:jectHI o:jects ' (foo(& new )ate#$& new Integer#1=$%; String result ' 5essageJormat.format#string& o:jects$;

%",p"se* C< HaiFT

@S5 c!stom ta$s


Ta$ li9rar: descriptor
Sh< l7 ,(t !ile ML ,_ ta cQc c st", ta&s tr"n& En& *n& >S?. FJ V^n/ n&/}a 1 c st", ta& v7 V:bc l: vBi p/Tn ,M r(n& .tl*.

Ta$ +andler
Sh< l7 ,(t !ile java VLn &ian c/Ea c"*e c/" cQc c/Ec n|n& c`a c st", ta&. %J A l"Oi classic v7 simple.

#Fc t+!Jt n$Z !an tr[n$ liPn !an


Classic Custom Tag
S:bc V^n/ n&/}a CMi classic ta& /an*ler class.

Simple Custom Tag


S:bc V^n/ n&/}a CMi si,ple ta& /an*ler class.

@asic tags
Zasic ta& t/_n& t/:fn& 2/_n& c/Ea C;t cE C"*< n7". KD ca 2/i nJ c/Ea C"*<g p/Tn C"*< cn& 2" V:bc xe l CMi ta& n7<. Ta& /an*ler class c`a Casic ta& i,ple,ents tR Ta& inter!ace v7 exten*s Ta&S pp"rt class.

Lteration tags
%Qc t/v n7< t/:fn& l7 cQc t/v r~n&. Ta& /an*ler c/" iterati"n ta& i,ple,ents Gterati"nTa& inter!ace. Gnter!ace n7< exten*s tR Ta& inter!ace.

Complex tags
%Qc t/v n7< /~ trb C"*<. T/v n7< i,ple,ents tR Z"*<Ta& v7 exten*s Z"*<Ta& S pp"rt class.

@asper \

%",p"se* C< HaiFT

>S? en&ine l7 1 t/7n/ p/Tn c`a XeC c"ntainer t/1c /i.n c/ <Dn tR >S? san& servlet c"*e. >asper en&ine l7 tUn c`a >S? en&ine tr"n& t",cat 4. Tr"n& t",cat5g nJ cJ tUn l7 >asper A. FJ l7 s1 triDn 2/ai c`a VWc ta S n Micr"s<ste,s >S?A.8.

T]n$ 91Bc tOo R c!stom ta$: TOo ta$ li9rar: descriptor (.tld "ile).
TL6 l7 ,(t x,l !ile V^n/ n&/}a t/: vi.n t/v v7 cQc t/v. 6n& VT tiUn l7 x,l /ea*er c/ n:
*Vxml version'(1.=( enco!ing'(ISO,@@W?,1( V+ *`)OCF\PE tagli: P9ZEIC (,--Sun 5icros"stems& Inc.--)F) _SP Fag Ei:rar" 1.1--E3( (0ttp6--java.sun.com-j2ee-!t!s-4e:,jsptagli:rar"Y1Y1.!t!(+

TL6 !ile c/Ea t/v &Hc ota&liC. T/v n7< cJ cQc t/v c"n sa :

tliCversi"n jspversi"n s/"rtna,e in!" ri ta&

14 tliCversi"n c/d V^n/ versi"n c`a t/: vi.n t/v cJ V^n/ *On& sa : 38@54 3w.w 8@54 3w.w 8@54 3w.w 8@54 A4 T/e jspversi"n c/d V^n/ >S? versi"n. S^n/ *On& &iHn& vBi tliCversi"n: 38@54 3w.w 8@54 3w.w 8@54 3w.w 8@54 34 s/"rtna,e c/d V^n/ s/"rtna,e c`a t/ vi.n ta& liCrar<. GiQ tr^ n7< p/ai C0t VT CPn& c/N v7 2/_n& c/Ea 2/"an& tr0n&. 44 in!" c/Ea t/_n& tin c/" ,c V)c/ l7, t7i li. . 6N li. ,Wc V^n/ l7 r~n&. 54 ri c/d V^n/ lin2 tr VIn t/: vi.n t/v.

%",p"se* C< HaiFT

#4 ta& l7 t/7n/ p/Tn q an tr\n& n/;t c`a ta& liCrar<. ZOn cJ t/D c/d V^n/ /Ln 1 t/v ta&.

VDR #lassic c!stom ta$ 4it+o!t 9od:


*Vxml version'(1.=( enco!ing'(ISO,@@W?,1( V+ *`)OCF\PE tagli: P9ZEIC (,--Sun 5icros"stems& Inc.--)F) _SP Fag Ei:rar" 1.1--E3( (0ttp6--java.sun.com-j2ee-!t!s-4e:,jsptagli:rar"Y1Y1.!t!(+ *tagli:+ *tli:version+1.=.12A.12A.2A>*-tli:version+ *jspversion+1.2*-jspversion+ *s0ortname+*-s0ortname+ *info+Example tags*-info+ *uri+*-uri+ *tag+ *name+m"Fag*-name+ *tagclass+com.aptec0.customtag.1elloFag*-tagclass+ *attri:ute+ *name+name*-name+ *require!+true*-require!+ *-attri:ute+ *-tag+ *-tagli:+

E+ai 9Fo tron$ 4e9.xml


*jsp,config+ *tagli:+ *tagli:,uri+-0ello*-tagli:,uri+ *tagli:,location+-WEZ,I3J-tl!s-0ello.tl!*-tagli:,location+ *-tagli:+ *-jsp,config+

TOo Ta$ Handler


package com.aptec0.customtag; import javax.servlet.jsp..; import javax.servlet.jsp.tagext..; public class 1elloFag extends FagSupport private String name; public int !oEn!Fag#$ throws _spException _spWriter out ' pageContext.getOut#$; try out.println#(*0r-+($; % catch #Exception e$ % return super.!oEn!Fag#$;

%",p"se* C< HaiFT

% -.. . @return t0e name .public String get3ame#$ return name; % -.. . @param name t0e name to set .public void set3ame#String name$ this.name ' name; % public int !oStartFag#$ try _spWriter out ' pageContext.getOut#$; out.println#(*0r-+($; out.println#(1ello ( 7 name$; % catch #Exception ex$ throw new Error#(Dll is not 4ell in t0e 4orl!.($; % return SKIP_BODY; % %

^K l_ ta$ tron$ @S5


*]< tagli: uri'(-WEZ,I3J-tl!s-0ello.tl!( prefix'(0ello( ]+ *0tml+ *0ea!+ *title+\our Stan!ar! 1ello Worl! )emo*-title+ *-0ea!+ *:o!" :gcolor'(iffffff(+ *0ello6m"Fag name'(1ai(-+ *-:o!"+ *-0tml+

VD\ classic c!stom ta$ 4it+ 9od:


Tag handler ClassicTagDemo.java
package com.aptec0.tag0an!ler; import import import import import import java.io.IOException; java.util.logging.Eevel; java.util.logging.Eogger; javax.servlet.0ttp..; javax.servlet.jsp..; javax.servlet.jsp.tagext..;

public class ClassicFag)emo extends Zo!"FagSupport

%",p"se* C< HaiFT

--F0ese private private private private

varia:le represent t0e custom tag[s attri:utes String 0ea!ing ' null; String image ' null; String 4i!t0 ' null; String 0eig0t ' null;

public int !oStartFag#$ throws _spException _spWriter out ' pageContext.getOut#$; try int 0 ' Integer.parseInt#0ea!ing$; if #`#0 + = jj 0 * B$$ out.println#(*font color'[re![+F0e [0ea!ing[ value must :et4een 1 an! k inclusive.*-font+($; % % catch #Exception e$ throw new _spException#e.get5essage#$$; % % return E8DEYZO)\YZ9JJERE);

public int !oEn!Fag#$ throws _spException _spWriter out ' pageContext.getOut#$; String img)ir ' ##1ttpServletRequest$ pageContext.getRequest#$$.getContextPat0#$ 7 (-img-(; String message ' (*font color'[iJJ====[+( 7 getZo!"Content#$.getString#$.trim#$ 7 (*-font+(; try out.println#(*img src'^(( 7 img)ir 7 image 7 (^( 4i!t0'^(( 7 4i!t0 7 (^( 0eig0t'^(( 7 0eig0t 7 (^( align'^(left^(+( 7 (*1( 7 0ea!ing 7 (+( 7 message 7 (*-1( 7 0ea!ing 7 (+($; % catch #IOException ex$ Eogger.getLogger#ClassicFag)emo.class.get3ame#$$.log#Eevel.SEVERE& null& ex$; % return E8DEYPD/E; % public void set1ea!ing#String level$ this.0ea!ing ' level; % public void setImage#String name$ this.image ' name; % public void setWi!t0#String 4i!t0$ this.4i!t0 ' 4i!t0; % public void set1eig0t#String 0eig0t$ this.0eig0t ' 0eig0t; %

%",p"se* C< HaiFT

--t0e _SP container ma" cac0e an! reuse tag 0an!ler o:jects. --t0is met0o! releases instance varia:les so t0at t0e tag 0an!ler --can :e reuse! afres0 public void release#$ 0ea!ing ' null; image ' null; 4i!t0 ' null; 0eig0t ' null; %

Tag descriptor
*Vxml version'(1.=( enco!ing'(ISO,@@W?,1( V+ *`)OCF\PE tagli: P9ZEIC (,--Sun 5icros"stems& Inc.--)F) _SP Fag Ei:rar" 1.2--E3( (0ttp6--java.sun.com-!t!-4e:,jsptagli:rar"Y1Y2.!t!(+ *tagli:+ *tli:,version+1.=*-tli:,version+ *jsp,version+1.2*-jsp,version+ *s0ort,name+clsFag)emo*-s0ort,name+ *`,, 1ere is t0e 9RI "ou use 4it0 t0e [tagli:[ !irective in t0e _SP ,,+ *uri+-aptec0-Classic !emo...*-uri+ *!escription+Dptec0 !emo classic tag*-!escription+ *tag+ *name+logo*-name+ *`,, maGe sure to use t0e full" qualife! class name ,,+ *tag,class+com.aptec0.tag0an!ler.ClassicFag)emo*-tag,class+ *:o!",content+_SP*-:o!",content+ *!escription+F0is tag 4rites a logo insi!e t0e _SP.*-!escription+ *attri:ute+ *name+0ea!ing*-name+ *`,, F0e logo tag requires t0is attri:ute ,,+ *require!+true*-require!+ *`,, F0e attri:ute can taGe a _SP expression as a value ,,+ *rtexprvalue+true*-rtexprvalue+ *!escription+F0e 0ea!ing level for t0e logo; 1 t0roug0 k. *-!escription+ *-attri:ute+ *attri:ute+ *name+image*-name+ *require!+true*-require!+ *rtexprvalue+true*-rtexprvalue+ *!escription+F0e image name for t0e logo.*-!escription+ *-attri:ute+ *attri:ute+

%",p"se* C< HaiFT

*name+4i!t0*-name+ *require!+true*-require!+ *rtexprvalue+true*-rtexprvalue+ *!escription+F0e image 4i!t0 for t0e logo.*-!escription+ *-attri:ute+ *attri:ute+ *name+0eig0t*-name+ *require!+true*-require!+ *rtexprvalue+true*-rtexprvalue+ *!escription+F0e image 0eig0t for t0e logo.*-!escription+ *-attri:ute+ *-tag+ *-tagli:+

We .xml declaration
*jsp,config+ *tagli:+ *tagli:,uri+-aptec0-Classic !emo...*-tagli:,uri+ *tagli:,location+-WEZ,I3J-tl!s-Classic)emo.tl!*-tagli:,location+ *-tagli:+ *-jsp,config+

Qse tag in ?S(


*]< tagli: uri'(-aptec0-Classic !emo...( prefix'(clsFag)emo(]+ *] --If require!' false ,+ error for image attri:ute String img3ame ' (islan!Y0ula.gif(; ]+ *clsFag)emo6logo 0ea!ing'(k( image'(*]'img3ame]+( 4i!t0'(AAW( 0eig0t'(1W=(+ Come 0ere come 0ere& :a:e` *-clsFag)emo6logo+

Simple Ta$
Descriptor
*tagli: xmlns'(0ttp6--java.sun.com-xml-ns-j2ee( xmlns6xsi'(0ttp6--444.4A.org-2==1-X5ESc0ema,instance( xsi6sc0emaEocation'(0ttp6--java.sun.com-xml-ns-j2ee 0ttp6--java.sun.com-xml-ns-j2ee-4e:,jsptagli:rar"Y2Y=.xs!( version'(2.=(+ *tli:,version+1.=*-tli:,version+ *jsp,version+2.=*-jsp,version+ *s0ort,name+Example FE)*-s0ort,name+ *uri+-aptec0-simple-!emo...*-uri+ *tag+ *name+!ate*-name+ *tag,class+com.aptec0.tag0an!ler.SimpleFag)emo*-tag,class+ *:o!",content+empt"*-:o!",content+

%",p"se* C< HaiFT

*attri:ute+ *name+format*-name+ *-attri:ute+ *-tag+ *tag+ *name+!"namicDttri:ute*-name+ *tag,class+com.aptec0.tag0an!ler.)"namicDttri:uteFag*-tag,class+ *:o!",content+empt"*-:o!",content+ *!"namic,attri:utes+true*-!"namic,attri:utes+ *-tag+ *tag+ *name+:o!"*-name+ *tag,class+com.aptec0.tag0an!ler.Zo!"SimpleFag*-tag,class+ *:o!",content+scriptlet*-:o!",content+ *-tag+ *-tagli:+

Tag Candler
@od%SimpleTag
pacGage com.aptec0.tag0an!ler; import import import import import java.io.IOException; java.text.Simple)ateJormat; java.util.)ate; javax.servlet.jsp..; javax.servlet.jsp.tagext..;

pu:lic class Zo!"SimpleFag exten!s SimpleFagSupport pu:lic voi! !oFag#$ t0ro4s _spException& IOException PageContext context ' #PageContext$ get_spContext#$; _spWriter out ' context.getOut#$; out.4rite#(0ello($; % %

D%namic'ttri uteTag
pacGage com.aptec0.tag0an!ler; import import import import javax.servlet.jsp.tagext..; javax.servlet.jsp..; java.util..; java.io.IOException;

pu:lic class )"namicDttri:uteFag exten!s SimpleFagSupport implements )"namicDttri:utes protecte! 1as0ta:le map ' ne4 1as0ta:le#$; pu:lic voi! set)"namicDttri:ute#String uri& String name& O:ject value$ t0ro4s _spException

%",p"se* C< HaiFT

map.put#name& value$;

pu:lic voi! !oFag#$ t0ro4s _spException& IOException _spWriter out ' get_spContext#$.getOut#$; for #Enumeration Ge"s ' map.Ge"s#$; Ge"s.0as5oreElements#$;$ O:ject Ge" ' Ge"s.nextElement#$; O:ject value ' map.get#Ge"$; out.print#(*:+Dttri:ute6*-:+*:r+($; out.print#(name6 ( 7 Ge".toString#$ 7 (*:r+($; out.print#(value6 ( 7 value.toString#$ 7 (*:r+($; % % %

SimpleTagDemo
pacGage com.aptec0.tag0an!ler; import import import import import java.io.IOException; java.text.Simple)ateJormat; java.util.)ate; javax.servlet.jsp..; javax.servlet.jsp.tagext..;

pu:lic class SimpleFag)emo exten!s SimpleFagSupport private String format; pu:lic voi! setJormat#String format$ t0is.format ' format; % pu:lic voi! !oFag#$ t0ro4s _spException& IOException _spWriter out ' get_spContext#$.getOut#$; if #format `' null$ Simple)ateJormat s!f ' ne4 Simple)ateJormat#format$; out.println#s!f.format#ne4 )ate#$$$; % else out.println#ne4 )ate#$.toString#$$; % % %

We .xml
*tagli:+ *tagli:,uri+-aptec0-Simple !emo...*-tagli:,uri+ *tagli:,location+-WEZ,I3J-tl!s-Simple)emo.tl!*-tagli:,location+ *-tagli:+

?S(

%",p"se* C< HaiFT

F0e current !ate is *simple6!ate format'(!!-55-""( -+. *0r+ *simple6!"namicDttri:ute name'(test( value'(a value(-+ *0r+ *simple6:o!"-+

3sin$ Ta$ "ile


caps.tag
*]<tag :o!",content'(scriptless(]+ *jsp6!oZo!" var ' (t0eZo!"( scope'(session(-+ *]String :c ' #String$ session.getDttri:ute#(t0eZo!"($;]+ *]':c.to9pperCase#$]+

heading.tag
*]<attri:ute *]<attri:ute *]<attri:ute *]<attri:ute *tr+ *t!+a *t!+a *t!+a *t!+a *-tr+ 0ea!ing1%*-t!+ 0ea!ing2%*-t!+ 0ea!ingA%*-t!+ 0ea!ing>%*-t!+ name'(0ea!ing1(]+ name'(0ea!ing2(]+ name'(0ea!ingA(]+ name'(0ea!ing>(]+

column.tag
*]<attri:ute *]<attri:ute *]<attri:ute *]<attri:ute *tr+ *t!+a *t!+a *t!+a *t!+a *-tr+ name'(col1(]+ name'(col2(]+ name'(colA(]+ name'(col>(]+

col1%*-t!+ col2%*-t!+ colA%*-t!+ col>%*-t!+

?S(
*tags6caps+ *01+F0is is tags !emo*-01+*-tags6caps+ *ta:le :or!er'(1(+ *tags60ea!ing 0ea!ing1 '(1( 0ea!ing2 '(2( 0ea!ingA '(A( 0ea!ing> '(>(-+ *tags6column col1 '(v11( col2 '(v12( colA '(v1A( col> '(v1>(-+ *tags6column col1 '(v21( col2 '(v22( colA '(v2A( col> '(v2>(-+ *-ta:le+

%",p"se* C< HaiFT

5+ lc
#Fc p+1`n$ t+Dc cNa Servlet
voi! destroy#$

%alle* C< t/e servlet c"ntainer t" in*icate t" a servlet t/at t/e servlet is Cein& ta2en " t "! service.
ServletConfig get ervlet!onfig#$

Ret rns a ServletConfig "Cjectg X/ic/ c"ntains initialiati"n an* start p para,eters !"r t/is servlet.
java.lang.String get ervlet"nfo#$

Ret rns in!"r,ati"n aC" t t/e servletg s c/ as a t/"rg versi"ng an* c"p<ri&/t.
voi! init#ServletConfig config$

%alle* C< t/e servlet c"ntainer t" in*icate t" a servlet t/at t/e servlet is Cein& place* int" service.
voi! service#ServletRequest req& ServletResponse res$

%alle* C< t/e servlet c"ntainer t" all"X t/e servlet t" resp"n* t" a req est.

#Fc p+1`ng thDc cNa ServletRe !est inter"ace:


java.lang.O:ject get#ttribute#java.lang.String name$

Ret rns t/e val e "! t/e na,e* attriC te as an O:jectg "r null i! n" attriC te "! t/e &iven na,e exists.
java.util.Enumeration get#ttribute$ames#$

Ret rns an Enumeration c"ntainin& t/e na,es "! t/e

%",p"se* C< HaiFT

attriC tes availaCle t" t/is req est.


java.lang.String get!haracter%ncoding#$

Ret rns t/e na,e "! t/e c/aracter enc"*in& se* in t/e C"*< "! t/is req est.
int get!ontent&ength#$

Ret rns t/e len&t/g in C<tesg "! t/e req est C"*< an* ,a*e availaCle C< t/e inp t strea,g "r @1 i! t/e len&t/ is n"t 2n"Xn.
java.lang.String get!ontentType#$

Ret rns t/e MGME t<pe "! t/e C"*< "! t/e req estg "r null i! t/e t<pe is n"t 2n"Xn.
ServletInputStream get"nput tream#$

Retrieves t/e C"*< "! t/e req est as Cinar< *ata sin& a ServletInputStream.
java.util.Eocale get&ocale#$

Ret rns t/e pre!erre* Eocale t/at t/e client Xill accept c"ntent ing Case* "n t/e =ccept@Lan& a&e /ea*er.
java.util.Enumeration get&ocales#$

Ret rns an Enumeration "! Eocale "Cjects in*icatin&g in *ecreasin& "r*er startin& Xit/ t/e pre!erre* l"caleg t/e l"cales t/at are acceptaCle t" t/e client Case* "n t/e =ccept@Lan& a&e /ea*er.
java.lang.String getParameter#java.lang.String name$

Ret rns t/e val e "! a req est para,eter as a Stringg "r null i! t/e para,eter *"es n"t exist.
java.util.Enumeration getParameter$ames#$

Ret rns an Enumeration "! String "Cjects c"ntainin& t/e na,es "! t/e para,eters c"ntaine* in t/is req est.
java.lang.StringHI getParameter'alues#java.lang.String name$

%",p"se* C< HaiFT

Ret rns an arra< "! String "Cjects c"ntainin& all "! t/e val es t/e &iven req est para,eter /asg "r null i! t/e para,eter *"es n"t exist.
java.lang.String getProtocol#$

Ret rns t/e na,e an* versi"n "! t/e pr"t"c"l t/e req est ses in t/e !"r, protocol:=a&orUer)ion =inorUer)iong !"r exa,pleg HTT?Y1.1.
java.io.Zuffere!Rea!er get(eader#$

Retrieves t/e C"*< "! t/e req est as c/aracter *ata sin& a Zuffere!Rea!er.
java.lang.String get(ealPath#java.lang.String pat0$

Deprecated. C) of Uer)ion % V of the Ta'a !er'let CSEW -)e ServletContext getRealPat!"#ava lang Str$ng% in)tea3
java.lang.String get(emote#ddr#$

Ret rns t/e Gnternet ?r"t"c"l 3G?4 a**ress "! t/e client t/at sent t/e req est.
java.lang.String get(emote)ost#$

Ret rns t/e ! ll< q ali!ie* na,e "! t/e client t/at sent t/e req estg "r t/e G? a**ress "! t/e client i! t/e na,e cann"t Ce *eter,ine*.
Request)ispatc0er get(e*uest+ispatcher#java.lang.String pat0$

Ret rns a Request)ispatc0er "Cject t/at acts as a Xrapper !"r t/e res" rce l"cate* at t/e &iven pat/.
java.lang.String get cheme#$

Ret rns t/e na,e "! t/e sc/e,e se* t" ,a2e t/is req estg !"r exa,pleg 0ttpg 0ttpsg "r ftp.
java.lang.String get erver$ame#$

%",p"se* C< HaiFT

Ret rns t/e /"st na,e "! t/e server t/at receive* t/e req est.
int get erverPort#$

Ret rns t/e p"rt n ,Cer "n X/ic/ t/is req est Xas receive*.
:oolean is ecure#$

Ret rns a C""lean in*icatin& X/et/er t/is req est Xas ,a*e sin& a sec re c/annelg s c/ as HTT?S.
voi! remove#ttribute#java.lang.String name$

Re,"ves an attriC te !r", t/is req est.


voi! set#ttribute#java.lang.String name& java.lang.O:ject o$

St"res an attriC te in t/is req est.

#Fc p+1`ng thDc cNa ServletResponse inter"ace:


voi! flush,uffer#$

p"rces an< c"ntent in t/e C !!er t" Ce Xritten t" t/e client.
int get,uffer i-e#$

Ret rns t/e act al C !!er sie se* !"r t/e resp"nse.
java.lang.String get!haracter%ncoding#$

Ret rns t/e na,e "! t/e c/arset se* !"r t/e MGME C"*< sent in t/is resp"nse.
java.util.Eocale get&ocale#$

Ret rns t/e l"cale assi&ne* t" t/e resp"nse.


ServletOutputStream get.utput tream#$

Ret rns a ServletOutputStream s itaCle !"r Xritin&

%",p"se* C< HaiFT

Cinar< *ata in t/e resp"nse.


java.io.PrintWriter get/riter#$

Ret rns a PrintWriter "Cject t/at can sen* c/aracter text t" t/e client.
:oolean is!ommitted#$

Ret rns a C""lean in*icatin& i! t/e resp"nse /as Ceen c",,itte*.


voi! reset#$

%lears an< *ata t/at exists in t/e C !!er as Xell as t/e stat s c"*e an* /ea*ers.
voi! set,uffer i-e#int siUe$

Sets t/e pre!erre* C !!er sie !"r t/e C"*< "! t/e resp"nse.
voi! set!ontent&ength#int len$

Sets t/e len&t/ "! t/e c"ntent C"*< in t/e resp"nse Gn HTT? servletsg t/is ,et/"* sets t/e HTT? %"ntent@Len&t/ /ea*er.
voi! set!ontentType#java.lang.String t"pe$

Sets t/e c"ntent t<pe "! t/e resp"nse Cein& sent t" t/e client.
voi! set&ocale#java.util.Eocale loc$

Sets t/e l"cale "! t/e resp"nseg settin& t/e /ea*ers 3incl *in& t/e %"ntent@T<pes c/arset4 as appr"priate.

#Fc p+1`n$ t+Dc cNa HttpRe !est inter"ace


java.lang.String get#uthType#$

Ret rns t/e na,e "! t/e a t/enticati"n sc/e,e

%",p"se* C< HaiFT

se* t" pr"tect t/e servletg !"r exa,pleg wZ=SG%w "r wSSLgw "r null i! t/e servlet Xas n"t pr"tecte*.
java.lang.String get!ontextPath#$

Ret rns t/e p"rti"n "! t/e req est {RG t/at in*icates t/e c"ntext "! t/e req est.
CooGieHI get!ookies#$

Ret rns an arra< c"ntainin& all "! t/e CooGie "Cjects t/e client sent Xit/ t/is req est.
long get+ate)eader#java.lang.String name$

Ret rns t/e val e "! t/e speci!ie* req est /ea*er as a long val e t/at represents a )ate "Cject.
java.lang.String get)eader#java.lang.String name$

Ret rns t/e val e "! t/e speci!ie* req est /ea*er as a String.
java.util.Enumeration get)eader$ames#$

Ret rns an en ,erati"n "! all t/e /ea*er na,es t/is req est c"ntains.
java.util.Enumeration get)eaders#java.lang.String name$

Ret rns all t/e val es "! t/e speci!ie* req est /ea*er as an Enumeration "! String "Cjects.
int get"nt)eader#java.lang.String name$

Ret rns t/e val e "! t/e speci!ie* req est /ea*er as an int.
java.lang.String get0ethod#$

Ret rns t/e na,e "! t/e HTT? ,et/"* Xit/ X/ic/ t/is req est Xas ,a*eg !"r exa,pleg GETg ?kSTg "r ?{T.
java.lang.String getPath"nfo#$

Ret rns an< extra pat/ in!"r,ati"n ass"ciate*

%",p"se* C< HaiFT

Xit/ t/e {RL t/e client sent X/en it ,a*e t/is req est.
java.lang.String getPathTranslated#$

Ret rns an< extra pat/ in!"r,ati"n a!ter t/e servlet na,e C t Ce!"re t/e q er< strin&g an* translates it t" a real pat/.
java.lang.String get1uery tring#$

Ret rns t/e q er< strin& t/at is c"ntaine* in t/e req est {RL a!ter t/e pat/.
java.lang.String get(emote2ser#$

Ret rns t/e l"&in "! t/e ser ,a2in& t/is req estg i! t/e ser /as Ceen a t/enticate*g "r null i! t/e ser /as n"t Ceen a t/enticate*.
java.lang.String get(e*uested ession"d#$

Ret rns t/e sessi"n G6 speci!ie* C< t/e client.


java.lang.String get(e*uest2("#$

Ret rns t/e part "! t/is req ests {RL !r", t/e pr"t"c"l na,e p t" t/e q er< strin& in t/e !irst line "! t/e HTT? req est.
java.lang.String get ervletPath#$

Ret rns t/e part "! t/is req ests {RL t/at calls t/e servlet.
1ttpSession get ession#$

Ret rns t/e c rrent sessi"n ass"ciate* Xit/ t/is req estg "r i! t/e req est *"es n"t /ave a sessi"ng creates "ne.
1ttpSession get ession#:oolean create$

Ret rns t/e c rrent 1ttpSession ass"ciate* Xit/ t/is req est "rg i! i! t/ere is n" c rrent sessi"n an* create is tr eg ret rns a neX sessi"n.

%",p"se* C< HaiFT

java.securit".Principal get2serPrincipal#$

Ret rns a java.securit".Principal "Cject c"ntainin& t/e na,e "! t/e c rrent a t/enticate* ser.
:oolean is(e*uested ession"d3rom!ookie#$

%/ec2s X/et/er t/e req este* sessi"n G6 ca,e in as a c""2ie.


:oolean is(e*uested ession"d3rom2rl#$

Deprecated. C) of Uer)ion % V of the Ta'a !er'let CSEW -)e $sRe&ueste'Sess$onI'(ro)*RL"% in)tea3


:oolean is(e*uested ession"d3rom2(&#$

%/ec2s X/et/er t/e req este* sessi"n G6 ca,e in as part "! t/e req est {RL.
:oolean is(e*uested ession"d'alid#$

%/ec2s X/et/er t/e req este* sessi"n G6 is still vali*.


:oolean is2ser"n(ole#java.lang.String role$

Ret rns a C""lean in*icatin& X/et/er t/e a t/enticate* ser is incl *e* in t/e speci!ie* l"&ical wr"lew.

#Fc +an$ sU cNa HttpServletResponse


static int !4#!!%PT%+

Stat s c"*e 3A8A4 in*icatin& t/at a req est Xas accepte* !"r pr"cessin&g C t Xas n"t c",plete*.
static int !4,#+45#T%/#6

Stat s c"*e 358A4 in*icatin& t/at t/e HTT? server receive* an invali* resp"nse !r", a server it c"ns lte* X/en actin& as a pr"x< "r

%",p"se* C< HaiFT

&ateXa<.
static int !4,#+4(%12% T

Stat s c"*e 34884 in*icatin& t/e req est sent C< t/e client Xas s<ntacticall< inc"rrect.
static int !4!.$3&"!T

Stat s c"*e 34854 in*icatin& t/at t/e req est c" l* n"t Ce c",plete* * e t" a c"n!lict Xit/ t/e c rrent state "! t/e res" rce.
static int !4!.$T"$2%

Stat s c"*e 31884 in*icatin& t/e client can c"ntin e.


static int !4!(%#T%+

Stat s c"*e 3A814 in*icatin& t/e req est s ccee*e* an* create* a neX res" rce "n t/e server.
static int !4%7P%!T#T".$43#"&%+

Stat s c"*e 341$4 in*icatin& t/at t/e server c" l* n"t ,eet t/e expectati"n &iven in t/e Expect req est /ea*er.
static int !43.(,"++%$

Stat s c"*e 34834 in*icatin& t/e server n*erst""* t/e req est C t re! se* t" ! l!ill it.
static int !45#T%/#64T"0%.2T

Stat s c"*e 35844 in*icatin& t/at t/e server *i* n"t receive a ti,el< resp"nse !r", t/e pstrea, server X/ile actin& as a &ateXa< "r pr"x<.
static int !45.$%

Stat s c"*e 34184 in*icatin& t/at t/e res" rce is n" l"n&er availaCle at t/e server an* n" !"rXar*in& a**ress is 2n"Xn.
static int !4)TTP4'%( ".$4$.T4 2PP.(T%+

Stat s c"*e 35854 in*icatin& t/at t/e server *"es n"t s pp"rt "r re! ses t" s pp"rt t/e HTT? pr"t"c"l versi"n t/at Xas se* in t/e req est ,essa&e.

%",p"se* C< HaiFT

static int

!4"$T%($#&4 %('%(4%((.(

Stat s c"*e 35884 in*icatin& an err"r insi*e t/e HTT? server X/ic/ prevente* it !r", ! l!illin& t/e req est.
static int !4&%$5T)4(%12"(%+

Stat s c"*e 34114 in*icatin& t/at t/e req est cann"t Ce /an*le* Xit/" t a *e!ine* Content+Lengt!.
static int !40%T).+4$.T4#&&./%+

Stat s c"*e 34854 in*icatin& t/at t/e ,et/"* speci!ie* in t/e Re&uest+L$ne is n"t all"Xe* !"r t/e res" rce i*enti!ie* C< t/e Re&uest+ *RI.
static int !40.'%+4P%(0#$%$T&6

Stat s c"*e 33814 in*icatin& t/at t/e res" rce /as per,anentl< ,"ve* t" a neX l"cati"ng an* t/at ! t re re!erences s/" l* se a neX {RG Xit/ t/eir req ests.
static int !40.'%+4T%0P.(#("&6

Stat s c"*e 338A4 in*icatin& t/at t/e res" rce /as te,p"raril< ,"ve* t" an"t/er l"cati"ng C t t/at ! t re re!erences s/" l* still se t/e "ri&inal {RG t" access t/e res" rce.
static int !402&T"P&%4!)."!%

Stat s c"*e 33884 in*icatin& t/at t/e req este* res" rce c"rresp"n*s t" an< "ne "! a set "! representati"nsg eac/ Xit/ its "Xn speci!ic l"cati"n.
static int !4$.4!.$T%$T

Stat s c"*e 3A844 in*icatin& t/at t/e req est s ccee*e* C t t/at t/ere Xas n" neX in!"r,ati"n t" ret rn.
static int !4$.$4#2T).("T#T"'%4"$3.(0#T".$

Stat s c"*e 3A834 in*icatin& t/at t/e ,eta in!"r,ati"n presente* C< t/e client *i* n"t "ri&inate !r", t/e server.
static int !4$.T4#!!%PT#,&%

Stat s c"*e 348#4 in*icatin& t/at t/e res" rce i*enti!ie* C< t/e

%",p"se* C< HaiFT

req est is "nl< capaCle "! &eneratin& resp"nse entities X/ic/ /ave c"ntent c/aracteristics n"t acceptaCle acc"r*in& t" t/e accept /ea*erssent in t/e req est.
static int !4$.T43.2$+

Stat s c"*e 34844 in*icatin& t/at t/e req este* res" rce is n"t availaCle.
static int !4$.T4"0P&%0%$T%+

Stat s c"*e 35814 in*icatin& t/e HTT? server *"es n"t s pp"rt t/e ! ncti"nalit< nee*e* t" ! l!ill t/e req est.
static int !4$.T40.+"3"%+

Stat s c"*e 33844 in*icatin& t/at a c"n*iti"nal GET "perati"n !" n* t/at t/e res" rce Xas availaCle an* n"t ,"*i!ie*.
static int !4.8

Stat s c"*e 3A884 in*icatin& t/e req est s ccee*e* n"r,all<.


static int !4P#(T"#&4!.$T%$T

Stat s c"*e 3A8#4 in*icatin& t/at t/e server /as ! l!ille* t/e partial GET req est !"r t/e res" rce.
static int !4P#60%$T4(%12"(%+

Stat s c"*e 348A4 reserve* !"r ! t re se.


static int !4P(%!.$+"T".$43#"&%+

Stat s c"*e 341A4 in*icatin& t/at t/e prec"n*iti"n &iven in "ne "r ,"re "! t/e req est@/ea*er !iel*s eval ate* t" !alse X/en it Xas teste* "n t/e server.
static int !4P(.764#2T)%$T"!#T".$4(%12"(%+

Stat s c"*e 348$4 in*icatin& t/at t/e client JX!T !irst a t/enticate itsel! Xit/ t/e pr"x<.
static int !4(%12% T4%$T"T64T..4&#(5%

Stat s c"*e 34134 in*icatin& t/at t/e server is re! sin& t" pr"cess t/e req est Ceca se t/e req est entit< is lar&er t/an t/e server is Xillin&

%",p"se* C< HaiFT

"r aCle t" pr"cess.


static int !4(%12% T4T"0%.2T

Stat s c"*e 348'4 in*icatin& t/at t/e client *i* n"t pr"* ce a req estXit/in t/e ti,e t/at t/e server Xas prepare* t" Xait.
static int !4(%12% T42("4T..4&.$5

Stat s c"*e 34144 in*icatin& t/at t/e server is re! sin& t" service t/e req est Ceca se t/e Re&uest+*RI is l"n&er t/an t/e server is Xillin& t" interpret.
static int !4(%12% T%+4(#$5%4$.T4 #T" 3"#,&%

Stat s c"*e 341#4 in*icatin& t/at t/e server cann"t serve t/e req este* C<te ran&e.
static int !4(% %T4!.$T%$T

Stat s c"*e 3A854 in*icatin& t/at t/e a&ent !HIXD. reset t/e *"c ,ent vieX X/ic/ ca se* t/e req est t" Ce sent.
static int !4 %%4.T)%(

Stat s c"*e 33834 in*icatin& t/at t/e resp"nse t" t/e req est can Ce !" n* n*er a *i!!erent {RG.
static int !4 %('"!%42$#'#"&#,&%

Stat s c"*e 35834 in*icatin& t/at t/e HTT? server is te,p"raril< "verl"a*e*g an* naCle t" /an*le t/e req est.
static int !4 /"T!)"$54P(.T.!.&

Stat s c"*e 31814 in*icatin& t/e server is sXitc/in& pr"t"c"ls acc"r*in& t" {p&ra*e /ea*er.
static int !42$#2T).("9%+

Stat s c"*e 34814 in*icatin& t/at t/e req est req ires HTT? a t/enticati"n.
static int !42$ 2PP.(T%+40%+"#4T6P%

Stat s c"*e 34154 in*icatin& t/at t/e server is re! sin& t" service t/e req est Ceca se t/e entit< "! t/e req est is in a !"r,at n"t s pp"rte*

%",p"se* C< HaiFT

C< t/e req este* res" rce !"r t/e req este* ,et/"*.
static int !42 %4P(.76

Stat s c"*e 33854 in*icatin& t/at t/e req este* res" rce JX!T Ce accesse* t/r" &/ t/e pr"x< &iven C< t/e Lo,at$on !iel*.

#Fc p+1`n$ t+Dc cNa HttpServletResponse


voi! add!ookie#CooGie cooGie$

=**s t/e speci!ie* c""2ie t" t/e resp"nse.


voi! add+ate)eader#java.lang.String name& long !ate$

=**s a resp"nse /ea*er Xit/ t/e &iven na,e an* *ate@ val e.
voi! add)eader#java.lang.String name& java.lang.String value$

=**s a resp"nse /ea*er Xit/ t/e &iven na,e an* val e.


voi! add"nt)eader#java.lang.String name& int value$

=**s a resp"nse /ea*er Xit/ t/e &iven na,e an* inte&er val e.
:oolean contains)eader#java.lang.String name$

Ret rns a C""lean in*icatin& X/et/er t/e na,e* resp"nse /ea*er /as alrea*< Ceen set.
java.lang.String encode(edirect2rl#java.lang.String url$

Deprecated. C) of 'er)ion % VW -)e enco3e+e3irectX+D/!tring -rl0 in)tea3


java.lang.String encode(edirect2(&#java.lang.String url$

Enc"*es t/e speci!ie* {RL !"r se in t/e sen!Re!irect ,et/"* "rg i! enc"*in& is n"t nee*e*g ret rns t/e {RL nc/an&e*.
java.lang.String encode2rl#java.lang.String url$

%",p"se* C< HaiFT

Deprecated. C) of 'er)ion % VW -)e enco3eX+D/!tring -rl0 in)tea3


java.lang.String encode2(&#java.lang.String url$

Enc"*es t/e speci!ie* {RL C< incl *in& t/e sessi"n G6 in itg "rg i! enc"*in& is n"t nee*e*g ret rns t/e {RL nc/an&e*.
voi! send%rror#int sc$

Sen*s an err"r resp"nse t" t/e client sin& t/e speci!ie* stat s.
voi! send%rror#int sc& java.lang.String msg$

Sen*s an err"r resp"nse t" t/e client sin& t/e speci!ie* stat s c"*e an* *escriptive ,essa&e.
voi! send(edirect#java.lang.String location$

Sen*s a te,p"rar< re*irect resp"nse t" t/e client sin& t/e speci!ie* re*irect l"cati"n {RL.
voi! set+ate)eader#java.lang.String name& long !ate$

Sets a resp"nse /ea*er Xit/ t/e &iven na,e an* *ate@ val e.
voi! set)eader#java.lang.String name& java.lang.String value$

Sets a resp"nse /ea*er Xit/ t/e &iven na,e an* val e.


voi! set"nt)eader#java.lang.String name& int value$

Sets a resp"nse /ea*er Xit/ t/e &iven na,e an* inte&er val e.
voi! set tatus#int sc$

Sets t/e stat s c"*e !"r t/is resp"nse.


voi! set tatus#int sc& java.lang.String sm$

Deprecated. C) of 'er)ion % VW 3-e to a=#ig-o-) =eaning of the =e))age para=eter To )et a )tat-) co3e -)e setStatus"$nt%W to )en3 an error Yith a 3e)cription -)e sen'Error"$nt-.Str$ng% !et) the )tat-) co3e an3 =e))age for

%",p"se* C< HaiFT

thi) re)pon)e

#Fc p+1`n$ t+Dc cNa Servlet#on"i$


java.lang.String get"nitParameter#java.lang.String name$

Ret rns a String c"ntainin& t/e val e "! t/e na,e* initialiati"n para,eterg "r null i! t/e para,eter *"es n"t exist.
java.util.Enumeration get"nitParameter$ames#$

Ret rns t/e na,es "! t/e servlets initialiati"n para,eters as an Enumeration "! String "Cjectsg "r an e,pt< Enumeration i! t/e servlet /as n" initialiati"n para,eters.
ServletContext get ervlet!ontext#$

Ret rns a re!erence t" t/e ServletContext in X/ic/ t/e servlet is exec tin&.
java.lang.String get ervlet$ame#$

Ret rns t/e na,e "! t/is servlet instance.

#Fc p+1`n$ t+Dc cNa Servlet #ontext


java.lang.O:ject get#ttribute#java.lang.String name$

Ret rns t/e servlet c"ntainer attriC te Xit/ t/e &iven na,eg "r null i! t/ere is n" attriC te C< t/at na,e.
java.util.Enumeration get#ttribute$ames#$

Ret rns an Enumeration c"ntainin& t/e attriC te na,es availaCle Xit/in t/is servlet c"ntext.

%",p"se* C< HaiFT

ServletContext get!ontext#java.lang.String uripat0$

Ret rns a ServletContext "Cject t/at c"rresp"n*s t" a speci!ie* {RL "n t/e server.
java.lang.String get"nitParameter#java.lang.String name$

Ret rns a String c"ntainin& t/e val e "! t/e na,e* c"ntext@Xi*e initialiati"n para,eterg "r null i! t/e para,eter *"es n"t exist.
java.util.Enumeration get"nitParameter$ames#$

Ret rns t/e na,es "! t/e c"ntexts initialiati"n para,eters as an Enumeration "! String "Cjectsg "r an e,pt< Enumeration i! t/e c"ntext /as n" initialiati"n para,eters.
int get0a:or'ersion#$

Ret rns t/e ,aj"r versi"n "! t/e >ava Servlet =?G t/at t/is servlet c"ntainer s pp"rts.
java.lang.String get0imeType#java.lang.String file$

Ret rns t/e MGME t<pe "! t/e speci!ie* !ileg "r null i! t/e MGME t<pe is n"t 2n"Xn.
int get0inor'ersion#$

Ret rns t/e ,in"r versi"n "! t/e Servlet =?G t/at t/is servlet c"ntainer s pp"rts.
Request)ispatc0er get$amed+ispatcher#java.lang.String name$

Ret rns a Request)ispatc0er "Cject t/at acts as a Xrapper !"r t/e na,e* servlet.
java.lang.String get(ealPath#java.lang.String pat0$

Ret rns a String c"ntainin& t/e real pat/ !"r a &iven virt al pat/.
Request)ispatc0er get(e*uest+ispatcher#java.lang.String pat0$

Ret rns a Request)ispatc0er "Cject t/at acts as a

%",p"se* C< HaiFT

Xrapper !"r t/e res" rce l"cate* at t/e &iven pat/.


java.net.9RE get(esource#java.lang.String pat0$

Ret rns a {RL t" t/e res" rce t/at is ,appe* t" a speci!ie* pat/.
java.io.InputStream get(esource#s tream#java.lang.String pat0$

Ret rns t/e res" rce l"cate* at t/e na,e* pat/ as an InputStream "Cject.
java.lang.String get erver"nfo#$

Ret rns t/e na,e an* versi"n "! t/e servlet c"ntainer "n X/ic/ t/e servlet is r nnin&.
Servlet get ervlet#java.lang.String name$

Deprecated. C) of Ta'a !er'let CSE % VW Yith no 3irect replace=ent


Thi) =etho3 Ya) originally 3efine3 to retrie'e a )er'let fro= a ServletContext En thi) 'er)ionW thi) =etho3 alYay) ret-rn) null an3 re=ain) only to pre)er'e #inary co=pati#ility Thi) =etho3 Yill #e per=anently re=o'e3 in a f-t-re 'er)ion of the Ta'a !er'let CSE En lie- of thi) =etho3W )er'let) can )hare infor=ation -)ing the ServletContext cla)) an3 can perfor= )hare3 #-)ine)) logic #y in'oking =etho3) on co==on non>)er'let cla))e)
java.util.Enumeration get ervlet$ames#$

Deprecated. C) of Ta'a !er'let CSE % VW Yith no replace=ent


Thi) =etho3 Ya) originally 3efine3 to ret-rn an Enu)erat$on of all the )er'let na=e) knoYn to thi) conte(t En thi) 'er)ionW thi) =etho3 alYay) ret-rn) an e=pty Enu)erat$on an3 re=ain) only to pre)er'e #inary co=pati#ility Thi) =etho3 Yill #e per=anently re=o'e3 in a f-t-re 'er)ion of the Ta'a !er'let CSE
java.util.Enumeration get ervlets#$

Deprecated. C) of Ta'a !er'let CSE % ZW Yith no replace=ent

%",p"se* C< HaiFT

Thi) =etho3 Ya) originally 3efine3 to ret-rn an Enu)erat$on of all the )er'let) knoYn to thi) )er'let conte(t En thi) 'er)ionW thi) =etho3 alYay) ret-rn) an e=pty en-=eration an3 re=ain) only to pre)er'e #inary co=pati#ility Thi) =etho3 Yill #e per=anently re=o'e3 in a f-t-re 'er)ion of the Ta'a !er'let CSE
voi! log#java.lang.Exception exception& java.lang.String msg$

Deprecated. C) of Ta'a !er'let CSE % VW -)e log"Str$ng.)essage-.T!ro/a0le.t!ro/a0le% in)tea3


Thi) =etho3 Ya) originally 3efine3 to Yrite an e(ception[) )tack trace an3 an e(planatory error =e))age to the )er'let log file
voi! log#java.lang.String msg$

urites t/e speci!ie* ,essa&e t" a servlet l"& !ileg s all< an event l"&.
voi! log#java.lang.String message& java.lang.F0ro4a:le t0ro4a:le$

urites an explanat"r< ,essa&e an* a stac2 trace !"r a &iven F0ro4a:le excepti"n t" t/e servlet l"& !ile.
voi! remove#ttribute#java.lang.String name$

Re,"ves t/e attriC te Xit/ t/e &iven na,e !r", t/e servlet c"ntext.
voi! set#ttribute#java.lang.String name& java.lang.O:ject o:ject$

Zin*s an "Cject t" a &iven attriC te na,e in t/is servlet c"ntext.

EVt nUi c` sb dZ li*!


Tr"n& ,_ /[n/ MV%g ,"*el l7 n/hn c`a c/:Ln& tr[n/g nJ c/Ea C siness l"&ic c`a ca En& *n&. M(t *1 Qn V:bc q an l tHt t/[ 2/_n& cJ C siness l"&ic tr"n& VieX v7 %"ntr"ller. F/i., v c`a c"ntr"ller c/d l7 n/sn req estg xe l req estg &\i ,"*el VD t/1c /i.n C siness l"&ic ri c/\n vieX VD t/^ *N li. .

%&t v' d v( 3ser;!siness .Vt nUi s lserver \ccd

%",p"se* C< HaiFT

!=p D@Connection)
LBp n7< cJ n/i., v tO" c"nnecti"n VIn 6ataCase
private static String 9SERY3D5E ' (sa(; private static String PDSSWOR) ' (12A>Wk(; private static String 9RE '(j!:c6sqlserver6--local0ost^^0ai61>>A;!ata:ase3ame'test;(; public static Connection get)ZConnection#$ throws Class3otJoun!Exception& SgEException& InstantiationException& IllegalDccessException Connection con ' null; Class.for3ame#(com.microsoft.sqlserver.j!:c.SgEServer)river($; con ' )river5anager.getConnection#9RE& 9SERY3D5E& PDSSWOR)$; return con; %

Tr"n& VJ FI SqlServer V:bc c7i *:Bi *On& instance t/[ server na,e si cJ V^n/ *On& l7: server,name^instance,name. 1443 l7 c]n& T%?@G? c; /[n/ tr"n& SqlServer 3nI c_n& n7< c/:a 2/ai CQ" t/[ p/ai 2/ai CQ" t/[ ,Bi c"nnect V:bc4.

!=p Qser@usiness
LBp n7< c/Ea t;t ca cQc n&/i.p v liUn q an VIn Can& {ser tr"n& 6ataCase n/: GFSERTg SELE%Tg {?6=TEg 6ELETE... V) * p/:Ln& t/Ec chec&!ogin V:bc &\i tr"n& !"r, l"&in VD 2iD, tra serYpassX"r* V|n& n/sp.
public static boolean c0ecGEogin#9ser user$ throws Class3otJoun!Exception& SgEException& InstantiationException& IllegalDccessException Connection conn ' )ZConnection.get)ZConnection#$; Prepare!Statement st ' conn.prepareStatement#(SEEECF . JRO5 H9SERI W1ERE username ' V D3) pass4or! ' V($; int i ' =; st.setString#77i& user.get9sername#$$; st.setString#77i& Encr"ptation.cr"pt#user.getPass4or!#$$$; int count ' =; ResultSet rs ' st.executeguer"#$; while #rs.next#$$ count77; % return count '' 1 V true 6 false;

%/l : Encr"ptation.cr"pt#user.getPass4or!#$ t/1c /i.n ,- /Ja passX"r* se *n& M65 1A'Cit. V+ n& <Un t0cg 2D ca n&:fi lsp tr[n/ cn& 2/_n& V:bc CiIt cQc

%",p"se* C< HaiFT

t/_n& tin n/O< ca, n/: passX"r* c`a 2/Qc/ /7n&. V[ vs< passX"r* V:bc l: tr"n& 6ataCase p/ai V:bc ,- /Ja t/e" 1 t/ st t"Qn VQn& tin cs<. S"On ,- t/1c /i.n ,- /Ja n/: sa :
public static String cr"pt#String str$ if #str '' null TT str.lengt0#$ '' =$ throw new IllegalDrgumentException#(String to encr"pt cannot :e null or Uero lengt0($; % StringZuffer 0exString ' new StringZuffer#$; try 5essage)igest m! ' 5essage)igest.getInstance#(5)W($; m!.up!ate#str.getZ"tes#$$; byteHI 0as0 ' m!.!igest#$; for #int i ' =; i * 0as0.lengt0; i77$ if ##=xff j 0as0HiI$ * =x1=$ 0exString.appen!#(=( 7 Integer.to1exString##=xJJ j 0as0HiI$$$; % else 0exString.appen!#Integer.to1exString#=xJJ j 0as0HiI$$; % % % catch #3oSuc0Dlgorit0mException e$ e.printStacGFrace#$; % return 0exString.toString#$; %

%J t/D test 2It q a CPn& cQc/ t/U, v7" /7, ,ain n/: CUn *:Bi Vh<:
public static void main#StringHI a$ S"stem.out.println#cr"pt#(a:c($$; S"stem.out.println#cr"pt#(aaaaaaa($$; %

L;< *an/ ,c cQc {ser VD Qp *n& v7" {ser Searc/ !"r, c/n& /Ong ta cJ t/D se *n& p/:Ln& t/Ec CUn *:Bi. ?/:Ln& t/Ec n7< c/" searc/ c/)n/ xQc v7 searc/ &Tn Vln& tc< v7" CiIn X/"leu"r* tr <+n v7".
public static Eist*9ser+ searc09serZ"3ame#String username& boolean 40oleWor!$ throws SgEException& Class3otJoun!Exception& InstantiationException& IllegalDccessException String quer" ' (SEEECF username& role& !escription JRO5 H9SERI W1ERE username ' V(; String con!ition ' username; Drra"Eist list ' new Drra"Eist#$; if #`40oleWor!$ quer" ' (SEEECF username& role& !escription JRO5 H9SERI W1ERE username EICE V(; con!ition ' username 7 (](; % Connection conn ' )ZConnection.get)ZConnection#$;

%",p"se* C< HaiFT

Prepare!Statement st ' conn.prepareStatement#quer"$; st.setString#1& con!ition$; ResultSet rs ' st.executeguer"#$; while #rs.next#$$ 9ser user ' new 9ser#$; user.set9sername#rs.getString#(username($$; user.setRole#rs.getString#(role($$; user.set)escription#rs.getString#(!escription($$; list.a!!#user$; % return list;

?ava@ean Qser.java
SJn& vai tr l7 6Tk 9 6ata Trans!er kCject. FJ Ca" &, cQc t/ (c t)n/ VD t/D /i.n tRn& tr:fn& tr"n& Can& {ser v7 cQc ,et/"* &etYset t:Ln& En&:
private private private private String String String String username; pass4or!; role; !escription;

VHi @usiness trong controller*servlet


T/a< v[ &Qn /ar*c"*e:
loginJorm. get9sername#$.equals#(a!am($ jj loginJorm.gePass4or!#$.equals#(12A>WkB@($....

Ta cJ t/D &\i {serZ siness VD xQc t/1c l"&in n/: sa :


9ser user ' new 9ser#$; user.set9sername#loginJorm.get9sername#$$; user.setPass4or!#loginJorm.gePass4or!#$$; if #c0ecGEogin#user$$ --login successfull" % else --login faile!& s0o4 error if necessar" %

Code sample
UserBusiness.rar

%",p"se* C< HaiFT

You might also like