== WAR Contacts ==
 * wget https://github.com/twbs/bootstrap/releases/download/v4.5.0/bootstrap-4.5.0-dist.zip
 * wget https://code.jquery.com/jquery-3.5.1.min.js
External files:
 * src/main/webapp/js/bootstrap.min.js
 * src/main/webapp/js/jquery-3.5.1.min.js
 * src/main/webapp/css/bootstrap.min.css


=== deploy_to_target.sh ===
{{{
#!/bin/sh
rm ../warcontacts.tgz
tar cvzf ../warcontacts.tgz ../warcontacts
cp ../warcontacts.tgz ../target/
docker exec -it jboss5_container /bin/sh -c 'cd /app;rm -rf warcontacts; tar xvzf warcontacts.tgz'
docker exec -it jboss5_container /bin/sh -c 'cd /app/warcontacts; rm  /app/jboss-5.1.0.GA/server/default/deploy/warcontacts-0.0.1.war; mvn clean install;'
docker exec -it jboss5_container /bin/sh -c 'cp /app/warcontacts/target/warcontacts-0.0.1.war /app/jboss-5.1.0.GA/server/default/deploy'
}}}

=== pom.xml ===
{{{
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.allowed.bitarus</groupId>
	<artifactId>warcontacts</artifactId>
	<version>0.0.1</version>
	<packaging>war</packaging>
	<dependencies>
		<dependency>
			<groupId>javaee</groupId>
			<artifactId>javaee-api</artifactId>
			<version>5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.allowed.bitarus</groupId>
			<artifactId>ejbcontacts</artifactId>
			<version>0.0.1</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.5</source>
					<target>1.5</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
}}}

=== src/main/java/org/allowed/bitarus/Handler.java ===
{{{
package org.allowed.bitarus;

import java.util.logging.Logger;
import java.util.logging.Level;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.naming.InitialContext;
import java.io.IOException;
import java.util.List;
import javax.naming.NamingEnumeration;
import javax.naming.NameClassPair;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

public class Handler {
	private static final String CONTACTS_WS_LOCAL = "ContactsWS/local";
	private ServletRequest request;
	private ServletResponse response;
	private JspWriter out;

	public Handler(ServletRequest request, ServletResponse response, JspWriter out) {
		this.request = request;
		this.response = response;
		this.out = out;
	}

	public Handler(PageContext pageContext) {
		this.request = pageContext.getRequest();
		this.response = pageContext.getResponse();
		this.out = (JspWriter) pageContext.getAttribute(PageContext.OUT);

		HttpServletRequest hsr = (HttpServletRequest) this.request;
		System.out.println(String.format("Current method %s", hsr.getMethod()));
		System.out.println(String.format("Path %s", hsr.getServletPath()));

		if ("POST".equals(hsr.getMethod())) {
			Map<String, String> params = hsr.getParameterMap();
			for (String key : params.keySet()) {
				System.out.println(String.format("%s:%s", key, hsr.getParameter(key)));
			}

			handleAddPost(hsr);
			handleDeletePost(hsr);
			handleUpdatePost(hsr);
		}
	}

	private void handleUpdatePost(HttpServletRequest hsr) {
		if ("/update.jsp".equals(hsr.getServletPath())) {
			try {
				InitialContext context = new InitialContext();
				ContactsLocal contacts = (ContactsLocal) context.lookup(CONTACTS_WS_LOCAL);
				long id = Integer.parseInt(hsr.getParameter("cid"));
				String firstName = hsr.getParameter("firstname");
				String lastName = hsr.getParameter("lastname");
				String address = hsr.getParameter("address");
				String phoneNumber = hsr.getParameter("phonenumber");
				contacts.edit(id, firstName, lastName, address, phoneNumber);
				redirectToIndex(hsr);
			} catch (Exception ex) {
			}
		}
	}

	private void handleDeletePost(HttpServletRequest hsr) {
		if ("/delete.jsp".equals(hsr.getServletPath())) {
			try {
				InitialContext context = new InitialContext();
				ContactsLocal contacts = (ContactsLocal) context.lookup(CONTACTS_WS_LOCAL);
				contacts.remove(Integer.parseInt(hsr.getParameter("id")));
				redirectToIndex(hsr);
			} catch (Exception ex) {
			}
		}
	}

	private void handleAddPost(HttpServletRequest hsr) {
		if ("/add.jsp".equals(hsr.getServletPath())) {
			try {
				InitialContext context = new InitialContext();
				ContactsLocal contacts = (ContactsLocal) context.lookup(CONTACTS_WS_LOCAL);
				contacts.add(hsr.getParameter("firstname"), hsr.getParameter("lastname"), hsr.getParameter("address"),
						hsr.getParameter("phonenumber"));
				redirectToIndex(hsr);
			} catch (Exception ex) {
			}
		}
	}

	private void redirectToIndex(HttpServletRequest hsr) throws IOException {
		((HttpServletResponse) this.response).sendRedirect(hsr.getContextPath() + "/index.jsp");
	}

	public void writeHandler() {
		try {
			this.out.println(String.format("<p>Handler up %s</p>", this.request.getParameter("user")));
		} catch (Exception ex) {
		}
	}

	public void writeIP() {
		try {
			this.out.print("!!! Your IP address is " + this.request.getRemoteAddr());
		} catch (Exception ex) {
		}
	}

	public List<ContactEntity> getAllContacts() {
		List<ContactEntity> ret = null;
		try {
			InitialContext context = new InitialContext();

			ContactsLocal contacts = (ContactsLocal) context.lookup(CONTACTS_WS_LOCAL);
			ret = contacts.getAll();
		} catch (Exception ex) {
		}
		return ret;
	}

	public ContactEntity getContact(long id) {

		ContactEntity ret = null;
		try {
			InitialContext context = new InitialContext();

			ContactsLocal contacts = (ContactsLocal) context.lookup(CONTACTS_WS_LOCAL);
			ret = contacts.get(id);
		} catch (Exception ex) {
		}

		return ret;
	}
}
}}}

=== src/main/webapp/add.jsp ===
{{{
<%@page import="org.allowed.bitarus.Handler, java.util.List, org.allowed.bitarus.ContactEntity" %>
<% Handler h = new Handler(pageContext); %>
<html>
    <head>
        <jsp:include page="head.jsp" />  
    </head>
    <body>       
        <jsp:include page="nav.jsp" />
        <div class="container topspace">
            <div class="row"> 
                <div class="col-sm-2"></div>
                <div class="col-sm-8">    
                    <form  action="add.jsp" method="post"  >
                        <label for="firstname">First name:</label><br/>
                        <input type="text" id="firstname" name="firstname" class="form-control"><br/>
                        <label for="lastname">Last name:</label><br/>
                        <input type="text" id="lastname" name="lastname" class="form-control"><br/>
                        <label for="address">Address::</label><br/>
                        <input type="text" id="Address:" name="address" class="form-control"><br/>
                        <label for="phonenumber">Phone number:</label><br/>
                        <input type="text" id="phonenumber" name="phonenumber" class="form-control"><br/>
                        <input type="submit" value="Add"  class="form-control btn btn-primary button"/>
                    </form>    
                </div> 
                <div class="col-sm-2"></div>   
            </div>
        </div>          
    </body>
</html>
}}}

=== src/main/webapp/css/warcontacts.css ===
{{{
.button{margin-top:2px; margin-bottom:2px;}
.topspace { padding-top: 10px; }    
}}}

=== src/main/webapp/delete.jsp ===
{{{
<%@page import="org.allowed.bitarus.Handler, java.util.List, org.allowed.bitarus.ContactEntity" %>
<% Handler h = new Handler(pageContext); %>
<html>
    <head>
        <jsp:include page="head.jsp" />  
    </head>
    <body>       
        <% ContactEntity ci = h.getContact( Integer.parseInt( request.getParameter("id") ) );  %> 
        <jsp:include page="nav.jsp" />
        <div class="container  topspace">
            <div class="row"> 
                <div class="col-sm-2"></div>
                <div class="col-sm-8">         
                    <% if(ci!=null) { %>
                        <p><strong>Id:</strong>  <%= ci.getId() %></p>
                        <p><strong>First name:</strong>  <%= ci.getFirstName() %></p>
                        <p><strong>Last name:</strong>  <%= ci.getLastName() %></p>
                        <p><strong>Creation date:</strong> <%= ci.getCreationDate() %></p>
                        <p><strong>Address:</strong>  <%= ci.getAddress() %></p>
                        <p><strong>Phone:</strong>  <%= ci.getPhoneNumber() %></p>

                        <form action="delete.jsp" method="post">
                            <input type="hidden" id="id" name="id" value="<%=ci.getId()%>"  />
                            <input type="submit" class="form-control btn btn-primary button" value="Delete">
                        </form>
                    <% }  %>
                </div> 
                <div class="col-sm-2"></div>   
            </div>
        </div>              
    </body>
</html>
}}}

=== src/main/webapp/head.jsp ===
{{{
  <link rel="stylesheet" href="css/bootstrap.min.css"/>
  <link rel="stylesheet" href="css/warcontacts.css"/>
  <script src="js/jquery-3.5.1.min.js"></script>
  <script src="js/bootstrap.min.js" ></script>
}}}

=== src/main/webapp/index.jsp ===
{{{
<%@page import="org.allowed.bitarus.Handler, java.util.List, org.allowed.bitarus.ContactEntity" %>
<% Handler h = new Handler(pageContext); %>
<html>
	<head>
  		<jsp:include page="head.jsp" />  
	</head>
    <body>        
        <jsp:include page="nav.jsp" />      
 		<div class="container topspace">
    		<div class="row"> 
        		<div class="col-sm-2"></div>
        		<div class="col-sm-8">
        			<% List<ContactEntity> contacts = h.getAllContacts(); %>
        			<a href="add.jsp" class="btn btn-primary button">Add</a>
			        <table class="table table-stripped" >
			            <tr>
							<th>FirstName</th>
							<th>LastName</th>
							<th>Actions</th>
            			</tr>
         				<% for(int i=0; i<contacts.size() ;i++){  %>
            				<tr>
								<% ContactEntity contact = ((ContactEntity)contacts.get(i));  %>
								<td><%= contact.getFirstName() %></td>
								<td><%= contact.getLastName() %></td>
								<td>
    								<a href="view.jsp?id=<%=contact.getId()%>" class="btn btn-primary button">View</a>
   									<a href="update.jsp?id=<%=contact.getId()%>" class="btn btn-primary button">Update</a>
   									<a href="delete.jsp?id=<%=contact.getId()%>" class="btn btn-primary button">Delete</a>     
								</td>
            				</tr>
        				<%}%>
			       </table>
       			</div> 
       			<div class="col-sm-2"></div>   
     		</div>
   		</div> 
	</body>
</html>
}}}

=== src/main/webapp/nav.jsp ===
{{{
<nav class="navbar navbar-dark bg-dark navbar-fixed-top">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="index.jsp">Contacts</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
              <li class="active"><a href="index.jsp">List</a></li>
          </ul>
        </div>
    </div>
</nav>
}}}

=== src/main/webapp/update.jsp ===
{{{
<%@page import="org.allowed.bitarus.Handler, java.util.List, org.allowed.bitarus.ContactEntity" %>
<% Handler h = new Handler(pageContext); %>
<html>
    <head>
        <jsp:include page="head.jsp" />  
    </head>
    <body>       
        <jsp:include page="nav.jsp" />
        <div class="container topspace">
            <div class="row"> 
                <div class="col-sm-2"></div>
                <div class="col-sm-8">              
					<% if( request.getParameter("id") != null ) { %>
					<% ContactEntity ci = h.getContact( Integer.parseInt( request.getParameter("id") ) );  %>
						<form  action="update.jsp" method="post"  >
  							<label for="firstname">First name:</label><br/>
  							<input class="form-control" type="text" id="firstname" name="firstname" value="<%= ci.getFirstName() %>"/><br/>
  							<label for="lastname">Last name:</label><br/>
  							<input class="form-control" type="text" id="lastname" name="lastname" value="<%= ci.getLastName() %>" /><br/>
  							<label for="address">Address::</label><br/>
  							<input class="form-control" type="text" id="Address:" name="address" value="<%= ci.getAddress() %>"/><br/>
  							<label for="phonenumber">Phone number:</label><br/>
  							<input class="form-control" type="text" id="phonenumber" name="phonenumber" value="<%= ci.getPhoneNumber() %>"/><br/>
  							<input class="form-control" type="hidden" id="cid" name="cid" value="<%=ci.getId()%>"/> 
 							<input type="submit" value="Update" class="form-control btn btn-primary button" >
						</form>
					<% } %>	
                </div> 
                <div class="col-sm-2"></div>   
            </div>
        </div>                   
    </body>
</html>
}}}

=== src/main/webapp/view.jsp ===
{{{
<%@page import="org.allowed.bitarus.Handler, java.util.List, org.allowed.bitarus.ContactEntity" %>
<% Handler h = new Handler(pageContext); %>
<html>
    <head>
        <jsp:include page="head.jsp" />  
    </head>
    <body>       
        <jsp:include page="nav.jsp" />
        <div class="container topspace">
            <div class="row"> 
                <div class="col-sm-2"></div>
                <div class="col-sm-8">    
                    <% ContactEntity ci = h.getContact( Integer.parseInt( request.getParameter("id") ) );  %> 
                    <p><strong>Id:</strong>  <%= ci.getId() %></p>
                    <p><strong>First name:</strong>  <%= ci.getFirstName() %></p>
                    <p><strong>Last name:</strong>  <%= ci.getLastName() %></p>
                    <p><strong>Creation date:</strong> <%= ci.getCreationDate() %></p>
                    <p><strong>Address:</strong>  <%= ci.getAddress() %></p>
                    <p><strong>Phone:</strong>  <%= ci.getPhoneNumber() %></p>
                </div> 
                <div class="col-sm-2"></div>   
            </div>
        </div>         
    </body>
</html>
}}}

=== src/main/webapp/WEB-INF/web.xml ===
{{{
<?xml version="1.0"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>
}}}

== WAR web app that invokes ejb using JNDI name ==
 * mvn clean install
 * cp target/warjee5-0.0.1.war /app/jboss-5.1.0.GA/server/default/deploy/warjee5-0.0.1.war

=== pom.xml ===
{{{#!highlight xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.allowed.bitarus</groupId>
	<artifactId>warjee5</artifactId>
	<version>0.0.1</version>
	<packaging>war</packaging>
	<dependencies>
		<dependency>
			<groupId>javaee</groupId>
			<artifactId>javaee-api</artifactId>
			<version>5</version>
			<scope>provided</scope>
		</dependency>
                <dependency>
                    <groupId>org.allowed.bitarus</groupId>
                    <artifactId>ejbjee5</artifactId>
                    <version>0.0.1</version>
                    <scope>provided</scope>
                </dependency>
	</dependencies>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.5</source>
					<target>1.5</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
}}}

=== src/main/java/org/allowed/bitarus/Handler.java ===
{{{#!highlight java
package org.allowed.bitarus;

import java.util.logging.Logger;
import java.util.logging.Level;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.naming.InitialContext;
import java.util.List;
import javax.naming.NamingEnumeration;
import javax.naming.NameClassPair;

public class Handler{
    private ServletRequest request;
    private ServletResponse response;
    private JspWriter out;

    public Handler(ServletRequest request, ServletResponse response,JspWriter out){
        this.request = request;
        this.response = response;        
        this.out = out;
    }

    public Handler(PageContext pageContext){
        this.request = pageContext.getRequest();
        this.response = pageContext.getResponse();        
        this.out = (JspWriter) pageContext.getAttribute(pageContext.OUT) ;
    }
    
    public void writeHandler(){
        try{
          this.out.println(String.format("<p>Handler up %s</p>" , this.request.getParameter("user") ));
        }
        catch(Exception ex){            
        }          
    }
    
    public void writeIP(){
        try{
            this.out.print("!!! Your IP address is " + this.request.getRemoteAddr());
        }
        catch(Exception ex){            
        }          
    }
 
   public void writeAddResults(){
      try{
          InitialContext context = new InitialContext();
          NamingEnumeration<NameClassPair> namingList = context.list("");
          while (namingList.hasMore()) {
              out.println(namingList.next().getName() + "<br/>" );
          }

          AddLocal addLocal = (AddLocal) context.lookup("AddWS/local");
          List<AddEntity> list = addLocal.getAll();
          for(int idx=0; idx<list.size(); idx++){
              this.out.println( list.get(idx).getCreationDate().toString() + "<br/>"  );
          }
      }
      catch(Exception ex){
      }
   }
}
}}}

=== src/main/java/org/allowed/bitarus/TestBean.java ===
{{{#!highlight java
package org.allowed.bitarus;
import java.util.logging.Logger;
import java.util.logging.Level;

public class TestBean{
    private String name;
    private Logger logger;
    
    public TestBean(){
        this.logger = Logger.getLogger(this.getClass().getName() );
        this.logger.log(Level.INFO,"Created test bean");
        this.name="Ioooo";
    }   
    
    public String getName(){
        this.logger.info("getName called");
        return this.name;        
    }
    
    public void setName(String name){
        this.name=name;        
    }
}
}}}


=== src/main/webapp/WEB-INF/web.xml ===
{{{#!highlight xml
<?xml version="1.0"?>
<web-app version="2.5"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <servlet>
        <servlet-name>index</servlet-name>
        <jsp-file>/index.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>index</servlet-name>
        <url-pattern>/index**</url-pattern>
    </servlet-mapping>
   <servlet>
        <servlet-name>otherindex</servlet-name>
        <jsp-file>/otherindex.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>otherindex</servlet-name>
        <url-pattern>/otherindex**</url-pattern>
    </servlet-mapping>
</web-app>
}}}

=== src/main/webapp/index.jsp ===
{{{#!highlight html
<%@page import="org.allowed.bitarus.Handler" %>
<jsp:useBean id="test" class="org.allowed.bitarus.TestBean" />
<% //Handler h = new Handler(request,response,out); %>
<% Handler h = new Handler(pageContext); %>
<html>
    <body>        
        <p>Hello</p>
        <p>World <jsp:getProperty name="test" property="name" /> </p>
        <% h.writeHandler(); %>
        <h2><% out.print("Your IP address is " + request.getRemoteAddr()); %></h2>
        <h3><% h.writeIP(); %></h3>
        <h3><% h.writeAddResults(); %></h3>
    </body>
</html>
}}}

=== src/main/webapp/otherindex.jsp ===
{{{#!highlight html
<%@page import="org.allowed.bitarus.Handler" %>
<jsp:useBean id="test" class="org.allowed.bitarus.TestBean" />
<% //Handler h = new Handler(request,response,out); %>
<% Handler h = new Handler(pageContext); %>
<html>
    <body>        
        <p>Other Hello</p>
        <p>World <jsp:getProperty name="test" property="name" /> </p>
        <% h.writeHandler(); %>
        <h2><% out.print("Your IP address is " + request.getRemoteAddr()); %></h2>
        <h3><% h.writeIP(); %></h3>
    </body>
</html>
}}}


== Example WAR for JBoss5 in docker container ==
{{attachment:warFile.png}}
 * mvn clean install
 * cp /app/warjee5/target/warjee5-0.0.1.war /app/jboss-5.1.0.GA/server/default/deploy
 * http://127.0.0.1:8080//warjee5-0.0.1/otherindex.jsp

=== src/main/java/org/allowed/bitarus/TestBean.java ===
{{{#!highlight java
package org.allowed.bitarus;
import java.util.logging.Logger;
import java.util.logging.Level;

public class TestBean{
    private String name;
    private Logger logger;
    
    public TestBean(){
        this.logger = Logger.getLogger(this.getClass().getName() );
        this.logger.log(Level.INFO,"Created test bean");
        this.name="Ioooo";
    }   
    
    public String getName(){
        this.logger.info("getName called");
        return this.name;        
    }
    
    public void setName(String name){
        this.name=name;        
    }
}
}}}


=== src/main/java/org/allowed/bitarus/Handler.java ===
{{{#!highlight java
package org.allowed.bitarus;

import java.util.logging.Logger;
import java.util.logging.Level;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;

public class Handler{
    private ServletRequest request;
    private ServletResponse response;
    private JspWriter out;
    
    public Handler(ServletRequest request, ServletResponse response,JspWriter out){
        this.request = request;
        this.response = response;        
        this.out = out;
    }

    public Handler(PageContext pageContext){
        this.request = pageContext.getRequest();
        this.response = pageContext.getResponse();        
        this.out = (JspWriter) pageContext.getAttribute(pageContext.OUT) ;
    }
    
    public void writeHandler(){
        try{
          this.out.println(String.format("<p>Handler up %s</p>" , this.request.getParameter("user") ));
        }
        catch(Exception ex){            
        }          
    }
    
    public void writeIP(){
        try{
            this.out.print("!!! Your IP address is " + this.request.getRemoteAddr());
        }
        catch(Exception ex){            
        }          
    }
        
}
}}}

=== src/main/webapp/otherindex.jsp ===
{{{#!highlight html
<%@page import="org.allowed.bitarus.Handler" %>
<jsp:useBean id="test" class="org.allowed.bitarus.TestBean" />
<% //Handler h = new Handler(request,response,out); %>
<% Handler h = new Handler(pageContext); %>
<html>
    <body>        
        <p>Other Hello</p>
        <p>World <jsp:getProperty name="test" property="name" /> </p>
        <% h.writeHandler(); %>
        <h2><% out.print("Your IP address is " + request.getRemoteAddr()); %></h2>
        <h3><% h.writeIP(); %></h3>
    </body>
</html>
}}}

=== src/main/webapp/index.jsp ===
{{{#!highlight html
<%@page import="org.allowed.bitarus.Handler" %>
<jsp:useBean id="test" class="org.allowed.bitarus.TestBean" />
<% //Handler h = new Handler(request,response,out); %>
<% Handler h = new Handler(pageContext); %>
<html>
    <body>        
        <p>Hello</p>
        <p>World <jsp:getProperty name="test" property="name" /> </p>
        <% h.writeHandler(); %>
        <h2><% out.print("Your IP address is " + request.getRemoteAddr()); %></h2>
        <h3><% h.writeIP(); %></h3>
    </body>
</html>
}}}

=== src/main/webapp/WEB-INF/web.xml ===
{{{#!highlight xml
<?xml version="1.0"?>
<web-app version="2.5"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <servlet>
        <servlet-name>index</servlet-name>
        <jsp-file>/index.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>index</servlet-name>
        <url-pattern>/index**</url-pattern>
    </servlet-mapping>

   <servlet>
        <servlet-name>otherindex</servlet-name>
        <jsp-file>/otherindex.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>otherindex</servlet-name>
        <url-pattern>/otherindex**</url-pattern>
    </servlet-mapping>

</web-app>
}}}

=== pom.xml ===
{{{#!highlight xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.allowed.bitarus</groupId>
	<artifactId>warjee5</artifactId>
	<version>0.0.1</version>
	<packaging>war</packaging>
	<dependencies>
		<dependency>
			<groupId>javaee</groupId>
			<artifactId>javaee-api</artifactId>
			<version>5</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.5</source>
					<target>1.5</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
}}}