In previous chapters we have defined our ExtJs sample application that explains the use of Local and Remote query Methods. Also we saw how to define a custom template for a ComboBox display. In this chapter we are going to define the following
- Dynamic web application config file
- MySQL data resource for Tomcat
- Country Java Bean
- Web application utility methods that will process the ComboBox requests
- Web application Servlet to interact with the ExtJs application using JSON and Ajax Requests
Java Web Application config file web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ExtJs4_ComboBox</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description>Country Servlet</description>
    <display-name>CountryServlet</display-name>
    <servlet-name>CountryServlet</servlet-name>
    <servlet-class>com.as400samplecode.CountryServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CountryServlet</servlet-name>
    <url-pattern>/CountryServlet</url-pattern>
  </servlet-mapping>
  <resource-ref>
    <description>MySQL Datasource</description>
    <res-ref-name>jdbc/mysql</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>
</web-app>
Java Web Application MySQL data resource file context.xml
<?xml version="1.0" encoding="UTF-8"?> <Context reloadable="true"> <Resource auth="Container" name="jdbc/mysql" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/world" username="root" password="mysql" maxIdle="10" maxActive="200" maxWait="5" removeAbandoned="true" removeAbandonedTimeout="1200" /> </Context>
Java bean Country.java
package com.as400samplecode.util;
public class Country {
   
    String code = null;
    String name = null;
    String continent = null;
    String region = null;
    Double lifeExpectancy = null;
    Double gnp = null;
   
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getContinent() {
        return continent;
    }
    public void setContinent(String continent) {
        this.continent = continent;
    }
    public String getRegion() {
        return region;
    }
    public void setRegion(String region) {
        this.region = region;
    }
    public Double getLifeExpectancy() {
        return lifeExpectancy;
    }
    public void setLifeExpectancy(Double lifeExpectancy) {
        this.lifeExpectancy = lifeExpectancy;
    }
    public Double getGnp() {
        return gnp;
    }
    public void setGnp(Double gnp) {
        this.gnp = gnp;
    }
   
}    
Java Web Application utility functions to process the ComboBox requests CountryInformation.java
package com.as400samplecode.util;
import java.sql.Connection;         
import java.sql.ResultSet;          
import java.sql.SQLException;       
import java.sql.PreparedStatement;  
import java.util.ArrayList;
import javax.naming.Context;        
import javax.naming.InitialContext; 
import javax.sql.DataSource;        
public class CountryInformation {           
    Connection conn = null;            
    PreparedStatement stmt = null;     
    String sql = null;
   
    public ArrayList<Country> getItems(String start, String limit, String query) { 
        ArrayList<Country> countryList = new ArrayList<Country>();   
        try {      
            Context ctx = (Context) new InitialContext().lookup("java:comp/env");
            conn = ((DataSource) ctx.lookup("jdbc/mysql")).getConnection(); 
            sql = "Select * from COUNTRY ";
            if(query != null){
                if(query.trim().equalsIgnoreCase("")){
                    sql = sql + "where code = '@@@' ";
                }
                else {
                    query = query.toUpperCase();
                    sql = sql + "where ucase(name) like '" + query + "%' ";
                }
            }
           
            sql = sql + "order by name,code LIMIT ?,?"; 
            stmt = conn.prepareStatement(sql);
            stmt.setInt(1, Integer.parseInt(start));
            stmt.setInt(2, Integer.parseInt(limit));
            ResultSet rs = stmt.executeQuery(); 
           
            while(rs.next()){ 
                Country country = new Country();
                country.setCode(rs.getString("code").trim());
                country.setName(rs.getString("name").trim());
                country.setContinent(rs.getString("continent").trim());
                country.setRegion(rs.getString("region").trim());
                country.setLifeExpectancy(rs.getString("lifeExpectancy") == null ? new Double(0) : Double.parseDouble(rs.getString("lifeExpectancy").trim()));
                country.setGnp(rs.getString("gnp") == null ? new Double(0)  : Double.parseDouble(rs.getString("gnp").trim()));
                countryList.add(country);
            }                                                                         
            rs.close();                                                               
            stmt.close();                                                             
            stmt = null;                                                              
            conn.close();                                                             
            conn = null;                                                   
        }                                                               
        catch(Exception e){System.out.println(e);}                      
        finally {                                                       
            
            if (stmt != null) {                                            
                try {                                                         
                    stmt.close();                                                
                } catch (SQLException sqlex) {                                
                    // ignore -- as we can't do anything about it here           
                }                                                             
                stmt = null;                                            
            }                                                        
            if (conn != null) {                                      
                try {                                                   
                    conn.close();                                          
                } catch (SQLException sqlex) {                          
                    // ignore -- as we can't do anything about it here     
                }                                                       
                conn = null;                                            
            }                                                        
        }              
        return countryList;
    }  
   
    public int getTotalCount(String query) { 
        int totalCount = 0; 
        try {      
            Context ctx = (Context) new InitialContext().lookup("java:comp/env");
            conn = ((DataSource) ctx.lookup("jdbc/mysql")).getConnection(); 
            sql = "Select count(*) from COUNTRY "; 
            if(query != null){
                if(query.trim().equalsIgnoreCase("")){
                    sql = sql + "where code = '@@@' ";
                }
                else {
                    query = query.toUpperCase();
                    sql = sql + "where ucase(name) like '" + query + "%' ";
                }
            }
            sql = sql + "order by name,code"; 
            stmt = conn.prepareStatement(sql);
           
            ResultSet rs = stmt.executeQuery(); 
            while(rs.next()){ 
                totalCount = rs.getInt(1);
                break;
            }                                                                         
            rs.close();                                                               
            stmt.close();                                                             
            stmt = null;                                                              
            conn.close();                                                             
            conn = null;                                                   
        }                                                               
        catch(Exception e){System.out.println(e);}                      
        finally {                                                       
                                                                
            if (stmt != null) {                                            
                try {                                                         
                    stmt.close();                                                
                } catch (SQLException sqlex) {                                
                    // ignore -- as we can't do anything about it here           
                }                                                             
                stmt = null;                                            
            }                                                        
            if (conn != null) {                                      
                try {                                                   
                    conn.close();                                          
                } catch (SQLException sqlex) {                          
                    // ignore -- as we can't do anything about it here     
                }                                                       
                conn = null;                                            
            }                                                        
        }              
        return totalCount;
    }  
}   
Java Servlet to process Ajax Requests and send JSON object CountryServlet.java
package com.as400samplecode;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import com.as400samplecode.util.Country;
import com.as400samplecode.util.CountryInformation;
public class CountryServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public CountryServlet() {
        super();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String start = request.getParameter("start");
        String limit = request.getParameter("limit");
        String query = request.getParameter("query");
       
        PrintWriter out = response.getWriter();
        response.setContentType("text/html");
        JSONArray arrayObj=new JSONArray();
        CountryInformation countryInformation = new CountryInformation();
        ArrayList<Country> countryList = countryInformation.getItems(start,limit,query);
        for(int i=0;i<countryList.size();i++){
            Country country = countryList.get(i);
            JSONObject itemObj = JSONObject.fromObject(country);
            arrayObj.add(itemObj);
        }
        JSONObject myObj = new JSONObject();
        myObj.put("success", true);
        myObj.put("countries", arrayObj);
        myObj.put("totalCount", countryInformation.getTotalCount(query));
       
        out.println(myObj.toString());
        out.close();
    }
}

No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.