Tampilkan postingan dengan label JSP. Tampilkan semua postingan
Tampilkan postingan dengan label JSP. Tampilkan semua postingan

Januari 05, 2010

MVC Without Framework: JSP and Servlets Integration

Introduction

This post is used to showcase a MVC pattern for web development without framework. Its functionality is display a random number which is set by a bean and populated by a servlet. I use the source code from book “Core Servlets and Java Server Pages” – chapter 15, which is available online at http://pdf.coreservlets.com/. Credits should goes to Marty Hall and Larry Brown, I only make some minor replacement (for Tomcat 6.0.20) and more details instruction for the shake of my student’s clearlyness.

Directory Structures and Files

[bpdp@bpdp-arch webapps]$ tree mvc/
mvc/
`-- WEB-INF
 |-- classes
 |   |-- beans
 |   |   |-- NumberBean.class
 |   |   `-- NumberBean.java
 |   `-- servlets
 |       |-- RandomNumberServlet.class
 |       `-- RandomNumberServlet.java
 |-- views
 |   `-- RandomNum.jsp
 `-- web.xml
5 directories, 6 files
[bpdp@bpdp-arch webapps]$
Files

NumberBean.java



package beans;

public class NumberBean {

 private double num = 0;

 public NumberBean(double number) {
   setNumber(number);
 }

 public double getNumber() {
   return(num);
 }

 public void setNumber(double number) {
   num = number;
 }

}
RandomNumberServlet.java

package servlets;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import beans.NumberBean;

/** Servlet that generates a random number, stores it in a bean,
 * and forwards to JSP page to display it.
 */

public class RandomNumberServlet extends HttpServlet {
  public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {

    NumberBean bean = new NumberBean(Math.random());
    request.setAttribute("randomNum", bean);
    String address = "/WEB-INF/views/RandomNum.jsp";
    RequestDispatcher dispatcher = request.getRequestDispatcher(address);
    dispatcher.forward(request, response);
  }
}
RandomNum.jsp



 
web.xml




From these source code, you should know that I have prepare directory for views (only for JSP), servlets (all servlets), beans (all beans). That way, we can separate our application into 3 functionalities: Model (beans) – View (JSP) – and Controller (servlets). This will keep your mind stay organized.

Run Application

Execute the application by typing its URL: http://server:8080/mvc/randomize. Here’s the screenshot:









Notes:

If you want to copy, the source code, have a look here: http://bambangpdp.wordpress.com/2010/01/06/mvc-without-framework-jsp-and-servlets-integration/

Quick Hack for the Impatients: JSP Custom Tag

Introduction

Source code from this posting was taken from http://java.sun.com/developer/technicalArticles/xml/WebAppDev3/ with some minor replacement needed for Apache Tomcat 6.0.20 (latest as of this date) and more details on how to run the application.

Purpose of Application

This application is used as a showcase for jsp custom tag. Its functionality is create custom tag for jsp to display string in lowercase.

Directory Structure and Files

[bpdp@bpdp-arch webapps]$ tree customtags/
customtags/
|-- WEB-INF
|   |-- classes
|   |   `-- tags
|   |       |-- ToLowerCaseTag.class
|   |       `-- ToLowerCaseTag.java
|   |-- mytaglib.tld
|   `-- web.xml
`-- coba.jsp

3 directories, 5 files
[bpdp@bpdp-arch webapps]$
We created customtags directory under webapps (which is needed for an application to be executed by Tomcat).  Pay attention to file mytaglib.tld, this file is used as tag lib descriptor to describe descriptor for taglib.


Files

ToLowerCaseTag.java

package tags;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class ToLowerCaseTag extends BodyTagSupport {

   public int doAfterBody() throws JspException {
      try {
         BodyContent bc = getBodyContent();
         // get the bodycontent as string
         String body = bc.getString();
         // getJspWriter to output content
         JspWriter out = bc.getEnclosingWriter();
         if(body != null) {
            out.print(body.toLowerCase());
         }
      } catch(IOException ioe) {
         throw new JspException("Error: "+ioe.getMessage());   
      }
      return SKIP_BODY;
   }
}
web.xml




mytaglib.tld



coba.jsp



Notes: 

From  all of the files above, you should know the relationship between taglib uri="mytags" prefix="first"  (in coba.jsp) with mytags (in web.xml).

I used screenshot and not embedded code because this post interpret tags as HTML and keep yelling about error, so if you want to copy the source code, have a look here: http://bambangpdp.wordpress.com/2010/01/06/217/

Run Application

To run this application, type the URL: http://server:8080/customtags/coba.jsp
Here's the screenshot: