Building A Custom Tag Library
Building A Custom Tag Library
Durga
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
173 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
Agenda :
2) Conditional tags :
<c:if>
<c:when>
<c:choose>
<c:otherwise>
Summary of Conditional tags
3) Iteration tags :
<c:forEach>
<c:forTokens>
Summary of Iteration Tags
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
174 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
Introduction :
1. Sun people encapsulated the core functionality which is common to many web application in
the form of JSTL, programmer can use this predefined library without writing on his own.
2. The main objective of EL is to eliminate java code from the jsp but it fails to replace java code
complete elimination.
3. Which process some functionality , we can resolve this problem by using JSTL hence the main
objective of JSTL is to remove java code from the Jsp.
Core Library :
2) Conditional tags :
<c:if>
<c:when>
<c:choose>
<c:otherwise>
3) Iterational tags :
<c:forEach>
<c:forTokens>
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
175 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
<c:import>
<c:param>
Installing JSTL :
By default JSTL functionality is not available to the jsp, we can provide JSTL functionality by placing
the following jar files in web-application lib folder.
Note : The above 2 jar files we have to download from net and place it either in web-application lib
folder or at server level lib folder( i.e., ex : tomcat/lib )
To make core library available to the jsp , we have to declare taglib directive as follows
OR
<c:out>
We can use this tag for writing template text and expressions to the jsp
<c:out>
c --- prefix
out ---- tagname
form 1 :
form 2 :
If the main value is not possible or if it is not then we can provide default value by using
default attribute.
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
176 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
If the specified request parameter 'uname' is not available then returns a null , in that case
only default will get the cahance.
form 3 :
<c:out value="${result}" escapeXml="false" />
If the result contains xml data , if we want to xml data then take escapeXml="false" , if we don't want
to xml data then take escapeXml="true" , in that case the result value considered template text.
Ex 1 :
</body>
</html>
1. value : It is a mandatory attribute to provide required value , it can be String literal or runtime
expression.
2. default : It is an optional attribute and it is for providing default value, Jsp engine consider it's
value if and only if the value attribute evaluates null.
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
177 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
<c:set>
The <jsp:setProperty> tag can do only one thing set property of bean but
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
178 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
Example 1 :
In Servlet Code :
package com.jstl;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
dog.setName("spike");
person.setDog(dog);
System.out.println(person);
request.setAttribute("person", person);
RequestDispatcher rd = request.getRequestDispatcher("pages/demo.jsp");
rd.forward(request, response);
}
}
demo.jsp
Example 2 :
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
179 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
package com.jstl;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
}
demo.jsp
<web-app>
<servlet>
<servlet-name>ServletPerson</servlet-name>
<servlet-class>com.jstl.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletPerson</servlet-name>
<url-pattern>/fs</url-pattern>
</servlet-mapping>
</web-app>
output :
{ashok=SCWCD}
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
180 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
SCWCD
http://localhost:8080/jsp/fs
<c:set> conclusions :
We can never have both var, target attributes <c:set> it will gives unpreductable results.
Scope is an optional attribute, default scope is page.
If the "value" is null, the attribute named by var will be removed.
If the attribute var doesn't exist <c:set> will be created but if value is not null.
If the target expression is null then container throws an Exception.
If the target expression is not a map/bean then container throws an Exception.
If the target expression is a bean but the bean doesn't have a property matches with property
attribute then container throws an exception saying Invalid property in <set>.
org.apache.jasper.JasperException:
Illegal scope attribute without var in "c:set" tag.
note : In <c:set> tag all attributes are optional , when ever we are taking scope attribute compulsory
we can take var attribute otherwise we will get exception.
<c:remove>
We can use this tag to remove attribute in the specified scope this tag contains the following 2
attributes.
Ex :
<c:remove var="x" />
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
181 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
If the scope is not specified then JSP engine will search page scope for the specified attribute, if it is
available then JSP engine will removes the attribute, If the specified attribute is not available it will
search in request scope followed by session, application.
Note : The <c:remove> compulsary should be a var attribute but not expression.
Note 2 : In <c:remove> tag var attribute is the mandatory attribute and scope attribute is a optional
attribute.
Ex : remove.jsp
<c:remove var="x"/>
<c:remove var="y"/>
removal of x & y : <c:out value="${result}"/> //200
<br/>
<c:remove var="result"/>
After removal of result is :
<c:out value="${result}" default="8888"/> //8888
Output :
<c:catch>
This can be used to catch and suppress that exception, so that the result of the code will be executed
normally
We have to place risky code as a body of <c:catch> tag.
Syntax :
<c:catch>
Risky Code
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
182 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
</c:catch>
If an exception raised an risky code when this tag suppress that expression and rest of the
code will be executed normally.
We can hold the raised exception object by using var attribute, which is page scoped attribute.
Ex 1 :
<c:if test="${e!=null}">
<h1>OOPS!--Exception Raised</h1> <h3>${e}</h3>
</c:if>
http://localhost:8081/jstl/WebRoot/pages/jstl.jsp?uname=Ashok&age=ten&height=5.5
<c:catch var="e">
${Person.age}
</c:catch>
value, default,
escapeXml
<c:out> For writing template text and expression to the JSP page.
value is mandatory
attribute
To set some attribute in some scope and to set bean property and var, target, value,
<c:set>
add to entries in the Map. scope, property
var, scope
To remove an attribute in the specified scope, if we are not
<c:remove> var is mandatory
mension any scope page followed request, session, application.
attribute
<c:catch> For suppress an Exception and continue rest of the JSP normally. var
Conditional Tags :
<c:if>
If we can use this tag to implement core java if statement , there are 2 forms are <c:if> available.
Without body :
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
184 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
In this case test condition will be evaluated and result store into var x , If the rest of the Jsp page
where ever the same test condition is required , we can use its directly without re-evaluated once
again.
With body :
The test condition is true then the body will be executed otherwise without executing the body , the
rest of the JSP will be executed.
In this case also we can store test results into var variable.
scope, var attributes are optional.
Ex :
<%@page import="java.util.*" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
if.jsp
<%@page import="java.util.*" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
x value is : 10
The result is : true
<c:choose>, <c:when>, <c:otherwise> we can use these tags for implements if-else , switchstatements.
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
185 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
implementing if-else :
JSTL doesn't contain any tag for else , we can implement if-else statement by using the above tags
<c:choose>
<c:when test="testcondition">
//Action 1 (if)
</c:when>
<c:otherwise>
//Action 2 (else)
</c:otherwise>
</c:choose>
If test condition is true Action 1 will be executed else Action 2 will be executed.
<c:choose>
<c:when test="testCondition1">
//Action 1
</c:when>
<c:when test="testCondition2">
//Action 2
</c:when>
<c:otherwise>
//default Action
</c:otherwise>
</c:choose>
<c:choose> should compulsory contains atleast one <c:when> , but <c:otherwise> is optional.
Every <c:when> implicitly contains break stastement hence there is no chance fall-through
inside switch.
We have to take <c:otherwise> as a last statement only.
<c:choose> and <c:otherwise> won't take any attribute but <c:when> tag can contains only
one mandatory attribute i.e., test.
Ex :
<html>
<body>
<form>
<b>Select the Number</b>
<select name="day">
<option>1</option>
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
186 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
<br>
<input type="submit"/>
</form>
<c:otherwise>
<c:out value="Select the values between 1 to 7"/>
</c:otherwise>
</c:choose>
</body>
</html>
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
187 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
Iteration Tags :
<c:forEach> tag :
<c:forEach> to implement general purpose for loop.
form 1 :
This loop internally maintain one couter variable , which is incremented by step attribute
value.
The default value for the step attribute is "1" , and it is optional attribute.
output :
0 2 4 6 8 10
Collection java.lang.Collection
Map Map.entry
Object Array Corresponding object class type
Student[] Student
List of String seperated by "," String
Ex :
output :
The Current object is : A
The Current object is : B
The Current object is : C
The Current object is : D
header.jsp
<%@page isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<table>
<tr><th>Header name</th><th>Header value</th></tr>
<tr><td><c:forEach items="${header}" var="x"></td></tr>
<tr><td>${x.key}</td><td>${x.value}</td></tr>
<tr><td></c:forEach></td></tr>
</table>
cookie.jsp
<%@page isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
Cookie c1 = new Cookie("uname", "Agastya");
Cookie c2 = new Cookie("mail", "[email protected]");
Cookie c3 = new Cookie("mobile", "9822334455");
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
189 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
output :
address ---- IND
uname ---- Agastya
mail ---- [email protected]
mobile ---- 9822334455
JSESSIONID ---- 62a82c98e954f45a4f5967a745ff
Write a program to print all the session scoped attributes (attribute names and attribute values)
in Servlet code :
package info;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
RequestDispatcher rd = request.getRequestDispatcher("myJsp.jsp");
rd.forward(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
190 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
myJsp.jsp
<%@page isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:forEach items="${sessionScope}" var="obj">
<h2>${obj.key} ---- ${obj.value}</h2>
</c:forEach>
output :
Arun ---- SCWCD
Ashok ---- SCJP
Example :
In Servlet Code :
String[] movies1={"A","B","C"};
String[] movies2={"MovieA","MovieB","MovieC"};
request.setAttribute("moviesList", list);
RequestDispatcher rd=request.getRequestDispatcher("myJsp.jsp");
rd.forward(request, response);
myJsp.jsp
<c:forEach items="${moviesList}" var="listElements">
<c:forEach items="${listElements}" var="movie">
${movie}
</c:forEach>
</c:forEach>
output :
A B C MovieA MovieB MovieC
This attribute dicuss status of the iteration like current iteration number is 1st iteration or not.
This attribute is the type of javax.servlet.jsp.jstl.core.LoopTagStatus
This class contains several methods, which are useful during iterations.
public Object
it returns the current item in the iteration.
getCurrent() :
public int getIndex() : returns current index
returns the no. of iterations that have already perform including current
public int getCount() :
iteration.
returns information about whether the current iteration is first , then it
public boolean isFirst() :
returns "true" else returns "false"
returns information about whether the current iteration is last , then it
public boolean isLast() :
returns "true"
public Integer getBegin() returns the value of begin attribute for the associate tag, (OR) null if no
: begin attribute is specified.
returns the value of end attribute for the associate tag, (OR) null if no end
public Integer getEnd() :
attribute is specified.
returns the value of step attribute for the associate tag, (OR) null if no step
public Integer getStep() :
attribute is specified. (i.e., there is no default value)
myJsp.jsp
<%@page isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Example 2 :
myJsp.jsp
<c:forEach begin="0" end="10" step="1" varStatus="status">
The begin Item : ${status.begin} <br>
The end Item : ${status.end} <br>
The step Item : ${status.step} <br>
</c:forEach>
output :
The begin Item : 0
The end Item : 10 //11 times
The step Item : 1
<c:forTokens> :
For each token according to the seperator, the body will be executed we can store the current Token
by using var attribute.
Ex :
myJsp.jsp
<c:forTokens items="ask,sai" delims="," var="obj">
The current object : ${obj} <br>
</c:forTokens>
output :
The current object : ask
The current object : sai
Ex :
Ex :
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
194 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
In case of <c:forTokens> items attribute should be String only but in the case
of<c:forEach> items can be "Collection/Array, Map or String".
Hence <c:forTokens> is considered as a specialized version of forEach loop.
Ex :
output :
The Current Element : ask -- ask
The Current Element : sai -- sai
The Current Element : raki -- raki
begin, end ---> These are mandatory in the case of normal for loops.
items ---> This is mandatory in the case of enhanced for loops.
(According to jsp specification all attributes are optional)
<c:forTokens> Specialized version of StringTokenization begin, end, step, var, varStatus, items, delims
<c:import>
By using <c:import> to include the response of some other JSP into Current JSP at request
processing time,
Hence this inclusion is called Dynamic Include.
It is exactly equal to <jsp:include> standard action.
<jsp:include> and include directive applicable with in the same server/container
but <c:import> can be applicable either with in the same server or outside of the server.
It is always recommended to use outside of the web server.
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
195 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
<jsp:include page="http://localhost:8080/jstl/myJsp.jsp"/>//invalid
<%@include file="http://localhost:8080/jstl/myJsp.jsp"%>//invalid
<c:import url="http://localhost:8080/jstl/myJsp.jsp"/> //valid
form 1 :
demo.jsp
Hello Demo Jsp World!
myJsp.jsp
Hello, this is from myJsp.jsp on GlassFish server.
<c:import url="http://localhost:8080/jstl/demo.jsp"/>
output :
Hello, this is from myJsp.jsp on GlassFish server.
Hello Demo Jsp World!
form 2 :
myJsp.jsp
Hello, this is from myJsp.jsp on GlassFish server.
<c:import url="/demo.jsp" context="/jstl" />
// absolute paths
We can import the resources from outside of current application also
(i.e., cross context communication also possible)
form 3 :
We can store the result of imported page into a variable specified by var attribute,
Where ever the rest of the JSP, we can use directly that variable without import once again.
myJsp.jsp
Hello,
<c:import url="/demo.jsp" var="result" scope="session"/>
The result is :${result}
output :
Hello, The result is :
Hello Demo Jsp World!
Whenever we are using var attribute the result of target JSP store into var attribute , if we want that
result we have to retrieve from that var attribute.
form 4 :
The more convinient way to store the result of <c:import> is to use Reader object, it is alternative to
var attribute.
Hence var and varReader should not come symultaneously.
Hello,
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
196 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
<%
java.io.Reader myReader=(java.io.Reader)pageContext.getAttribute("myReader");
int i=myReader.readLine();
write(i!=null){
//you can perform your own operations.
//once checked again
}
%>
form 5 :
While performing import we can send parameters to the target jsp for this we should use <c:param>
tag these parameters are available in the target Jsp in the form of request parameters (or) form
parameters. demo.jsp
Hello Demo Jsp World! <br>
output :
Hello,
Hello Demo Jsp World!
The form parameter is : SCJP
The form parameter is : SCWCD
<c:redirect> :
We can use this tag to redirect the request to another page, it is exactly equal to sendRedirect of
ServletResponse.
form 1 :
Hello, <br>
<c:redirect url="/demo.jsp" />
// here absolute path is optional
output :
Hello Demo Jsp World!
form 2 :
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
197 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
form 3 :
While performing redirection we can pass parameters of target resources for this we have to use
<c:param> tag.
demo.jsp
Hello Demo Jsp World! <br>
The form parameter is : ${param.c1} <br>
The form parameter is : ${param.c2}
myJSP.jsp
Hello, <br>
<c:redirect url="/demo.jsp" context="/jstl">
<param name="c1" value="SCJP"/>
<param name="c2" value="SCWCD"/>
</c:redirect>
output :
Hello Demo Jsp World!
The form parameter is :
The form parameter is :
<c:url> :
We can use this tag to rewrite the url by appending the session information and form parameters to
the URL.
In servlet code :
PrintWriter out=response.getWriter();
HttpSession session=request.getSession();
out.println(" <a href=\" "+
response.encodeURL("test.do")+
" \"> click </a> ");
In Jsp :
<a href="<c:url value="demo.do" />">click me</a>
form 1 :
form 2 :
form 3 :
<c:url> tag rewrite the value of var attribute by appending session id, iff cookies are disabled
and store into the var attribute.
Suppose if we are not disable in the cookie <c:url> won't append the session id to the url.
output :
The value of x : demo.jsp?c1=SCJP&c2=SCWCD
Click Me
URL-encoding means replacing the unsafe (or) reserved characters with other characters and
the whole thing is decoded again on the server side.
Ex : spaces are not allowed in URL but we can substitute "+" sign for the spaces.
The problem in <c:url> is doesn't automatically encode your URLs.
We can encode the URLs by using <c:param> tag
<c:url> tag can do only rewrite the URL but not encode the URL.
myJsp.jsp
<c:set var="first" value="Ashok"/>
<c:set var="last" value="Agg"/>
demo.jsp
Hello Demo Jsp World! <br>
The form parameter is : ${param.first} <br>
The form parameter is : ${param.last}
output :
Click Me
The URL using param is : demo.jsp?first=Ashok&last=Agg
Using Param tag in the body url-rewriting and Url-encoding
The value of y : demo.jsp?first=Ashok&last=Agg
Click Me
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
200 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com
ADV. JAVA With SCWCD/ OCWCD Material By Mr. Durga
nd
DURGASOFT, # 202, 2 Floor, HUDA Maitrivanam, Ameerpet, Hyderabad - 500038,
201 040 – 64 51 27 86, 80 96 96 96 96, 92 46 21 21 43 | www.durgasoft.com