• No results found

6242166-JSPCompleteTutorial

N/A
N/A
Protected

Academic year: 2021

Share "6242166-JSPCompleteTutorial"

Copied!
53
0
0

Loading.... (view fulltext now)

Full text

(1)

Introduction to JSP :JavaServer Pages (JSP) is a technology based on the Java language and enables the development of dynamic web sites. JSP was developed by Sun Microsystems to allow server side development. JSP files are HTML files with special Tags containing Java source code that provide the dynamic content.

The following shows the Typical Web server,different clients connecting via the Internet to a Web server. In this example,the Web server is running on Unix and is the very popular Apache Web server

(2)

First static web pages were displayed. Typically these were people?s first experience with making web pages so consisted of My Home Page sites and company marketing information. Afterwards Perl and C were languages used on the web server to provide dynamic content. Soon most languages

including Visualbasic,Delphi,C and Java could be used to write applications that provided dynamic content using data from text files or database requests. These were known as CGI server side applications. ASP was

developed by Microsoft to allow HTML developers to easily provide dynamic content supported as standard by Microsoft?s free Web Server,Internet Information Server (IIS). JSP is the equivalent from Sun Microsystems,a comparison of ASP and JSP will be presented in the following section.

The following diagram shows a web server that supports JSP files. Notice that the web server also is connected to a database.

(3)

JSP source code runs on the web server in the JSP Servlet Engine. The JSP Servlet engine dynamically generates the HTML and sends the HTML output to the client?s web browser.

Why use JSP?

JSP is easy to learn and allows developers to quickly produce web sites and applications in an open and standard way. JSP is based on Java,an object-oriented language. JSP offers a robust platform for web development. Main reasons to use JSP:

Multi platform

Component reuse by using Javabeans and EJB. Advantages of Java.

You can take one JSP file and move it to another platform,web server or JSP Servlet engine.

This means you are never locked into one vendor or platform.

HTML and graphics displayed on the web browser are classed as the presentation layer. The Java code (JSP) on the server is classed as the implementation.

By having a separation of presentation and implementation,web designers work only on the presentation and Java developers concentrate on

(4)

JSP compared to ASP

JSP and ASP are fairly similar in the functionality that they provide. JSP may have slightly higher learning curve. Both allow embedded code in an HTML page,session variables and database access and manipulation. Whereas ASP is mostly found on Microsoft platforms i.e. NT,JSP can operate on any

platform that conforms to the J2EE specification. JSP allow component reuse by using Javabeans and EJBs. ASP provides the use of COM / ActiveX controls. JSP compared to ASP.NET

ASP.NET is based on the Microsoft .NET framework. The .NET framework allows applications to be developed using different programming languages such as Visual Basic,C# and JavaScript. JSP and Java still has the advantage that it is supported on many different platforms and the Java community has many years of experience in designing and developing Enterprise quality scalable applications. This is not to say that ASP.NET is bad,actually it is quite an improvement over the old ASP code.

JSP compared to Servlets

A Servlet is a Java class that provides special server side service. It is hard work to write HTML code in Servlets. In Servlets you need to have lots of println statements to generate HTML. JSP pages are converted to Servlets so actually can do the same thing as old Java Servlets.

JSP architecture

JSPs are built on top of SUN Microsystems' servlet technology. JSPs are essential an HTML page with special JSP tags embedded. These JSP tags can contain Java code. The JSP file extension is .jsp rather than .htm or .html. The JSP engine parses the .jsp and creates a Java servlet source file. It then

compiles the source file into a class file,this is done the first time and this why the JSP is probably slower the first time it is accessed. Any time after this the special compiled servlet is executed and is therefore returns faster.

(5)

Steps required for a JSP request:

1. The user goes to a web site made using JSP. The user goes to a JSP page (ending with .jsp). The web browser makes the request via the Internet. 2. The JSP request gets sent to the Web server.

3. The Web server recognises that the file required is special (.jsp),therefore passes the JSP file to the JSP Servlet Engine.

4. If the JSP file has been called the first time,the JSP file is parsed,otherwise go to step 7.

5. The next step is to generate a special Servlet from the JSP file. All the HTML required is converted to println statements.

6. The Servlet source code is compiled into a class.

7. The Servlet is instantiated,calling the init and service methods. 8. HTML from the Servlet output is sent via the Internet.

(6)

10.Creating your first JSP page <html>

<head>

<title>My first JSP page </title> </head> <body> <%@ page language="java" %> <% out.println("Hello World"); %> </body> </html>

11.Type the code above into a text file. Name the file helloworld.jsp.

12.Place this in the correct directory on your JSP web server and call it via your browser.

Using JSP tags

There are five main tags: 1. Declaration tag 2. Expression tag 3. Directive tag 4. Scriptlet tag 5. Action tag Declaration tag ( <%! %> )

This tag allows the developer to declare variables or methods. Before the declaration you must have <%!

At the end of the declaration,the developer must have %> Code placed in this tag must end in a semicolon ( ; ).

Declarations do not generate output so are used with JSP expressions or scriptlets.

For Example, <%!

private int counter = 0 ;

private String get Account ( int accountNo) ; %>

(7)

Expression tag ( <%= %>)

This tag allows the developer to embed any Java expression and is short for out.println().

A semicolon ( ; ) does not appear at the end of the code inside the tag. For example,to show the current date and time.

Date : <%= new java.util.Date() %>

Directive tag ( <%@ directive ... %>)

A JSP directive gives special information about the page to the JSP Engine. There are three main types of directives:

1) page - processing information for this page. 2) Include - files to be included.

3) Tag library - tag library to be used in this page.

Directives do not produce any visible output when the page is requested but change the way the JSP Engine processes the page.

For example,you can make session data unavailable to a page by setting a page directive (session) to false.

1. Page directive

This directive has 11 optional attributes that provide the JSP Engine with special processing information. The following table lists the 11 different attributes with a brief description:

language

Which language the file uses. <%@ page language = "java" %>

extends Superclass used by the JSP engine for the translated Servlet.

<%@ page extends = "com.taglib... %>

import Import all the classes in a java package into the current JSP page. This allows the JSP page to use other java

classes.

<%@ page import = "java.util.*" %>

(8)

session Does the page make use of sessions. By default all JSP pages have session data available. There are performance benefits to switching session to false.

Default is set to true.

buffer Controls the use of buffered output for a JSP page. Default is 8kb

<%@ page buffer = "none" %>

autoFlush Flush output buffer when full. <%@ page autoFlush = "true" %>

isThreadSa fe

Can the generated Servlet deal with multiple requests? If true a new thread is started so requests are handled

simultaneously.

info Developer uses info attribute to add information/document for a page. Typically used to add author,version,copyright and date info.

<%@ page info = "visualbuilder.com test page,copyright 2001. " %>

errorPage Different page to deal with errors. Must be URL to error page.

<%@ page errorPage = "/error/error.jsp" %>

(9)

IsErrorPage This flag is set to true to make a JSP page a special Error Page. This page has access to the implicit object exception (see later).

contentTyp e

Set the mime type and character set of the JSP.

2. Include directive

Allows a JSP developer to include contents of a file inside another. Typically include files are used for navigation,tables,headers and footers that are common to multiple pages.

Two examples of using include files:

This includes the html from privacy.html found in the include directory into the current jsp page.

<%@ include file = "include/privacy.html" %>

or to include a naviagation menu (jsp file) found in the current directory. <%@ include file = "navigation.jsp" %>

Include files are discussed in more detail in the later sections of this tutorial. 3. Tag Lib directive

A tag lib is a collection of custom tags that can be used by the page. <%@ taglib uri = "tag library URI" prefix = "tag Prefix" %>

Custom tags were introduced in JSP 1.1 and allow JSP developers to hide complex server side code from web designers.

(10)

Between <% and %> tags,any valid Java code is called a Scriptlet. This code can access any variable or bean declared.

For example,to print a variable. <%

String username = "visualbuilder" ; out.println ( username ) ;

%> Action tag

There are three main roles of action tags : 1) enable the use of server side Javabeans 2) transfer control between pages

3) browser independent support for applets. Javabeans

A Javabean is a special type of class that has a number of methods. The JSP page can call these methods so can leave most of the code in these Javabeans. For example,if you wanted to make a feedback form that automatically sent out an email. By having a JSP page with a form,when the visitor presses the submit button this sends the details to a Javabean that sends out the email. This way there would be no code in the JSP page dealing with sending emails (JavaMail API) and your Javabean could be used in another page (promoting reuse).

To use a Javabean in a JSP page use the following syntax:

<jsp : usebean id = " ...." scope = "application" class = "com..." /> The following is a list of Javabean scopes:

page - valid until page completes.

request - bean instance lasts for the client request session - bean lasts for the client session.

application - bean instance created and lasts until application ends.

(11)

For the second example,we will make use of the different tags we have learnt. This example will declare two variables; one string used to stored the name of a website and an integer called counter that displays the number of times the page has been accessed. There is also a private method declared to increment the counter. The website name and counter value are

displayed. <HTML> <HEAD> <!-- Example2 --> <TITLE> JSP loop</TITLE> </HEAD> <BODY>

<font face=verdana color=darkblue> JSP loop

<BR> <BR> <%!

public String writeThis(int x) {

String myText=""; for (int i = 1; i < x; i )

myText = myText "<font size=" i " color=darkred face=verdana>VisualBuilder JSP Tutorial</font><br>" ; return myText;

} %>

This is a loop example from the <br> <%= writeThis(8) %> </font> </BODY> </HTML> Implicit Objects

(12)

So far we know that the developer can create Javabeans and interact with Java objects. There are several objects that are automatically available in JSP called implicit objects.

The implicit objects are

Variable Of type Request Javax.servlet.http.httpservletreque st Response Javax.servlet.http. httpservletresponse Out Javax.servlet.jsp.JspWriter Session Javax.servlet.http.httpsession PageContent Javax.servlet.jsp.pagecontext Application Javax.servlet.http.ServletContext Config Javax.servlet.http.ServletConfig Page Java.lang.Object Page object

Represents the JSP page and is used to call any methods defined by the servlet class.

Config object

Stores the Servlet configuration data. Request object

Access to information associated with a request. This object is normally used in looking up parameter values and cookies.

<% String devStr = request.getParameter("dev"); %> Development language = <%= devStr %>

(13)

This code snippet is storing the parameter "dev" in the string devStr. The result is displayed underneath.

Creating a Form

Here we show how to create and process an html form.

Copy the code below and place in a file named: myform.jsp Go to myform.jsp in your browser

You will see the form you just created. It won't do anything yet.

<html> <head> <!-- Example4 --> <title>VisualBuilder.com</title> </head> <body>

<form action="myformconfirm.jsp" method="post"> Enter in a website name:<br>

<input type="text" name="website"><br> <input type="submit" name="submit"> </form>

</body> </html>

Processing a Form

Here we show how to process the html form your just created.

Copy the code below and place in a file named: myformconfirm.jsp Go to myform.jsp

Fill in some details and submit the form

You should see the results of your submission <html> <head> <!-- Example4 --> <title>VisualBuilder.com</title> </head> <body> <font size=3>

Your info has been received: <br><br>

(14)

String sName = request.getParameter("website"); out.print(sName); %> </font> </body> </html>

Creating a Form (more elements)

This example shows how to create and process more form elements. Copy the code below and place in a file named: fullform.jsp

<html> <head> <!-- Example5 --> <title>VisualBuilder.com</title> </head> <body> <h1>

Website submission form </h1>

<form action="fullformconfirm.jsp" method="post"> Enter in the website name:

<input type="text" name="website"> <br>

<br>

Enter in the url:

<input type="text" name="url"> <br>

<br> category:

<select name="category" size="1">

<option selected value="java">java</option> <option value="ejb">ejb</option> <option value="servlet">servlet</option> <option value="jsp">jsp</option> <option value="jdbc">jdbc</option> </select> <br> <br> Description:

<textarea rows="4" cols='42' name="desc"></textarea> <br>

<br>

(15)

<input type="checkbox" name="yahoo" value="T">Yahoo

<input type="checkbox" name="google" value="T" CHECKED>Google <input type="checkbox" name="altavista" value="T">Altavista

<br> <br>

<input type="submit" name="submit" value="Go"> </form>

</body> </html>

Processing a Form (more elements)

Here we show how to process the html form your just created.

Copy the code below and place in a file named: fullformconfirm.jsp Go to fullform.jsp

Fill in some details and submit the form

You should see the results of your submission <html> <head> <!-- Example4 --> <title>VisualBuilder.com</title> </head> <body> <font size=3>

Thank you for your submission,it has been successfully received: <br><br>

<%

String sName = request.getParameter("website"); String sUrl = request.getParameter("url");

String sCategory = request.getParameter("category"); String sDesc = request.getParameter("desc");

String sGoogle = request.getParameter("google"); String sYahoo = request.getParameter("yahoo"); String sAltavista = request.getParameter("altavista"); %> Name:<%=sName%><br> Url:<%=sUrl%><br> Desc:<%=sDesc%><br> Category:<%=sCategory%><br> Desc:<%=sDesc%><br> Google:<%=sGoogle%><br> Yahoo:<%=sYahoo%><br> Altavista:<%=sAltavista%><br> </font> </body> </html>

(16)

Processing a Form (more elements)

Here we show how to process the html form your just created.

Copy the code below and place in a file named: fullformconfirm.jsp Go to fullform.jsp

Fill in some details and submit the form

You should see the results of your submission <html> <head> <!-- Example4 --> <title>VisualBuilder.com</title> </head> <body> <font size=3>

Thank you for your submission,it has been successfully received: <br><br>

<%

String sName = request.getParameter("website"); String sUrl = request.getParameter("url");

String sCategory = request.getParameter("category"); String sDesc = request.getParameter("desc");

String sGoogle = request.getParameter("google"); String sYahoo = request.getParameter("yahoo"); String sAltavista = request.getParameter("altavista"); %> Name:<%=sName%><br> Url:<%=sUrl%><br> Desc:<%=sDesc%><br> Category:<%=sCategory%><br> Desc:<%=sDesc%><br> Google:<%=sGoogle%><br> Yahoo:<%=sYahoo%><br> Altavista:<%=sAltavista%><br> </font> </body> </html>

Getting Client Info

You can get information about a clients computer

Copy the code below and place in a file named: clientinfo.jsp Run it from your browser -clientinfo.jsp

(17)

<html> <head> <!-- Example5 --> <title>VisualBuilder.com</title> </head> <body>

Client computer details: <br><br> <b>Ip address</b>: <br> <%=request.getRemoteAddr()%> <br><br> <b>Computer name</b>: <br> <%=request.getRemoteHost()%> <br><br> </body> </html> Beans scopes in JSP

(18)

JavaBeans are reusable components. It represents a simple Java class with some properties. The bean properties are accessed by Getter and Setter method. They are used to separate Business logic from the Presentation logic. Internally, a bean is just an instance of a class. The JSP specification provides three basic tags for working with Beans

:-jsp:useBean id="bean name" class="bean class" scope = "page | request | session |application "/>

• <jsp:setProperty name = "bean name" property = "someProperty" value = "someValue" />

• <jsp:getProperty name = "bean name" property = "someProperty" />

Where bean name = the name that refers to the bean. Bean class = name of the java class that defines the bean. property = name of the property to be passed to the bean. value = value of that particular property.

The following is the explanation for the different scopes of a bean object in jsp: 1. Page scope:- This scope helps to keep the data available while the page is

loading. Any object whose scope is defined as page scope will disappear as soon as the response is sent to the browser. The object with a page scope may be modified as often as desired within the particular page but the

changes are lost as soon as the user moves away from the page. By default all beans have page scope.

2. Request scope:- Any object created in the request scope will be available as

long as the request object is valid. For example if the JSP page uses a <jsp:forward> tag, then the bean will be accessed in the forwarded page and if redirect is used then the bean is destroyed.

3. The Session scope:- In JSP terms, the data associated with the user has

session scope. A session does not correspond directly to the user; rather, it corresponds with a particular period of time the user spends at a site. Typically, this period is defined as all the hits a user makes to a website

(19)
(20)

The following example will demonstrate the various bean scopes for the JSP

application. All the examples will use the Counter bean which has only one property

counter of type int .

(1) Page Scope

Note:- This is the default scope for the bean object. So in the following JSP example

"bean1" is accessed only in this page and not anywhere else. <HTML>

<BODY>

<H1>Using Beans and Page Scope</H1>

<jsp:useBean id="bean1" class="com.visualbuilder.Counter" scope="page" />

<%bean1.setCounter(bean1.getCounter() + 1);%> The counter value is: <jsp:getProperty name="bean1" property="counter" />

</BODY></HTML>

(1) Request Scope index.jsp

<jsp:useBean id="counter" scope="request" class="com.visualbuilder.Counter" />

<html> <head>

<title>Request Bean Example</title> </head> <body> <% counter.setCounter(10); %> <jsp:forward page="request.jsp" /> </body> </html> request.jsp

<jsp:useBean id="counter" scope="request" class="com.visualbuilder.Counter" />

(21)
(22)

The request object is used to send the raw data in form of key/value pair to the server from the browser. What if, we want to send the multipart data i.e. images, files and binary data to the server. The below example will demonstrate the multiple type data send to the server.

<%@ page import="java.io.*"%> <%

String contentType = request.getContentType();

if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {

DataInputStream in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength();

byte dataBytes[] = new byte[formDataLength]; int byteRead = 0;

int totalBytesRead = 0;

while (totalBytesRead < formDataLength) {

byteRead = in.read(dataBytes, totalBytesRead, formDataLength);

totalBytesRead += byteRead; }

String file = new String(dataBytes);

String saveFile = file.substring(file.indexOf("filename=\"") + 10); saveFile = saveFile.substring(0, saveFile.indexOf("\n"));

saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));

int lastIndex = contentType.lastIndexOf("=");

String boundary = contentType.substring(lastIndex + 1,contentType.length());

int pos;

pos = file.indexOf("filename=\""); pos = file.indexOf("\n", pos) + 1; pos = file.indexOf("\n", pos) + 1; pos = file.indexOf("\n", pos) + 1;

(23)
(24)

These days, users expect feature rich online applications and companies need flexible application design to deal with complex business rules. The day of having a single code file with all the application are gone.

Modularization is the splitting up of complex code into separate modules of code. The following are the advantages of the modularization:-

1. Coding and debugging both are very easy as compared to single file. 2. The code is reused if required in the multiple pages.

3. If any logic becomes obsolete then it can be replaced without disturbing other components in the application. The following tags are used to add the multiple JSP pages into

one:-a. <jsp:include>:- The <jsp:include> includes the given file on runtime. When container encounters this tag, it checks for the JSP file and compile that given JSP file. The output is then included in the page at runtime. As a result

response time increases to some extent. It is always better to use

<jsp:include> when the JSP page content are dynamically changes and the restarts of the servers are not done periodically.

b. <%@include%>:- This tag includes the contents of the given file during the compilation of the JSP file. When the container encounter this tag it will

generate the servlet and include all the contents of the included file to the servlet. Now if we change the included file then it would not reflect to its parent page until or unless it is reloaded to the container or the server gets a restart. So it is always better to use <%@include%> for the static type of the pages.

Example:-

The below is given the use of the <jsp:include> and also the <%@include%> tag.

<jsp:include page="coretaglib1.jsp"/><br> <%@include file="coretaglib2.jsp"%>

(25)
(26)

The second way is to define the error page in the page directive as "<%@ page errorPage="errorpage.jsp" %>" and creating the error page. When any exception or error occurs while processing the JSP page then the container automatically calls the error page and redirects the flow to it. Any page can be used to show the errors.Users have to set the

ErrorPage="true" property on the page directive for example:-<%@ page isErrorPage="true" %> for error pages. While processing an error page an implicit object named "exception" automatically created for the page, which is used to display the error messages.

The below example will demonstrate the exception handling in the JSP and use of exception implicit object.

Exceptionhandling.jsp <%@ page errorPage="errorpage.jsp" %> <% String s=null; s.toString(); %> errorpage.jsp <%@ page isErrorPage="true" %>

This is the Error page.The following error occurs:- <br> <%= exception.toString() %>

(27)
(28)

In any web application, a user moves from one page to another. So, it is necessary to track the user's data and objects throughout the application. As we know that the session keeps the data particular to a user, so sessions are used to hold the user's data. For sessions JSP provide an implicit object "session", which can be use to save the data specific to the particular user into the session scope.

There are mainly 4 ways for session Tracking as follows:

1.

Cookies:-You can use HTTP cookies to store information about a session. The cookies are small text files stored in the client side. This is an excellent most widely used approach. However, even though servlets have a high-level and easy-to-use

interface to cookies, there are still a number of relatively tedious details that need to be handled, while working with cookies.

2. URL Rewriting:

You can append some extra data on the end of each URL that identifies the session, and the server can associate that session identifier with data it has stored about that session. This is also an excellent solution, and even has the advantage that it works with browsers that don't support cookies or where the user has disabled cookies. However, it has most of the same problems as cookies, namely that the server-side program has a lot of straightforward but tedious processing to do.

3. Hidden form fields:

HTML forms have an entry that looks like the following: <INPUT TYPE="HIDDEN" NAME="session" VALUE="...">. This means that, when the form is submitted, the specified name and value are included in the GET or POST data. This can be used to store information about the session. However, it has the major disadvantage that it only works if every page is dynamically generated, since the whole point is that each session has a unique identifier.

(29)
(30)

The user can also use the html forms to accept the username and password. This helps to establish the application level or module level security in web world. All sites follow the different security policies and standards. It is always better to use the application managed security for better results. Also, when the application is moved to some other servers then it hardly impacts the application managed security. The following example will demonstrate a form and shows the welcome message if user enters the correct username and password.

Example:-<% String action= request.getParameter("action"); if(action != null && action.equals("submit")){

String username=request.getParameter("username"); String password=request.getParameter("password"); if(username != null && password != null &&

username.equals("visualbuilder") && password.equals("test")) {

out.println("<h3>welcome to the page</h3>"); }else{ out.println("<h3>Wrong password!!!!</h3>"); } }else{ %> <html>

<form action="formsecurity.jsp" method="post">

<input type="hidden" name="action" value="submit">

Enter the user name :- <input type="text" name="username" ><br> Enter the password :- <input type="password" name="password" ><br>

<input type="submit" name="submit" value="submit"> </form>

</html> <%}%>

(31)
(32)

Security is defined as the condition of being protected against danger or loss. The security is very important in any web application as the web applications are mostly exposed to all the people in the world. The levels of security can be

• Transport Level security using HTTPS.

• Authentication and Authorization

• Role Based Access Control

• Container-managed Security

• Application-managed Security.

The web application can be configured to use any level of security as per the requirement and criticality of the site.

Container Managed Security Vs Application Managed Implementation For Container Managed

Implementation For Application Managed

Container Managed Application Managed

• Authentication and

Authorization are specified in web.xml.

• It uses multiple authentication

schemes, such as Password Authentication Form-based Authentication Client side Digital Certificates etc..

• Redirects are handled

(33)
(34)

Few years back, the sites were developed using a single language and the developer used to create the sites to their specific languages. As the globalization occured, many frameworks have developed to support the multiple languages at a time. Now this can be achieved by having the multi language text in key/value pair and at runtime the text is read from the key as per the language required. This multilingual support is known as Internationalization. Internationalization is defined as the process of designing an application so that it can be adapted to various languages and regions without engineering changes.

The following classes are used to implement Internationalization to any site.

Locale - The fundamental Java class that supports internationalization is

Locale . Each Locale represents a particular choice of country and language, and also a set of formatting assumptions for things like numbers and dates. • ResourceBundle - The java.util.ResourceBundle class provides the

fundamental tools for supporting messages in multiple languages. • PropertyResourceBundle - One of the standard implementations of

Resource Bundle allows you to define resources using the same

"name=value" syntax used to initialize properties files. This is very convenient for preparing resource bundles with messages that are used in a web

application, because these messages are generally text oriented.

Note:- The fmt is the jstl tag library used to implement the

internationalization in JSP. The below example will tell you "how to use the fmt taglib in the application". The example displays the text coming from the different properties files. The properties file lables.properties is

created with different locale suffix example en is for english, de for Germany etc. We have hello key in both the files. hello=This is german File in de file and hello=This is english File in english file.

Example JSP file Internationalization.jsp file .

(35)
(36)

A primary feature of JSP technology version 2.0 is its support for an expression language (EL). An expression language makes it possible to easily access

application data stored in JavaBeans components. As the EL is introduced in JSP 2.0, we can also use the page attribute isELIgnored to ignore the EL for a page. <%@ page isELIgnored ="true|false" %>

The following is the EL operator table which can be used with the EL language.

Note:- and,eq,gt,true,instanceof,or,ne,le,false,empty, not,lt,ge,null,div and mod are

reserved words in the EL so user cannot use these words for the identifiers. Expression Result \${3+2-1} ${3+2-1} <%-- Addition/Subtraction --%> \${"1"+2} ${"1"+2} <%-- String conversion --%> \${1 + 2*3 + 3/4} ${1 + 2*3 + 3/4} <%-- Mult/Div --%> \${3%2} ${3%2} <%-- Modulo --%> \${(8 div 2) mod 3} ${(8 div 2) mod 3} <%-- Compares with "equals" but returns

(37)
(38)

JSTL is a component technology within the Java 2 Enterprise Edition (J2EE)

specification and is controlled by Sun Microsystems. JSTL is nothing more than a set of simple and standard tag libraries that encapsulates the core functionality

commonly needed when writing dynamic JSP pages. The following are the problems with the

JSPs:-1. Java code embedded within scriptlet tags is ugly and obtrusive.

2. It is very difficult to modify the java code embedded in the JSP files if the file is large.

3. Java code within JSP scriptlets cannot be reused by other JSP pages. 4. Retrieving objects out of the HTTP request and session is cumbersome and

type casting to the object's class is required.

The JSTL tags are basically categorized into four libraries:

core:- Basic scripting functions such as loops, conditionals, and input/output.

fmt:- Internationalization and formatting of values such as currency and

dates.

xml:- XML processing

sql:- Database access. Advantages of using

JSTL:-• JSTL tags are XML based tags which are cleanly and uniformly blend into a

page's HTML markup tags.

• The four JSTL tag libraries include most functionality that would be needed in a JSP page. JSTL tags are easier for non-programmers and inexperienced programmers, because they do not require any knowledge of Java

programming.

• JSTL tags encapsulate reusable logic such as formatting dates and numbers.

• JSTL tags can reference objects in the request and session without knowing the object's type and no casting is required.

• JSP's EL (Expression Language) makes it easy to call getter and setter methods on Java objects. This is not possible in JSP 1.2, but became available in JSP 2.0. EL is used extensively in JSTL.

JSTL Drawbacks:

• JSTL can add processing overhead to the server. Both Java scriptlet code and tag libraries are compiled into a resulting servlet, which is then executed by

(39)
(40)

Core taglib is the important taglib in the JSTL. It includes the core concepts of the programming like declaring the variable, decision making tags etc.. The next sections will explain all the core taglib tags, which are generally used in the programming.

Standard Syntax:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Variable Support Tags

The <c:set> tag sets the value of an EL variable or the property in any of the JSP scopes (page, request, session, or application). If the variable does not exists, it will be created.

The JSP EL variable or property can be set either from the attribute value: <c:set var="var" scope="session" value="..."/>

OR

<c:set var="var"> ...

</c:set>

To remove an EL variable, you use the <c:remove> tag as follows: <c:remove var="test" scope="session"/>

Conditional Tags

The <c:if> tag allows the conditional execution of its body according to the value of the test attribute. The syntax of the <c:if> conditional block is as follows:-

<c:if test="${condition}"> </c:if>

The <c:choose> tag performs conditional block execution by the embedded <c:when> tags. It renders the body of the first <c:when> tag whose test condition evaluates to be true. If none of the test conditions evaluates to be true, then the body of <c:otherwise> tag is evaluated, if present. The syntax is as follows :-

<c:choose>

(41)
(42)

Iterator Tags

The <c:forEach> tag allows you to iterate over a collection of objects. You specify the collection via "items" attribute, and the current item is available through a variable named given in the "var" attribute. A large number of collection types are supported by <c:forEach>, including all implementations of java.util.Collection and

java.util.Map. If given collection is of type java.util.Map, then the current item will be of type java.util.Map.Entry, which has the following properties:

• key: The key under which the item is stored in the underlying Map • value: The value that corresponds to the key

Arrays of objects as well as arrays of primitive types (for example, int) are also supported. For arrays of primitive types, the current item for the iteration is

automatically wrapped with its standard wrapper class (for example, Integer for int, Float for float, and so on).

<c:forEach var="item" items="collection"> </c:forEach>

or

<c:forEach begin="0" end="10" varStatus="status" step="1" > </c:forEach>

URL Tags

The <c:url> tag is used to create the URL for the submit actions or the hyperlinks. The <c:url> tag is used to create the URL variable and <c:param> is used to add the parameters in the <c:url> tag. The syntax is as

follows:-<c:url var="var" value="..." >

<c:param name="param1" value="val1" /> </c:url>

Example:-<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> <%

String[] value = new String[10]; value[0]="one";

value[1]="two"; value[2]="three"; value[3]="four"; value[4]="five";

(43)
(44)

The function taglib contains the basic String functions for the JSTL functionality. Standard Syntax:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

java.lang.Strin g substring ( java.lang.String , int, int) Returns a subset of a string. java.lang.String substringAfte r ( java.lang.String , java.lang.String

(45)
(46)

The database interaction with the JSP page is similar to the core JDBC interaction. The complete JDBC code for the database interaction is to be written in the scriptlet tags. The following example shows the process of database handling with the JSP page. The following example will display the total hit for the current page and update the counter in the database.

<%@page import="java.sql.*" %> <% int hitCount=0; try{ Class.forName("org.gjt.mm.mysql.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

Statement statement = connection.createStatement();

int changed = statement.executeUpdate("update counters set hitCount = hitCount + 1 " +"where page like '" + request.getRequestURI() + "'");

if (changed == 0) statement.executeUpdate("insert counters(page) values('" + request.getRequestURI() + "')");

ResultSet rs = statement.executeQuery("select hitCount from counters where page like '" + request.getRequestURI() + "'");

rs.next(); hitCount = rs.getInt(1); }catch(Exception e ){ }finally{ statement.close(); connection.close(); }

out.println("The hit count is " +hitCount ); %>

(47)
(48)

The most powerful feature of JSP is that - the user can also create their own custom tags. The servlet API contains the

javax.servlet.jsp.tagext.BodyTagSupport class, which is used to create the custom tags. All the tags need to extend the

javax.servlet.jsp.tagext.BodyTagSupport class and override doStartTag(), doEndTag() and doAfterBody() methods. After creating the Java class for the custom tag, the tag library description file is to be created. The extension for the XML description file is .tld. The following example will create a tag, which takes String and prints the reverse of the String when displayed on the browser.

ReverseTag.java package com.visualbuilder.taglibrary; import java.io.IOException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.BodyContent; import javax.servlet.jsp.tagext.BodyTagSupport; public class ReverseTag extends BodyTagSupport { private static final long serialVersionUID = 1L; public int doStartTag() throws JspTagException{ return EVAL_BODY_TAG;

}

public int doEndTag() throws JspTagException { try {

JspWriter out = pageContext.getOut(); } catch (Exception ex) {

throw new JspTagException("All is not well in the world." + ex); }

return SKIP_BODY; }

(49)
(50)

The following is the tag lib descriptor file for the reverse tag. <?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

<tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion>

<shortname>Visualbuilder</shortname> <info>Visual builder Tag library</info> <tag>

<name>stringreverse</name>

<tagclass>com.visualbuilder.taglibrary.ReverseTag </tagclass> <info>

This is a simple tag which will reverse the text. </info>

<!-- Optional attributes --> </tag>

</taglib>

CustomTag.jsp file

<%@ taglib uri="/WEB-INF/reverse.tld" prefix="reverse" %> <html>

<head>

<title>Your Custom Tag library</title> </head> <body bgcolor="#ffffff"> <hr /> <reverse:stringreverse> Visual Builder </reverse:stringreverse> <hr /> </body> </html>

(51)
(52)

There are some standard practices that can be followed while writing the JSP files. The standards of writing JSP code helps to develop the

application easily and effectively. It reduces the complexity and the debugging time for the JSP application. The following are the best practices, while working on JSP application:-

Separate HTML from Java:- For small JSP files with least of logic, it seems

as best to have the Java and html in the same JSP file as all available resources and dependencies are in the same file. As the JSP's go on to higher complexity, this approach fails as the code becomes

complex and less readable and hard to understand.

Place business logic in JavaBeans:- We must write our business logic in

JavaBeans as the code will be reused anywhere in the application. Also if any logical change occurs during the development so it requires to change only at one place and hence avoiding rework everywhere.

Factor general behavior out of custom tag handler classes:- If we are

using custom tags then we must tend to write the common code in a Java file separately instead of writing inside the customTagHandler. Because Handler classes are not readily used like ordinary Java utility classes rather Handler classes can access the utility classes easily.

Favor HTML in Java handler classes over Java in JSPs:- Sometimes

cleanly separating HTML, JSP tags, and HTML-like custom tags from Java requires unnecessarily convoluted code. In these cases, you either include Java scriptlets and expressions in the JSP or put some HTML code in the Java tag handler class.

Use an appropriate inclusion mechanism: - The JSP is a combination of

the tags and the Java code. It is very difficult to maintain the two types of code in a single file. JSP gives us the flexibility to create the multiple JSP pages and then call those JSP pages into the complex page wherever required. • Use a JSP template mechanism:- Using templates is the best approach

when we can see the total structural changes in the look and feel of the page. It is not a good way to change each and every JSP page for the html

changes, rather we will define the layout of the page in a JSP and will use the templates mechanism to import the contents of different portions from different JSP's through templates. So, when you want to change the layout, you need to modify only one template file rather making changes in all pages.

Use stylesheets:- We must use CSS to give the styles to different

components across the site, providing same CSS styles to similar kind of components. If we want to change the look of a particular type of component throughout the website, we are required to change one style only and it will be reflected everywhere.

(53)

References

Related documents

Association for Gerontology Education in Social Work California Council on Gerontology &amp; Geriatrics Gerontological Society of America. International Society for Gerontechnology

Hipped roof, covered in red plain clay tiles, with red brick construction to walls and sandstone plinth, and brick dentil course to eaves. Small diamond-shaped aeration

The schools listed have met the requirements of RCW 28A.195 and are consistent with the State Board of Education rules and regulations in chapter 180-90 WAC. The Board will

courses/program  Number of students that enroll in hybrid and online courses  Percent of credit hours completed based on. credit hours attempted 3.3  Establishment

Congress’ judgment that a minimum coverage provision is necessary is supported not only by expert opinion, but also by the experience of states which have actually attempted to bar

Nearly 19 percent of the licensed drivers in South Dakota were under 25, but 39.2 percent of the drinking drivers in fatal and injury accidents and 48.4 percent of the speeding

left—Leissa wanted something dramatic, so we chose to use hot lights to create a cinematic look. To retain the warm color, I only partially corrected for the tungsten cast. She’s