-
12Connections/jimi.jsp
-
BINFirst.gif
-
BINLast.gif
-
BINNext.gif
-
BINPrevious.gif
-
BINWEB-INF/classes/addressBeans.jar
-
BINWEB-INF/classes/com/bullseyecomputing/beans/AddressDataBean.class
-
BINWEB-INF/classes/com/bullseyecomputing/beans/AddressListBean.class
-
BINWEB-INF/classes/com/bullseyecomputing/servlets/ConnectionListener.class
-
BINWEB-INF/classes/com/bullseyecomputing/servlets/DetailQueryServlet.class
-
BINWEB-INF/classes/com/bullseyecomputing/servlets/FilterQueryServlet.class
-
BINWEB-INF/classes/com/bullseyecomputing/servlets/ListQueryServlet.class
-
BINWEB-INF/classes/com/bullseyecomputing/test/RequestTestServlet.class
-
117WEB-INF/code/AddressDataBean.java
-
77WEB-INF/code/AddressListBean.java
-
45WEB-INF/code/ConnectionListener.java
-
128WEB-INF/code/DetailQueryServlet.java
-
76WEB-INF/code/DetailUpdateServlet.java
-
162WEB-INF/code/FilterQueryServlet.java
-
191WEB-INF/code/ListQueryServlet.java
-
107WEB-INF/code/junk/AddressDataBean.java
-
152WEB-INF/code/junk/DataQueryBean.java
-
34WEB-INF/code/junk/DataQueryServlet.java
-
90WEB-INF/code/junk/ListDataBean.java
-
33WEB-INF/code/junk/LoginServlet.java
-
39WEB-INF/code/junk/RequestTestServlet.java
-
10WEB-INF/code/junk/ServerInfoServlet.java
-
129WEB-INF/web.xml
-
161addressData.jsp
-
67addressList.jsp
-
9checklogin.jsp
-
14endSession.jsp
-
BINimages/750px.png
-
BINimages/766px.png
-
13include/pageHeader.jsp
-
1index.jsp
-
25login.jsp
-
52oldAddressList.jsp
-
94style/common.css
-
185style/old.css
-
269test-1.jsp
-
139test-2.jsp
-
178test.html
-
52testpage.jsp
@ -0,0 +1,12 @@ |
|||||
|
<% |
||||
|
// FileName="Connection_jdbc_conn.htm" |
||||
|
// Type="JDBC" "" |
||||
|
// DesigntimeType="JDBC" |
||||
|
// HTTP="true" |
||||
|
// Catalog="" |
||||
|
// Schema="" |
||||
|
String MM_jimi_DRIVER = "org.postgresql.Driver"; |
||||
|
String MM_jimi_USERNAME = "guest"; |
||||
|
String MM_jimi_PASSWORD = ""; |
||||
|
String MM_jimi_STRING = "jdbc:postgresql:jimi"; |
||||
|
%> |
After Width: 18 | Height: 13 | Size: 128 B |
After Width: 18 | Height: 13 | Size: 93 B |
After Width: 14 | Height: 13 | Size: 67 B |
After Width: 14 | Height: 13 | Size: 67 B |
@ -0,0 +1,117 @@ |
|||||
|
// AddressDataBean.java |
||||
|
// JavaBean for storing and manipulating an address entry. |
||||
|
package com.bullseyecomputing.beans; |
||||
|
|
||||
|
public class AddressDataBean { |
||||
|
private String idNumber; |
||||
|
private String name; |
||||
|
private String street; |
||||
|
private String suite; |
||||
|
private String city; |
||||
|
private String state; |
||||
|
private String zipcode; |
||||
|
private String plus4; |
||||
|
private Phone phone; |
||||
|
private Phone fax; |
||||
|
private String note; |
||||
|
|
||||
|
// idNumber accessor methods |
||||
|
public void setIdNumber(String id) { |
||||
|
idNumber = id; |
||||
|
} |
||||
|
|
||||
|
public String getIdNumber() { |
||||
|
return idNumber; |
||||
|
} |
||||
|
|
||||
|
// name accessor methods |
||||
|
public void setName(String name) { |
||||
|
this.name = name; |
||||
|
} |
||||
|
|
||||
|
public String getName() { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
// street accessor methods |
||||
|
public void setStreet(String street) { |
||||
|
this.street = street; |
||||
|
} |
||||
|
|
||||
|
public String getStreet() { |
||||
|
return street; |
||||
|
} |
||||
|
|
||||
|
// suite accessor methods |
||||
|
public void setSuite(String suite) { |
||||
|
this.suite = suite; |
||||
|
} |
||||
|
|
||||
|
public String getSuite() { |
||||
|
return suite; |
||||
|
} |
||||
|
|
||||
|
// city accessor methods |
||||
|
public void setCity(String city) { |
||||
|
this.city = city; |
||||
|
} |
||||
|
|
||||
|
public String getCity() { |
||||
|
return city; |
||||
|
} |
||||
|
|
||||
|
// state accessor methods |
||||
|
public void setState(String state) { |
||||
|
this.state = state; |
||||
|
} |
||||
|
|
||||
|
public String getState() { |
||||
|
return state; |
||||
|
} |
||||
|
|
||||
|
// zipcode accessor methods |
||||
|
public void setZipcode(String zip) { |
||||
|
zipcode = zip; |
||||
|
} |
||||
|
|
||||
|
public String getZipcode() { |
||||
|
return zipcode; |
||||
|
} |
||||
|
|
||||
|
// plus4 accessor methods |
||||
|
public void setPlus4(String plus4) { |
||||
|
this.plus4 = plus4; |
||||
|
} |
||||
|
|
||||
|
public String getPlus4() { |
||||
|
return plus4; |
||||
|
} |
||||
|
|
||||
|
// Inner class for phone data |
||||
|
class Phone { |
||||
|
|
||||
|
String type; |
||||
|
String areacode; |
||||
|
String number; |
||||
|
String comment; |
||||
|
} |
||||
|
|
||||
|
// areacode accessor methods |
||||
|
public void setAreacode(String areacode) { |
||||
|
this.areacode = areacode; |
||||
|
} |
||||
|
|
||||
|
public String getAreacode() { |
||||
|
return areacode; |
||||
|
} |
||||
|
|
||||
|
// phone accessor methods |
||||
|
public void setPhone(String phone) { |
||||
|
this.phone = phone; |
||||
|
} |
||||
|
|
||||
|
public String getPhone() { |
||||
|
return phone; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,77 @@ |
|||||
|
// AddressListBean.java |
||||
|
// JavaBean for storing and manipulating address list entries. |
||||
|
package com.bullseyecomputing.beans; |
||||
|
|
||||
|
public class AddressListBean { |
||||
|
private String idNumber; |
||||
|
private String name; |
||||
|
private String street; |
||||
|
private String city; |
||||
|
private String state; |
||||
|
private String zipcode; |
||||
|
private String plus4; |
||||
|
|
||||
|
// idNumber accessor methods |
||||
|
public void setIdNumber(String id) { |
||||
|
idNumber = id; |
||||
|
} |
||||
|
|
||||
|
public String getIdNumber() { |
||||
|
return idNumber; |
||||
|
} |
||||
|
|
||||
|
// name accessor methods |
||||
|
public void setName(String name) { |
||||
|
this.name = name; |
||||
|
} |
||||
|
|
||||
|
public String getName() { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
// street accessor methods |
||||
|
public void setStreet(String street) { |
||||
|
this.street = street; |
||||
|
} |
||||
|
|
||||
|
public String getStreet() { |
||||
|
return street; |
||||
|
} |
||||
|
|
||||
|
// city accessor methods |
||||
|
public void setCity(String city) { |
||||
|
this.city = city; |
||||
|
} |
||||
|
|
||||
|
public String getCity() { |
||||
|
return city; |
||||
|
} |
||||
|
|
||||
|
// state accessor methods |
||||
|
public void setState(String state) { |
||||
|
this.state = state; |
||||
|
} |
||||
|
|
||||
|
public String getState() { |
||||
|
return state; |
||||
|
} |
||||
|
|
||||
|
// zipcode accessor methods |
||||
|
public void setZipcode(String zip) { |
||||
|
zipcode = zip; |
||||
|
} |
||||
|
|
||||
|
public String getZipcode() { |
||||
|
return zipcode; |
||||
|
} |
||||
|
|
||||
|
// plus4 accessor methods |
||||
|
public void setPlus4(String plus4) { |
||||
|
this.plus4 = plus4; |
||||
|
} |
||||
|
|
||||
|
public String getPlus4() { |
||||
|
return plus4; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
// ConnectionListener.java |
||||
|
// This object implements the HttpSessionBindingListener interface for the |
||||
|
// purpose of maintaining a persistent database connection throughout the |
||||
|
// scope of a session. When the session becomes unbound, any uncommitted |
||||
|
// transactions are rolled back and the connection is released. |
||||
|
|
||||
|
package com.bullseyecomputing.servlets; |
||||
|
|
||||
|
import java.sql.*; |
||||
|
import javax.servlet.http.*; |
||||
|
|
||||
|
public class ConnectionListener implements HttpSessionBindingListener { |
||||
|
private Connection connection = null; |
||||
|
|
||||
|
public ConnectionListener(Connection conn) { |
||||
|
connection = conn; |
||||
|
try { |
||||
|
connection.setAutoCommit(false); |
||||
|
} |
||||
|
catch(SQLException e) { |
||||
|
// error handler here... |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public Connection getConnection() { |
||||
|
return connection; |
||||
|
} |
||||
|
|
||||
|
public void valueBound(HttpSessionBindingEvent event) { |
||||
|
// called when the object is added to a session |
||||
|
} |
||||
|
|
||||
|
public void valueUnbound(HttpSessionBindingEvent event) { |
||||
|
// called when the session expires |
||||
|
try { |
||||
|
if(connection != null) { |
||||
|
connection.rollback(); |
||||
|
connection.close(); |
||||
|
} |
||||
|
} |
||||
|
catch(SQLException e) { |
||||
|
// error handler here... |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,128 @@ |
|||||
|
// DetailQueryServlet.java |
||||
|
// This servlet receives an addressee identifier as a request argument, |
||||
|
// and makes the required query/(queries) to retrieve the addressee's |
||||
|
// detail info. This info is loaded into a DataBean that is then stored |
||||
|
// in the session environment. The servlet then redirects to the correct |
||||
|
// JSP for display. |
||||
|
|
||||
|
package com.bullseyecomputing.servlets; |
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.util.*; |
||||
|
import java.sql.*; |
||||
|
|
||||
|
import javax.servlet.*; |
||||
|
import javax.servlet.http.*; |
||||
|
|
||||
|
import com.bullseyecomputing.beans.AddressDataBean; |
||||
|
|
||||
|
public class DetailQueryServlet extends HttpServlet { |
||||
|
|
||||
|
ServletContext context; |
||||
|
|
||||
|
public void init(ServletConfig config) throws ServletException { |
||||
|
super.init(config); |
||||
|
|
||||
|
// Grab a handle to the local context |
||||
|
context = getServletContext(); |
||||
|
|
||||
|
// Get the name of the jdbc driver from an init param |
||||
|
String jdbcDriver = getInitParameter("jdbcDriver"); |
||||
|
// Now try to load the driver |
||||
|
try { |
||||
|
Class.forName(jdbcDriver); |
||||
|
} |
||||
|
catch(ClassNotFoundException e) { |
||||
|
context.log("jdbcDriver: ", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) |
||||
|
throws ServletException, IOException { |
||||
|
|
||||
|
HttpSession session = request.getSession(false); |
||||
|
ConnectionListener dbListener; |
||||
|
Statement transaction; |
||||
|
ResultSet results; |
||||
|
RequestDispatcher dispatcher; |
||||
|
|
||||
|
// Bail if we're not part of a session |
||||
|
if(session == null) { |
||||
|
dispatcher = context.getRequestDispatcher("/index.jsp"); |
||||
|
dispatcher.forward(request, response); |
||||
|
} |
||||
|
|
||||
|
// Look for an existing db connection in the session environment |
||||
|
dbListener = (ConnectionListener) session.getAttribute("dbConnection"); |
||||
|
// Create one if it's not there |
||||
|
if(dbListener == null) { |
||||
|
// Load the params from init |
||||
|
String jdbcURL = getInitParameter("jdbcURL"); |
||||
|
String jdbcUser = getInitParameter("jdbcUser"); |
||||
|
String jdbcPassword = getInitParameter("jdbcPassword"); |
||||
|
// Attempt to make the connection |
||||
|
try { |
||||
|
Connection conn = DriverManager.getConnection(jdbcURL,jdbcUser,jdbcPassword); |
||||
|
dbListener = new ConnectionListener(conn); |
||||
|
// Push the new connection into the session environment |
||||
|
session.setAttribute("dbConnection", dbListener); |
||||
|
} |
||||
|
catch(SQLException e) { |
||||
|
context.log("dbConnection", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Grab a local handle to the session's db connection |
||||
|
Connection db = dbListener.getConnection(); |
||||
|
|
||||
|
// Build the query based on init and request parameters |
||||
|
String selected = getInitParameter("selected"); |
||||
|
String table = getInitParameter("table"); |
||||
|
String id = request.getParameter("id"); |
||||
|
|
||||
|
StringBuffer query = new StringBuffer(); |
||||
|
query.append("select ").append(selected); |
||||
|
query.append(" from ").append(table); |
||||
|
query.append(" where id = ").append(id); |
||||
|
// |
||||
|
context.log(query.toString()); |
||||
|
// |
||||
|
|
||||
|
// Execute the query |
||||
|
try { |
||||
|
transaction = db.createStatement(); |
||||
|
results = transaction.executeQuery(query.toString()); |
||||
|
|
||||
|
// move to the first (and only) record |
||||
|
results.next(); |
||||
|
|
||||
|
// Create a DataBean to store the results |
||||
|
AddressDataBean address = new AddressDataBean(); |
||||
|
|
||||
|
// Push the data into the DataBean |
||||
|
address.setIdNumber(Integer.toString(results.getInt(1))); |
||||
|
address.setName(results.getString(2)); |
||||
|
address.setStreet(results.getString(3)); |
||||
|
address.setCity(results.getString(4)); |
||||
|
address.setState(results.getString(5)); |
||||
|
address.setZipcode(results.getString(6)); |
||||
|
address.setPlus4(results.getString(7)); |
||||
|
address.setAreacode(results.getString(8)); |
||||
|
address.setPhone(results.getString(9)); |
||||
|
|
||||
|
// Push the AddressBean into the session environment |
||||
|
session.setAttribute("address.data", address); |
||||
|
|
||||
|
// Close the database transaction |
||||
|
results.close(); |
||||
|
transaction.close(); |
||||
|
} |
||||
|
catch(SQLException e) { |
||||
|
context.log("DetailQueryServlet: Error during SQL transaction", e); |
||||
|
} |
||||
|
|
||||
|
// Forward to the corresponding JSP |
||||
|
dispatcher = request.getRequestDispatcher("addressData.jsp"); |
||||
|
dispatcher.forward(request, response); |
||||
|
} |
||||
|
} |
@ -0,0 +1,76 @@ |
|||||
|
// DetailUpdateServlet.java |
||||
|
// This servlet receives the contents of the addressData form via HTTP/POST. |
||||
|
// That data is then compared to the data within the AddressDataBean stored |
||||
|
// in the session environment. The fields that have been changed are then |
||||
|
// tagged for update. A sql update statement is then formulated from the tagged |
||||
|
// data fields. |
||||
|
|
||||
|
package com.bullseyecomputing.servlets; |
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.util.*; |
||||
|
import java.sql.*; |
||||
|
|
||||
|
import jacax.servlet.*; |
||||
|
import javax.servlet.http.*; |
||||
|
|
||||
|
import com.bullseyecomputing.beans.AddressDataBean; |
||||
|
|
||||
|
public class DetailUpdateServlet extends HttpServlet { |
||||
|
|
||||
|
ServletContext context; |
||||
|
|
||||
|
public void init(ServletConfig config) throws ServletException { |
||||
|
super.init(config); |
||||
|
|
||||
|
// Grab a handle to the local context |
||||
|
context = getServletContext(); |
||||
|
|
||||
|
// Get the jdbc driver name from an init param |
||||
|
String jdbcDriver = getInitParameter("jdbcDriver:); |
||||
|
|
||||
|
// Attempt to load the jdbc driver |
||||
|
try { |
||||
|
Class.forName(jdbcDriver); |
||||
|
} |
||||
|
catch(ClassNotFoundException e) { |
||||
|
context.log("jdbcDriver: ", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void doPost(HttpServletRequest request, HttpServletResponse response) |
||||
|
throws ServletException, IOException { |
||||
|
|
||||
|
HttpSession session = request.getSession(false): |
||||
|
ConnectionListener dbListener; |
||||
|
Statement transaction; |
||||
|
RequestDispatcher dispatcher; |
||||
|
|
||||
|
// Bail if this is not an existing session |
||||
|
if(session == null) { |
||||
|
dispatcher = request.getRequestDispatcher("/index.jsp"); |
||||
|
dispatcher.forward(request, response); |
||||
|
} |
||||
|
|
||||
|
// get POST parameters |
||||
|
|
||||
|
////////// |
||||
|
// Check the session environ for an existing db connection |
||||
|
/////////// |
||||
|
dbListener = (ConnectionListener) session.getAttribute("dbConnection"); |
||||
|
if(dbListener == null) { |
||||
|
String jdbcURL = getInitParameter("jdbcURL"); |
||||
|
String jdbcUser = getInitParameter("jdbcUser"); |
||||
|
String jdbcPassword = getInitParameter("jdbcPassword"); |
||||
|
try { |
||||
|
Connection conn = DriverManager.getConnection(jdbcURL,jdbcUser,jdbcPassword); |
||||
|
dbListener = new ConnectionListener(conn); |
||||
|
session.setAttribute("dbConnection:, dbListener); |
||||
|
} |
||||
|
catch(SQLException e) { |
||||
|
context.log("dbConnection: ", e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Grab a local handle to the connection |
||||
|
Connection db = dbListener.getConnection(); |
@ -0,0 +1,162 @@ |
|||||
|
// FilterQueryServlet.java |
||||
|
// |
||||
|
|
||||
|
package com.bullseyecomputing.servlets; |
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.util.*; |
||||
|
|
||||
|
import javax.servlet.*; |
||||
|
import javax.servlet.http.*; |
||||
|
|
||||
|
import org.apache.regexp.*; |
||||
|
|
||||
|
public class FilterQueryServlet extends HttpServlet { |
||||
|
|
||||
|
ServletContext context; |
||||
|
private static RE allPattern, statePattern, cityPattern; |
||||
|
private static RE zipcodePattern, limitPattern; |
||||
|
|
||||
|
// Pre-compiled regular expression '^([Aa][Ll][Ll])|\*$' |
||||
|
private static char[] allPatternInstructions = |
||||
|
{ |
||||
|
0x007c, 0x0000, 0x0024, 0x005e, 0x0000, 0x0003, 0x0028, |
||||
|
0x0001, 0x0003, 0x007c, 0x0000, 0x0018, 0x005b, 0x0002, |
||||
|
0x0007, 0x0041, 0x0041, 0x0061, 0x0061, 0x005b, 0x0002, |
||||
|
0x0007, 0x004c, 0x004c, 0x006c, 0x006c, 0x005b, 0x0002, |
||||
|
0x0007, 0x004c, 0x004c, 0x006c, 0x006c, 0x0029, 0x0001, |
||||
|
0x000d, 0x007c, 0x0000, 0x000a, 0x0041, 0x0001, 0x0004, |
||||
|
0x002a, 0x0024, 0x0000, 0x0003, 0x0045, 0x0000, 0x0000, |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
// Pre-compiled regular expression '^[A-Za-z]{2}$' |
||||
|
private static char[] statePatternInstructions = |
||||
|
{ |
||||
|
0x007c, 0x0000, 0x0017, 0x005e, 0x0000, 0x0003, 0x005b, |
||||
|
0x0002, 0x0007, 0x0041, 0x005a, 0x0061, 0x007a, 0x005b, |
||||
|
0x0002, 0x0007, 0x0041, 0x005a, 0x0061, 0x007a, 0x0024, |
||||
|
0x0000, 0x0003, 0x0045, 0x0000, 0x0000, |
||||
|
}; |
||||
|
|
||||
|
// Pre-compiled regular expression '^[A-Za-z\+\.]{4,}$' |
||||
|
private static char[] cityPatternInstructions = |
||||
|
{ |
||||
|
0x007c, 0x0000, 0x004f, 0x005e, 0x0000, 0x0003, 0x005b, |
||||
|
0x0004, 0x000b, 0x0041, 0x005a, 0x0061, 0x007a, 0x002b, |
||||
|
0x002b, 0x002e, 0x002e, 0x005b, 0x0004, 0x000b, 0x0041, |
||||
|
0x005a, 0x0061, 0x007a, 0x002b, 0x002b, 0x002e, 0x002e, |
||||
|
0x005b, 0x0004, 0x000b, 0x0041, 0x005a, 0x0061, 0x007a, |
||||
|
0x002b, 0x002b, 0x002e, 0x002e, 0x005b, 0x0004, 0x000b, |
||||
|
0x0041, 0x005a, 0x0061, 0x007a, 0x002b, 0x002b, 0x002e, |
||||
|
0x002e, 0x007c, 0x0000, 0x0014, 0x005b, 0x0004, 0x000b, |
||||
|
0x0041, 0x005a, 0x0061, 0x007a, 0x002b, 0x002b, 0x002e, |
||||
|
0x002e, 0x007c, 0x0000, 0x0003, 0x0047, 0x0000, 0xffef, |
||||
|
0x007c, 0x0000, 0x0003, 0x004e, 0x0000, 0x0003, 0x0024, |
||||
|
0x0000, 0x0003, 0x0045, 0x0000, 0x0000, |
||||
|
}; |
||||
|
|
||||
|
// Pre-compiled regular expression '^[0-9]{3,5}$' |
||||
|
private static char[] zipcodePatternInstructions = |
||||
|
{ |
||||
|
0x007c, 0x0000, 0x0034, 0x005e, 0x0000, 0x0003, 0x005b, |
||||
|
0x0001, 0x0005, 0x0030, 0x0039, 0x005b, 0x0001, 0x0005, |
||||
|
0x0030, 0x0039, 0x007c, 0x0000, 0x0008, 0x005b, 0x0001, |
||||
|
0x0008, 0x0030, 0x0039, 0x007c, 0x0000, 0x0003, 0x004e, |
||||
|
0x0000, 0x0003, 0x007c, 0x0000, 0x0008, 0x005b, 0x0001, |
||||
|
0x0008, 0x0030, 0x0039, 0x007c, 0x0000, 0x0003, 0x004e, |
||||
|
0x0000, 0x0003, 0x005b, 0x0001, 0x0005, 0x0030, 0x0039, |
||||
|
0x0024, 0x0000, 0x0003, 0x0045, 0x0000, 0x0000, |
||||
|
}; |
||||
|
|
||||
|
// Pre-compiled regular expression '^limit=[0-9]+$' |
||||
|
private static char[] limitPatternInstructions = |
||||
|
{ |
||||
|
0x007c, 0x0000, 0x0023, 0x005e, 0x0000, 0x0003, 0x0041, |
||||
|
0x0006, 0x0009, 0x006c, 0x0069, 0x006d, 0x0069, 0x0074, |
||||
|
0x003d, 0x005b, 0x0001, 0x0005, 0x0030, 0x0039, 0x007c, |
||||
|
0x0000, 0x0006, 0x0047, 0x0000, 0xfff8, 0x007c, 0x0000, |
||||
|
0x0003, 0x004e, 0x0000, 0x0003, 0x0024, 0x0000, 0x0003, |
||||
|
0x0045, 0x0000, 0x0000, |
||||
|
}; |
||||
|
|
||||
|
public void init(ServletConfig config) throws ServletException { |
||||
|
super.init(config); |
||||
|
|
||||
|
// Grab a handle to the local context |
||||
|
context = getServletContext(); |
||||
|
|
||||
|
|
||||
|
allPattern = new RE(new REProgram(allPatternInstructions)); |
||||
|
statePattern = new RE(new REProgram(statePatternInstructions)); |
||||
|
cityPattern = new RE(new REProgram(cityPatternInstructions)); |
||||
|
zipcodePattern = new RE(new REProgram(zipcodePatternInstructions)); |
||||
|
limitPattern = new RE(new REProgram(limitPatternInstructions), |
||||
|
RE.MATCH_CASEINDEPENDENT); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) |
||||
|
throws ServletException, IOException { |
||||
|
|
||||
|
RequestDispatcher dispatcher; |
||||
|
HttpSession session = request.getSession(false); |
||||
|
|
||||
|
// bail if we're not part of a session |
||||
|
if(session == null) { |
||||
|
dispatcher = request.getRequestDispatcher("/index.jsp"); |
||||
|
dispatcher.forward(request, response); |
||||
|
} |
||||
|
|
||||
|
// get HTTP args |
||||
|
String query = request.getParameter("filter"); |
||||
|
|
||||
|
String url = ""; |
||||
|
String all = ""; |
||||
|
String state = ""; |
||||
|
String city = ""; |
||||
|
String zipcode = ""; |
||||
|
String limit = ""; |
||||
|
|
||||
|
// tokenize "query" String |
||||
|
context.log(query); |
||||
|
StringTokenizer str = new StringTokenizer(query, ";:, "); |
||||
|
context.log(str.toString()); |
||||
|
while(str.hasMoreTokens()) { |
||||
|
// Grab the next as String |
||||
|
String token = str.nextToken(); |
||||
|
// Check for a match |
||||
|
if(allPattern.match(token)) { |
||||
|
session.removeAttribute("filter"); |
||||
|
all = "true"; |
||||
|
} |
||||
|
if(statePattern.match(token)) { |
||||
|
state = token; |
||||
|
break; |
||||
|
} |
||||
|
if(zipcodePattern.match(token)) { |
||||
|
zipcode = token; |
||||
|
break; |
||||
|
} |
||||
|
if(limitPattern.match(token)) { limit = token; } |
||||
|
if(cityPattern.match(token)) { city = token; } |
||||
|
} |
||||
|
|
||||
|
// Assemble our new filter String |
||||
|
if(all != "true") { |
||||
|
StringBuffer filter = new StringBuffer(); |
||||
|
if(state != "") { |
||||
|
filter.append("state:").append(state).append(":"); |
||||
|
} |
||||
|
if(city != "") { |
||||
|
filter.append("city:").append(city).append(":"); |
||||
|
} |
||||
|
if(zipcode != "") { |
||||
|
filter.append("zipcode:").append(zipcode).append(":"); |
||||
|
} |
||||
|
if(filter.length() != 0) { url += "filter=" + filter + "&"; } |
||||
|
} |
||||
|
if(limit != "") { url += limit + "&"; } |
||||
|
response.sendRedirect("/getList?" + url); |
||||
|
} |
||||
|
} |
@ -0,0 +1,191 @@ |
|||||
|
// ListQueryServlet.java |
||||
|
// Servlet that will use its request parameters to to generate a |
||||
|
// collection of DataBeans with an SQL query. The SQL connection |
||||
|
// is a persistent part of the HttpSession. |
||||
|
|
||||
|
package com.bullseyecomputing.servlets; |
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.util.*; |
||||
|
import java.sql.*; |
||||
|
|
||||
|
import javax.servlet.*; |
||||
|
import javax.servlet.http.*; |
||||
|
|
||||
|
import com.bullseyecomputing.beans.AddressListBean; |
||||
|
|
||||
|
public class ListQueryServlet extends HttpServlet { |
||||
|
|
||||
|
ServletContext context; |
||||
|
ResultSet results; |
||||
|
|
||||
|
public void init(ServletConfig config) throws ServletException { |
||||
|
super.init(config); |
||||
|
|
||||
|
// Grab a handle to our context |
||||
|
context = getServletContext(); |
||||
|
|
||||
|
// Get the jdbcDriver from an init param, and try to load it |
||||
|
String jdbcDriver = getInitParameter("jdbcDriver"); |
||||
|
try { |
||||
|
Class.forName(jdbcDriver); |
||||
|
} |
||||
|
catch(ClassNotFoundException e) { |
||||
|
context.log("ListQueryServlet: jdbcDriver failure"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) |
||||
|
throws ServletException, IOException { |
||||
|
|
||||
|
HttpSession session = request.getSession(false); |
||||
|
ConnectionListener dbSession; |
||||
|
Statement transaction; |
||||
|
RequestDispatcher dispatcher; |
||||
|
|
||||
|
// If we have no session, we're in the wrong place |
||||
|
if(session == null) { |
||||
|
dispatcher = request.getRequestDispatcher("/index.jsp"); |
||||
|
dispatcher.forward(request, response); |
||||
|
} |
||||
|
|
||||
|
// Look in the session environment for our database connection |
||||
|
dbSession = (ConnectionListener) session.getAttribute("dbConnection"); |
||||
|
// Create one if needed |
||||
|
if(dbSession == null) { |
||||
|
String jdbcURL = getInitParameter("jdbcURL"); |
||||
|
String jdbcUser = getInitParameter("jdbcUser"); |
||||
|
String jdbcPassword = getInitParameter("jdbcPassword"); |
||||
|
try { |
||||
|
Connection conn = DriverManager.getConnection(jdbcURL,jdbcUser,jdbcPassword); |
||||
|
dbSession = new ConnectionListener(conn); |
||||
|
session.setAttribute("dbConnection", dbSession); |
||||
|
} |
||||
|
catch(SQLException e) { |
||||
|
context.log("Error creating database connection"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Get a local handle to the connection stored in the session |
||||
|
Connection db = dbSession.getConnection(); |
||||
|
|
||||
|
// Formulate our query based on init and request parameters |
||||
|
String selected = getInitParameter("selected"); |
||||
|
String table = getInitParameter("table"); |
||||
|
String newFilter = request.getParameter("filter"); |
||||
|
String newOrder = request.getParameter("orderby"); |
||||
|
String newLimit = request.getParameter("limit"); |
||||
|
|
||||
|
if(newFilter != null) { // add error checking for filter value |
||||
|
session.setAttribute("filter", newFilter); |
||||
|
} |
||||
|
if(newOrder != null) { // add error checking for orderby value |
||||
|
String oldOrder = (String) session.getAttribute("orderby"); |
||||
|
String direction = (String) session.getAttribute("direction"); |
||||
|
context.log("oldOrder = "+oldOrder+" "+direction); |
||||
|
|
||||
|
// Set initial orderby values |
||||
|
if(oldOrder == null) { oldOrder = ""; } |
||||
|
if(direction == null) { direction = "asc"; } |
||||
|
|
||||
|
// Toggle direction |
||||
|
if(oldOrder.equals(newOrder)) { |
||||
|
context.log("toggle direction"); |
||||
|
if(direction.equals("asc")) { |
||||
|
direction = "desc"; |
||||
|
} |
||||
|
else { |
||||
|
direction = "asc"; |
||||
|
} |
||||
|
} |
||||
|
else { |
||||
|
context.log("'"+oldOrder+"' != '"+newOrder+"'"); |
||||
|
} |
||||
|
|
||||
|
// Push values into session |
||||
|
session.setAttribute("orderby", newOrder); |
||||
|
session.setAttribute("direction", direction); |
||||
|
context.log("newOrder = "+newOrder+" "+direction); |
||||
|
} |
||||
|
if(newLimit != null) { // add error checking for limit value |
||||
|
session.setAttribute("limit", newLimit); |
||||
|
} |
||||
|
|
||||
|
// Get values from session |
||||
|
String filter = (String) session.getAttribute("filter"); |
||||
|
String orderby = (String) session.getAttribute("orderby"); |
||||
|
String direction = (String) session.getAttribute("direction"); |
||||
|
String limit = (String) session.getAttribute("limit"); |
||||
|
|
||||
|
StringBuffer query = new StringBuffer(); |
||||
|
query.append("select ").append(selected); |
||||
|
query.append(" from ").append(table); |
||||
|
|
||||
|
if(filter != null && filter != "") { |
||||
|
StringTokenizer str = new StringTokenizer(filter,":"); |
||||
|
query.append(" where ").append(str.nextToken()); |
||||
|
query.append(" ~* '").append(str.nextToken()).append("'"); |
||||
|
// Multiple filters? |
||||
|
while(str.hasMoreTokens()) { |
||||
|
query.append(" and ").append(str.nextToken()); |
||||
|
query.append(" ~* '").append(str.nextToken()).append("'"); |
||||
|
} |
||||
|
} |
||||
|
if(orderby != null) { |
||||
|
query.append(" order by ").append(orderby); |
||||
|
} |
||||
|
if(direction != null) { |
||||
|
query.append(" ").append(direction); |
||||
|
} |
||||
|
if(limit != null) { |
||||
|
query.append(" limit ").append(limit); |
||||
|
} |
||||
|
|
||||
|
// Execute our calculated SQL query |
||||
|
try { |
||||
|
transaction = db.createStatement(); |
||||
|
context.log(query.toString()); |
||||
|
results = transaction.executeQuery(query.toString()); |
||||
|
|
||||
|
// Traverse the ResultSet and create an ArrayList of DataBeans |
||||
|
ArrayList resultList = new ArrayList(); |
||||
|
String dbField = ""; |
||||
|
|
||||
|
while(results.next()) { |
||||
|
|
||||
|
// Create a new DataBean for each row of data |
||||
|
AddressListBean address = new AddressListBean(); |
||||
|
|
||||
|
// Push the result data into the DataBean |
||||
|
address.setIdNumber(Integer.toString(results.getInt(1))); |
||||
|
address.setName(results.getString(2)); |
||||
|
address.setStreet(results.getString(3)); |
||||
|
dbField = results.getString(4).trim(); |
||||
|
address.setCity(dbField.equals("") ? " " : dbField); |
||||
|
dbField = results.getString(5).trim(); |
||||
|
address.setState(dbField.equals("") ? " " : dbField); |
||||
|
dbField = results.getString(6).trim(); |
||||
|
address.setZipcode(dbField.equals("") ? " " : dbField); |
||||
|
dbField = results.getString(7).trim(); |
||||
|
address.setPlus4(dbField.equals("") ? " " : dbField); |
||||
|
|
||||
|
// Add the DataBean to the ArrayList |
||||
|
resultList.add(address); |
||||
|
} |
||||
|
|
||||
|
// Push the ArrayList into the session environment |
||||
|
session.setAttribute("resultList", resultList); |
||||
|
|
||||
|
// Close the query transaction |
||||
|
results.close(); |
||||
|
transaction.close(); |
||||
|
} |
||||
|
catch(SQLException e) { |
||||
|
context.log("Error processing SQL Query", e); |
||||
|
} |
||||
|
|
||||
|
// Forward on to the corresponding jsp |
||||
|
dispatcher = context.getRequestDispatcher("/addressList.jsp"); |
||||
|
dispatcher.forward(request, response); |
||||
|
} |
||||
|
} |
@ -0,0 +1,107 @@ |
|||||
|
// AddressDataBean.java |
||||
|
// JavaBean that holds all the data for one address object. |
||||
|
|
||||
|
package com.bullseyecomputing.beans; |
||||
|
|
||||
|
public class AddressDataBean { |
||||
|
private int maxLength; // max string length for list variables |
||||
|
private String id; // a hash of the name + street fields |
||||
|
private String name; |
||||
|
private String listName; // a shortened version of name |
||||
|
private String street; |
||||
|
private String listStreet; |
||||
|
private String city; |
||||
|
private String state; |
||||
|
private String zip; |
||||
|
private String plus4; |
||||
|
private String listPhone; // phone needs to be a collection of phone objects |
||||
|
|
||||
|
// maxLength accessor methods |
||||
|
public void setMaxLength(int len) { |
||||
|
maxLength = len; |
||||
|
} |
||||
|
public int getMaxLength() { |
||||
|
return maxLength; |
||||
|
} |
||||
|
|
||||
|
// id accessor methods |
||||
|
public void setId(String id) { |
||||
|
this.id = id; |
||||
|
} |
||||
|
public String getId() { |
||||
|
return id; |
||||
|
} |
||||
|
|
||||
|
// name accessor methods |
||||
|
public void setName(String name) { |
||||
|
this.name = name; |
||||
|
} |
||||
|
public String getName() { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
// listName accessor methods |
||||
|
public void setListName(String name) { |
||||
|
listName = name; |
||||
|
} |
||||
|
public String getListName() { |
||||
|
return listName; |
||||
|
} |
||||
|
|
||||
|
// street accessor methods |
||||
|
public void setStreet(String street) { |
||||
|
this.street = street; |
||||
|
} |
||||
|
public String getStreet() { |
||||
|
return street; |
||||
|
} |
||||
|
|
||||
|
// listStreet accessor methods |
||||
|
public void setListStreet(String street) { |
||||
|
listStreet = street; |
||||
|
} |
||||
|
public String getListStreet() { |
||||
|
return listStreet; |
||||
|
} |
||||
|
|
||||
|
// city accessor methods |
||||
|
public void setCity(String city) { |
||||
|
this.city = city; |
||||
|
} |
||||
|
public String getCity() { |
||||
|
return city; |
||||
|
} |
||||
|
|
||||
|
// state accessor methods |
||||
|
public void setState(String state) { |
||||
|
this.state = state; |
||||
|
} |
||||
|
public String getState() { |
||||
|
return state; |
||||
|
} |
||||
|
|
||||
|
// zipcode accessor methods |
||||
|
public void setZip(String zip) { |
||||
|
this.zip = zip; |
||||
|
} |
||||
|
public String getZip() { |
||||
|
return zip; |
||||
|
} |
||||
|
|
||||
|
// zip plus4 accessor methods |
||||
|
public void setPlus4(String plus4) { |
||||
|
this.plus4 = plus4; |
||||
|
} |
||||
|
public String getPlus4() { |
||||
|
return plus4; |
||||
|
} |
||||
|
|
||||
|
// listPhone accessor methods |
||||
|
public void setListPhone(String areacode, String number) { |
||||
|
listPhone = "(" + areacode + ")" + number; |
||||
|
} |
||||
|
public String getListPhone() { |
||||
|
return listPhone; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,152 @@ |
|||||
|
// DataQueryBean.java |
||||
|
// JavaBean that will generate an SQL query for the collection of data from the |
||||
|
// specified schema. The JDBC connection parameters and SQL strings are loaded |
||||
|
// from property files. |
||||
|
|
||||
|
package com.bullseyecomputing.beans; |
||||
|
|
||||
|
// import the essentials |
||||
|
import java.io.*; |
||||
|
import java.sql.*; |
||||
|
import java.util.*; |
||||
|
|
||||
|
public class DataQueryBean { |
||||
|
private ClassLoader loader; |
||||
|
|
||||
|
private Connection dbConnection; |
||||
|
private Statement dbTransaction; |
||||
|
private String jdbcProperties = "jdbc.properties"; |
||||
|
|
||||
|
private String schema; |
||||
|
private String sqlProperties; |
||||
|
private String sqlListSelect, sqlDetailSelect; |
||||
|
|
||||
|
private String filter, orderBy, limit; |
||||
|
|
||||
|
// Constructor |
||||
|
public DataQueryBean() throws Exception { |
||||
|
|
||||
|
Properties props = new Properties(); |
||||
|
|
||||
|
// Grab our ClassLoader |
||||
|
loader = this.getClass().getClassLoader(); |
||||
|
|
||||
|
// Use the ClassLoader to locate and load the property file. |
||||
|
try { |
||||
|
props.load(loader.getResourceAsStream(jdbcProperties)); |
||||
|
} |
||||
|
|
||||
|
// Handle the exception if the file is unavailable |
||||
|
catch(IOException ioException) { |
||||
|
ioException.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
// Get the JDBC parameters |
||||
|
String jdbcDriver = props.getProperty("jdbcDriver"); |
||||
|
String jdbcURL = props.getProperty("jdbcURL"); |
||||
|
|
||||
|
// Get the User parameters |
||||
|
String jdbcUser = props.getProperty("jdbcUser"); |
||||
|
String jdbcPassword = props.getProperty("jdbcPassword"); |
||||
|
|
||||
|
// Create a JDBC connection |
||||
|
Class.forName(jdbcDriver); |
||||
|
dbConnection = DriverManager.getConnection(jdbcURL, jdbcUser, jdbcPassword); |
||||
|
|
||||
|
} |
||||
|
// Constructor |
||||
|
|
||||
|
// Schema |
||||
|
public void setSchema(String schema) { |
||||
|
Properties props = new Properties(); |
||||
|
|
||||
|
this.schema = schema; |
||||
|
sqlProperties = schema + "Query.properties"; |
||||
|
|
||||
|
// Load the SQL Properties |
||||
|
try { |
||||
|
props.load(loader.getResourceAsStream(sqlProperties)); |
||||
|
} |
||||
|
|
||||
|
catch(IOException ioException) { |
||||
|
ioException.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
// Get the SQL strings |
||||
|
sqlListSelect = props.getProperty("sqlListSelect"); |
||||
|
sqlDetailSelect = props.getProperty("sqlDetailSelect"); |
||||
|
} |
||||
|
// Schema |
||||
|
|
||||
|
// Filter |
||||
|
public void setFilter(String filterString) { |
||||
|
filter = filterString; |
||||
|
sqlListSelect += " where " + filter; |
||||
|
} |
||||
|
public String getFilter() { |
||||
|
return filter; |
||||
|
} |
||||
|
// Filter |
||||
|
|
||||
|
// OrderBy |
||||
|
public void setOrderBy(String orderByString) { |
||||
|
orderBy = orderByString; |
||||
|
sqlListSelect += " order by " + orderBy; |
||||
|
} |
||||
|
public String getOrderBy() { |
||||
|
return orderBy; |
||||
|
} |
||||
|
// OrderBy |
||||
|
|
||||
|
// Limit |
||||
|
public void setLimit(String limit) { |
||||
|
this.limit = limit; |
||||
|
sqlListSelect += " limit " + limit; |
||||
|
} |
||||
|
public String getLimit() { |
||||
|
return limit; |
||||
|
} |
||||
|
// Limit |
||||
|
|
||||
|
// getDataList |
||||
|
public ArrayList getDataList() throws SQLException { |
||||
|
|
||||
|
ArrayList dataList = new ArrayList(); |
||||
|
|
||||
|
dbTransaction = dbConnection.createStatement(); |
||||
|
ResultSet results = dbTransaction.executeQuery(sqlListSelect); |
||||
|
|
||||
|
while(results.next()) { |
||||
|
ListDataBean data = new ListDataBean(); |
||||
|
// Set the Bean values |
||||
|
data.setId(Integer.toString(results.getInt(1))); |
||||
|
data.setName(results.getString(2)); |
||||
|
data.setStreet(results.getString(3)); |
||||
|
data.setCity(results.getString(4)); |
||||
|
data.setState(results.getString(5)); |
||||
|
data.setZip(results.getString(6)); |
||||
|
// handle empty values |
||||
|
String plus4 = results.getString(7).trim(); |
||||
|
data.setPlus4(plus4.equals("") ? " " : plus4); |
||||
|
|
||||
|
dataList.add(data); |
||||
|
} |
||||
|
dbTransaction.close(); |
||||
|
return dataList; |
||||
|
} |
||||
|
// getDataList |
||||
|
|
||||
|
// Finalize |
||||
|
protected void finalize() { |
||||
|
try { |
||||
|
dbConnection.close(); |
||||
|
} |
||||
|
|
||||
|
catch(SQLException sqlException) { |
||||
|
sqlException.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
// Finalize |
||||
|
|
||||
|
} |
||||
|
// class |
@ -0,0 +1,34 @@ |
|||||
|
// DataQueryServlet.java |
||||
|
// SingleThreadModel servlet that will create and maintain database connections. |
||||
|
// The database connection parameters are read from a properties file. The servlet |
||||
|
// formulates queries based on the its request parameters and session properties. |
||||
|
|
||||
|
package com.bullseyecomputing.servlets; |
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.util.*; |
||||
|
import java.sql.*; |
||||
|
import javax.servlet.*; |
||||
|
import javax.servlet.http.*; |
||||
|
|
||||
|
public class DataQueryServlet extends HttpServlet implements SingleThreadModel { |
||||
|
|
||||
|
// Initialization code |
||||
|
Connection conn = null; |
||||
|
|
||||
|
public void init(ServletConfig config) throws ServletException { |
||||
|
super.init(config) |
||||
|
loadConnectionParameters(); |
||||
|
conn = createConnection(); |
||||
|
conn.setAutoCommit(false); |
||||
|
} |
||||
|
|
||||
|
// HTTP GET handler |
||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) |
||||
|
throws ServletException, IOException { |
||||
|
|
||||
|
// Check for existing session |
||||
|
HttpSession session = request.getSession(false); |
||||
|
String user = session.getAttribute("j_username"); |
||||
|
|
||||
|
// Get query parameters from the request args |
@ -0,0 +1,90 @@ |
|||||
|
// ListDataBean.java |
||||
|
// JavaBean that holds the data for one address that will be |
||||
|
// part of a list of addresses generated by another bean. |
||||
|
|
||||
|
package com.bullseyecomputing.beans; |
||||
|
|
||||
|
public class ListDataBean { |
||||
|
private int maxLength; // maximum string length for name and street |
||||
|
private String id; // possibly a hash of the name + street fields |
||||
|
private String name; // possibly a shortened version of the name |
||||
|
private String street; |
||||
|
private String city; |
||||
|
private String state; |
||||
|
private String zip; |
||||
|
private String plus4; |
||||
|
private String phone; |
||||
|
|
||||
|
// maxLength accessor methods |
||||
|
public void setMaxLength(int len) { |
||||
|
maxLength = len; |
||||
|
} |
||||
|
public int getMaxLength() { |
||||
|
return maxLength; |
||||
|
} |
||||
|
|
||||
|
// id accessor methods |
||||
|
public void setId(String id) { |
||||
|
this.id = id; |
||||
|
} |
||||
|
public String getId() { |
||||
|
return id; |
||||
|
} |
||||
|
|
||||
|
// name accessor methods |
||||
|
public void setName(String name) { |
||||
|
this.name = name; |
||||
|
} |
||||
|
public String getName() { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
// street accessor methods |
||||
|
public void setStreet(String street) { |
||||
|
this.street = street; |
||||
|
} |
||||
|
public String getStreet() { |
||||
|
return street; |
||||
|
} |
||||
|
|
||||
|
// city accessor methods |
||||
|
public void setCity(String city) { |
||||
|
this.city = city; |
||||
|
} |
||||
|
public String getCity() { |
||||
|
return city; |
||||
|
} |
||||
|
|
||||
|
// state accessor methods |
||||
|
public void setState(String state) { |
||||
|
this.state = state; |
||||
|
} |
||||
|
public String getState() { |
||||
|
return state; |
||||
|
} |
||||
|
|
||||
|
// zipcode accessor methods |
||||
|
public void setZip(String zip) { |
||||
|
this.zip = zip; |
||||
|
} |
||||
|
public String getZip() { |
||||
|
return zip; |
||||
|
} |
||||
|
|
||||
|
// zip plus4 accessor methods |
||||
|
public void setPlus4(String plus4) { |
||||
|
this.plus4 = plus4; |
||||
|
} |
||||
|
public String getPlus4() { |
||||
|
return plus4; |
||||
|
} |
||||
|
|
||||
|
// phone accessor methods |
||||
|
public void setPhone(String phone) { |
||||
|
this.phone = phone; |
||||
|
} |
||||
|
public String getPhone() { |
||||
|
return phone; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
// LoginServlet.java |
||||
|
// Session servlet responsible for storing user credentials and preferences |
||||
|
// into the session environment. |
||||
|
|
||||
|
package com.bullseyecomputing.servlets; |
||||
|
|
||||
|
import javax.servlet.*; |
||||
|
import javax.servlet.http.*; |
||||
|
import java.io.*; |
||||
|
import java.util.*; |
||||
|
|
||||
|
public class LoginServlet extends HttpServlet { |
||||
|
|
||||
|
// Init code goes here... |
||||
|
|
||||
|
// HTTP GET handler |
||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) |
||||
|
throws ServletException, IOException { |
||||
|
|
||||
|
// Check for existing session, create one if neccesary. |
||||
|
HttpSession session = request.getSession(true); |
||||
|
session.setAttribute("NewSession","false"); |
||||
|
|
||||
|
if(session.isNew()) { |
||||
|
session.setAttribute("NewSession","true"); |
||||
|
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); |
||||
|
response.setHeader("WWW-Authenticate", "BASIC realm=\"Application User\""); |
||||
|
} |
||||
|
|
||||
|
// Get our username from the request |
||||
|
String user = request.getRemoteUser(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,39 @@ |
|||||
|
// RequestTestServlet.java |
||||
|
|
||||
|
package com.bullseyecomputing.test; |
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.util.*; |
||||
|
|
||||
|
import javax.servlet.*; |
||||
|
import javax.servlet.http.*; |
||||
|
|
||||
|
public class RequestTestServlet extends HttpServlet { |
||||
|
|
||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) |
||||
|
throws ServletException, IOException { |
||||
|
|
||||
|
Enumeration arglist; |
||||
|
String name, value; |
||||
|
PrintWriter out = response.getWriter(); |
||||
|
|
||||
|
response.setContentType("text/html"); |
||||
|
out.print("<html>\n<head>\n"); |
||||
|
out.print(" <title>Request Parameter Test</title>\n"); |
||||
|
out.print(" <link rel=\"stylesheet\" href=\"style/common.css\""); |
||||
|
out.print(" type=\"text/css\">\n"); |
||||
|
out.print("</head>\n<body>\n"); |
||||
|
out.print(" <h3>Request Parameter Test</h3>\n"); |
||||
|
out.print(" <table class=\"third\">\n "); |
||||
|
out.print(" <thead>\n <th>Name</th>\n"); |
||||
|
out.print(" <th>Value</th>\n </thead>\n"); |
||||
|
arglist = request.getParameterNames(); |
||||
|
while(arglist.hasMoreElements()) { |
||||
|
name = arglist.nextElement().toString(); |
||||
|
value = request.getParameter(name); |
||||
|
out.print(" <tr>\n <td>" + name + "</td>\n "); |
||||
|
out.print("<td>" + value + "</td>\n </tr>\n"); |
||||
|
} |
||||
|
out.print(" </table>\n</body>\n</html>\n"); |
||||
|
} |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
// ServerInfoServlet.java |
||||
|
// Servlet that returns imformation about the server it is running under. |
||||
|
|
||||
|
package com.bullseyecomputing.servlets; |
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.util.*; |
||||
|
import javax.servlet.*; |
||||
|
|
||||
|
public class ServerInfoServlet extends GenericServlet { |
@ -0,0 +1,129 @@ |
|||||
|
<?xml version="1.0" encoding="ISO-8859-1"?> |
||||
|
<!DOCTYPE web-app |
||||
|
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" |
||||
|
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> |
||||
|
|
||||
|
<web-app> |
||||
|
|
||||
|
<display-name> |
||||
|
AddressBook Manager |
||||
|
</display-name> |
||||
|
|
||||
|
<servlet> |
||||
|
<servlet-name>getList</servlet-name> |
||||
|
<servlet-class>com.bullseyecomputing.servlets.ListQueryServlet</servlet-class> |
||||
|
<init-param> |
||||
|
<param-name>jdbcDriver</param-name> |
||||
|
<param-value>org.postgresql.Driver</param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>jdbcURL</param-name> |
||||
|
<param-value>jdbc:postgresql:jimi</param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>jdbcUser</param-name> |
||||
|
<param-value>guest</param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>jdbcPassword</param-name> |
||||
|
<param-value></param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>table</param-name> |
||||
|
<param-value>address</param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>selected</param-name> |
||||
|
<param-value> |
||||
|
id,name,street,city,state,zipcode,zipext |
||||
|
</param-value> |
||||
|
</init-param> |
||||
|
</servlet> |
||||
|
|
||||
|
<servlet> |
||||
|
<servlet-name>getData</servlet-name> |
||||
|
<servlet-class> |
||||
|
com.bullseyecomputing.servlets.FilterQueryServlet |
||||
|
</servlet-class> |
||||
|
</servlet> |
||||
|
|
||||
|
<servlet> |
||||
|
<servlet-name>getDetail</servlet-name> |
||||
|
<servlet-class> |
||||
|
com.bullseyecomputing.servlets.DetailQueryServlet |
||||
|
</servlet-class> |
||||
|
<init-param> |
||||
|
<param-name>jdbcDriver</param-name> |
||||
|
<param-value>org.postgresql.Driver</param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>jdbcURL</param-name> |
||||
|
<param-value>jdbc:postgresql:jimi</param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>jdbcUser</param-name> |
||||
|
<param-value>guest</param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>jdbcPassword</param-name> |
||||
|
<param-value></param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>table</param-name> |
||||
|
<param-value>address</param-value> |
||||
|
</init-param> |
||||
|
<init-param> |
||||
|
<param-name>selected</param-name> |
||||
|
<param-value> |
||||
|
id,name,street,city,state,zipcode,zipext,areacode,phone |
||||
|
</param-value> |
||||
|
</init-param> |
||||
|
</servlet> |
||||
|
|
||||
|
<servlet> |
||||
|
<servlet-name>getTest</servlet-name> |
||||
|
<servlet-class>com.bullseyecomputing.test.RequestTestServlet</servlet-class> |
||||
|
</servlet> |
||||
|
|
||||
|
<servlet-mapping> |
||||
|
<servlet-name>getList</servlet-name> |
||||
|
<url-pattern>/getList</url-pattern> |
||||
|
</servlet-mapping> |
||||
|
<servlet-mapping> |
||||
|
<servlet-name>getData</servlet-name> |
||||
|
<url-pattern>/getData</url-pattern> |
||||
|
</servlet-mapping> |
||||
|
<servlet-mapping> |
||||
|
<servlet-name>getDetail</servlet-name> |
||||
|
<url-pattern>/getDetail</url-pattern> |
||||
|
</servlet-mapping> |
||||
|
<servlet-mapping> |
||||
|
<servlet-name>getTest</servlet-name> |
||||
|
<url-pattern>/getTest</url-pattern> |
||||
|
</servlet-mapping> |
||||
|
|
||||
|
<session-config> |
||||
|
<session-timeout>90</session-timeout> |
||||
|
</session-config> |
||||
|
|
||||
|
<security-constraint> |
||||
|
<web-resource-collection> |
||||
|
<web-resource-name>Trucking App</web-resource-name> |
||||
|
<url-pattern>/index.jsp</url-pattern> |
||||
|
<url-pattern>/getList</url-pattern> |
||||
|
<url-pattern>/getData</url-pattern> |
||||
|
</web-resource-collection> |
||||
|
<auth-constraint> |
||||
|
<role-name>user</role-name> |
||||
|
</auth-constraint> |
||||
|
</security-constraint> |
||||
|
|
||||
|
<login-config> |
||||
|
<auth-method>FORM</auth-method> |
||||
|
<form-login-config> |
||||
|
<form-login-page>/login.jsp</form-login-page> |
||||
|
<form-error-page>/login.jsp</form-error-page> |
||||
|
</form-login-config> |
||||
|
</login-config> |
||||
|
|
||||
|
</web-app> |
@ -0,0 +1,161 @@ |
|||||
|
<%-- JSP page setup --%> |
||||
|
<%! static String pageTitle = "Address Detail"; %> |
||||
|
<%@ page |
||||
|
info = "Data-Entry form for the AddressBook webapp" |
||||
|
language = "java" |
||||
|
session = "true" |
||||
|
import = "com.bullseyecomputing.beans.AddressDataBean" |
||||
|
%> |
||||
|
<% AddressDataBean a = (AddressDataBean) session.getAttribute("address.data"); %> |
||||
|
<%@ include file = "include/pageHeader.jsp" %> |
||||
|
<body bgcolor="#f7f7f7" onload="document.search.filter.focus();"> |
||||
|
|
||||
|
<table class="data"> |
||||
|
<colgroup> |
||||
|
<col width=75pt> |
||||
|
<col width=275pt> |
||||
|
<col width=60pt> |
||||
|
<col width=*> |
||||
|
</colgroup> |
||||
|
|
||||
|
<!-- Title/Search -----------> |
||||
|
<tr class="header"> |
||||
|
<form method="get" action="getData" name="search"> |
||||
|
<td colspan=3 class="title"><%=a.getName()%></td> |
||||
|
<td align="right"><b class="label">Search:</b> |
||||
|
<input type="text" name="filter" maxlength=30 style="width: 140pt"/></td> |
||||
|
</form> |
||||
|
</tr> |
||||
|
|
||||
|
<!-- Address/Contact --> |
||||
|
<tr> |
||||
|
<th colspan=4 style="font-style: italic"><%=pageTitle%></th> |
||||
|
</tr> |
||||
|
|
||||
|
<!-- Entry Form --> |
||||
|
<form name="entry" method="post"> |
||||
|
<tr> |
||||
|
<td colspan=2> |
||||
|
|
||||
|
<!-- Left Side -----------> |
||||
|
<table> |
||||
|
<colgroup> |
||||
|
<col width=75pt> |
||||
|
<col width=275pt> |
||||
|
</colgroup> |
||||
|
|
||||
|
<!-- Name --> |
||||
|
<tr> |
||||
|
<td class="label">Name:</td> |
||||
|
<td> |
||||
|
<input type="text" name="name" value="<%=a.getName()%>" |
||||
|
maxlength=30 style="width: 210pt;"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
<!-- Addr1 --> |
||||
|
<tr> |
||||
|
<td class="label">Addr1:</td> |
||||
|
<td> |
||||
|
<input type="text" name="street" value="<%=a.getStreet()%>" |
||||
|
maxlength=30 style="width: 210pt;"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
<!-- Addr2 --> |
||||
|
<tr> |
||||
|
<td class="label">Addr2:</td> |
||||
|
<td> |
||||
|
<input type="text" name="street" value="" |
||||
|
maxlength=30 style="width: 210pt;"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
<!-- City/State --> |
||||
|
<tr> |
||||
|
<td class="label">City/St:</td> |
||||
|
<td> |
||||
|
<input type="text" name="city" value="<%=a.getCity()%>" |
||||
|
maxlength=16 style="width: 108pt;"> |
||||
|
<input type="text" name="state" value="<%=a.getState()%>" |
||||
|
maxlength=2 style="width: 21pt;"> |
||||
|
<input type="text" name="zipcode" value="<%=a.getZipcode()%>" |
||||
|
maxlength=6 style="width: 41pt;"> |
||||
|
<input type="text" name="plus4" value="<%=a.getPlus4()%>" |
||||
|
maxlength=4 style="width: 31pt;"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
</td> |
||||
|
|
||||
|
<!-- Right Side --> |
||||
|
<td colspan=2> |
||||
|
<table> |
||||
|
<colgroup> |
||||
|
<col width=60pt> |
||||
|
<col width=275pt> |
||||
|
</colgroup> |
||||
|
|
||||
|
<tr> |
||||
|
<td class="label">Phone:</td> |
||||
|
<td> |
||||
|
<input type="text" name="pArea" value="" |
||||
|
maxlength=3 style="width: 28pt;"> |
||||
|
<input type="text" name="pNumber" value="" |
||||
|
maxlength=8 style="width: 58pt;"> |
||||
|
<input type="text" name="pDesc" value="" |
||||
|
maxlength=20 style="width: 108pt;"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
<tr> |
||||
|
<td class="label">Fax:</td> |
||||
|
<td> |
||||
|
<input type="text" name="fArea" value="" |
||||
|
maxlength=3 style="width: 28pt;"> |
||||
|
<input type="text" name="fNumber" value="" |
||||
|
maxlength=8 style="width: 58pt;"> |
||||
|
<input type="text" name="fDesc" value="" |
||||
|
maxlength=20 style="width: 108pt;"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
<tr> |
||||
|
<td class="label">Note:</td> |
||||
|
<td><input type="text" name="note" value="This a sample note" |
||||
|
maxlength=30 style="width: 200pt;"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
<tr> |
||||
|
<td class="label">Nick:</td> |
||||
|
<td><input type="text" name="nick" value="" |
||||
|
maxlength=12 style="width: 90pt;"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
|
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
<!-- Save/Delete Buttons --> |
||||
|
<tr align="center"> |
||||
|
<td colspan=4> |
||||
|
<input class="small" type="submit" value="save"> |
||||
|
<input class="small" type="button" value="delete"> |
||||
|
<input class="small" type="reset" value="reset"> |
||||
|
</td> |
||||
|
</tr> |
||||
|
|
||||
|
<!-- Status Line --> |
||||
|
<tr class="status"> |
||||
|
<td colspan=4> |
||||
|
<span class="left"> Status:</span> |
||||
|
<span class="right"></span> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</form> |
||||
|
|
||||
|
</table> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,67 @@ |
|||||
|
<%-- JSP page setup --%> |
||||
|
<%! static String pageTitle = "Address List"; %> |
||||
|
<%@ page |
||||
|
info = "Generate a filtering, sortable table of addresses" |
||||
|
language = "java" |
||||
|
session = "true" |
||||
|
import="com.bullseyecomputing.beans.AddressListBean, java.util.*" |
||||
|
%> |
||||
|
<%@ include file = "include/pageHeader.jsp" %> |
||||
|
<body bgcolor="#f7f7f7" onload="document.search.filter.focus();"> |
||||
|
<table class="data" cellpadding=0 cellspacing=2> |
||||
|
<colgroup> |
||||
|
<col> <!-- Name --> |
||||
|
<col> <!-- Street --> |
||||
|
<col size=16em> <!-- City --> |
||||
|
<col size=2em> <!-- State --> |
||||
|
<col size=5em> <!-- Zipcode --> |
||||
|
<col size=10em> <!-- Phone --> |
||||
|
</colgroup> |
||||
|
<tr class="header"> |
||||
|
<form method="get" action="getData" name="search"> |
||||
|
<td colspan=2 class="title">Address List</td> |
||||
|
<td colspan=4 align="right"><b class="label">Search:</b> |
||||
|
<input type="text" name="filter" maxlength=30 style="width: 140pt"/></td> |
||||
|
</form> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<th><a href="/getList?orderby=name&">Name</a></th> |
||||
|
<th>Street</th> |
||||
|
<th><a href="/getList?orderby=city&">City</a></th> |
||||
|
<th><a href="/getList?orderby=state&">ST</a></th> |
||||
|
<th><a href="/getList?orderby=zipcode&">Zip</a></th> |
||||
|
<th>Phone</th> |
||||
|
</tr> |
||||
|
<% |
||||
|
List addresslist = (List) session.getAttribute("resultList"); |
||||
|
Iterator address = addresslist.iterator(); |
||||
|
int row = 0; |
||||
|
AddressListBean addr; |
||||
|
|
||||
|
while(address.hasNext()) { |
||||
|
addr = (AddressListBean) address.next(); |
||||
|
|
||||
|
%> <tr class="<%=(row++ % 2 == 1) ? "dark" : "light"%>"> |
||||
|
<td><a href="/getDetail?id=<%=addr.getIdNumber()%>&"><%=addr.getName()%></a></td> |
||||
|
<td><%=addr.getStreet()%></td> |
||||
|
<td><a href="/getList?filter=state:<%=addr.getState()%>:city:<%=addr.getCity()%>&"><%=addr.getCity()%></a></td> |
||||
|
<td><a href="/getList?filter=state:<%=addr.getState()%>&"><%=addr.getState()%></a></td> |
||||
|
<td><%=addr.getZipcode()%></td> |
||||
|
<td><%=addr.getPlus4()%></td> |
||||
|
</tr> |
||||
|
<% |
||||
|
} |
||||
|
// Release the resultList object |
||||
|
session.removeAttribute("resultList"); |
||||
|
%> <tr class="status"> |
||||
|
<td colspan=6> |
||||
|
<span class="left"> Page x of y</span> |
||||
|
<span class="right"> |
||||
|
<input class="status" type="button" value="prev"> |
||||
|
<input class="status" type="button" value="next"> |
||||
|
</span> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,9 @@ |
|||||
|
<% |
||||
|
String user = (String) session.getAttribute("user"); |
||||
|
|
||||
|
if(user == null) { |
||||
|
%> |
||||
|
<jsp:include page="/login" flush="false"/> |
||||
|
<% |
||||
|
} |
||||
|
%> |
@ -0,0 +1,14 @@ |
|||||
|
<% session.invalidate(); %> |
||||
|
<%! static String pageTitle = "Session Ended"; %> |
||||
|
<%@ include file = "include/pageHeader.jsp" %> |
||||
|
<body bgcolor="#f7f7f7"> |
||||
|
<center> |
||||
|
<br><br> |
||||
|
<b class="title"><%= pageTitle %></b> |
||||
|
<br><br><br> |
||||
|
<form name="form" method=POST action="/index.jsp"> |
||||
|
<input type="submit" value="New Session"/> |
||||
|
</form> |
||||
|
</center> |
||||
|
</body> |
||||
|
</html> |
After Width: 750 | Height: 20 | Size: 359 B |
After Width: 780 | Height: 50 | Size: 1.5 KiB |
@ -0,0 +1,13 @@ |
|||||
|
<% out.clear(); // clear out those extra newlines |
||||
|
%><?xml version = "1.0"?> |
||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
|
|
||||
|
<html> |
||||
|
<head> |
||||
|
<title><%= pageTitle %></title> |
||||
|
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> |
||||
|
<meta name="author" content="jimi(bcs)"> |
||||
|
<meta name="title" content="<%= pageTitle %>"> |
||||
|
<link rel="stylesheet" href="style/common.css" type="text/css"> |
||||
|
</head> |
@ -0,0 +1 @@ |
|||||
|
<jsp:forward page="getList?orderby=name&limit=22&"/> |
@ -0,0 +1,25 @@ |
|||||
|
<%! static String pageTitle = "Application Login"; %> |
||||
|
<%@ include file = "include/pageHeader.jsp" %> |
||||
|
<body bgcolor="#f7f7f7" onload="document.login.j_username.focus();"> |
||||
|
<center> |
||||
|
<p style="margin-top: 3em"> |
||||
|
<table class="login"> |
||||
|
<th colspan=2>User Login</th> |
||||
|
<form method="post" action="j_security_check" name="login"> |
||||
|
<tr> |
||||
|
<td class="label">Username:</td> |
||||
|
<td class="form"><input type="text" name="j_username" size="20"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td class="label">Password:</td> |
||||
|
<td class="form"><input type="password" name="j_password" size="20"/></td> |
||||
|
</tr> |
||||
|
<tr> |
||||
|
<td colspan=2 align="center"> |
||||
|
<input type="submit" value="Login" class="login"/></td> |
||||
|
</tr> |
||||
|
</form> |
||||
|
</table> |
||||
|
</center> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,52 @@ |
|||||
|
<%@ page info = "addressList.jsp - generate a table of addresses" %> |
||||
|
<%! static String pageTitle = "Address List"; %> |
||||
|
<%@ taglib uri = "include/db-taglib.tld" prefix = "db" %> |
||||
|
<%@ include file = "include/sessionHeader.jsp" %> |
||||
|
<%@ include file = "include/pageHeader.jsp" %> |
||||
|
<body <%=backgroundColor%>> |
||||
|
<div class="head"> |
||||
|
<table <%=listWidth%> class="hidden"> |
||||
|
<tr class="hidden"> |
||||
|
<td><b class="title">Address List</b><td> |
||||
|
<td> |
||||
|
<form method="get" action="getData" style="float: right"> |
||||
|
<b class="label">Search:</b> |
||||
|
<input type="text" name="filter" size=20 /> |
||||
|
</form> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
</div> |
||||
|
<div class="tabular"> |
||||
|
<table <%=listWidth%>> |
||||
|
<!-- table header --> |
||||
|
<th style="width: 33%"><a href="/getList?orderBy=name">Name</a></th> |
||||
|
<th style="width: 34%">Street</th> |
||||
|
<th style="width: 15%"><a href="/getList?orderBy=city">City</a></th> |
||||
|
<th style="width: 5%"><a href="/getList?orderBy=state">ST</a></th> |
||||
|
<th style="width: 7%"><a href="/getList?orderBy=zipcode">Zip</a></th> |
||||
|
<th style="width: 6%">+4</th> |
||||
|
<!-- table data --> |
||||
|
<db:addresslist><tr class="<%=shade%>"> |
||||
|
<td><a href="/getDetail?id=<%=id%>"><%=name%></a></td> |
||||
|
<td><%=street%></td> |
||||
|
<td><a href="/getList?city=<%=city%>&state=<%=state%>"><%=city%></a></td> |
||||
|
<td><a href="/getList?state=<%=state%>"><%=state%></a></td> |
||||
|
<td><%=zip%></td> |
||||
|
<td><%=plus4%></td> |
||||
|
</tr> |
||||
|
</db:addresslist></table> |
||||
|
</div> |
||||
|
<!-- page footer --> |
||||
|
<div class="foot"> |
||||
|
Session ID: <%= session.getId() %><br> |
||||
|
Session is new: <%= session.isNew() %><br> |
||||
|
Session variables: |
||||
|
<% java.util.Enumeration sess = session.getAttributeNames(); |
||||
|
while(sess.hasMoreElements()) { |
||||
|
out.print(sess.nextElement() + " "); |
||||
|
} |
||||
|
%> |
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,94 @@ |
|||||
|
<!-- common.css |
||||
|
body, table, input, textarea { |
||||
|
font-family: Verdana, Helvetica; |
||||
|
font-size: 9pt; |
||||
|
} |
||||
|
body { |
||||
|
border: none; |
||||
|
padding-left: 1%; |
||||
|
} |
||||
|
a { |
||||
|
color: #000000; |
||||
|
text-decoration: none; |
||||
|
} |
||||
|
table.login { |
||||
|
font-size: 9pt; |
||||
|
width: 200pt; |
||||
|
border: outset 1pt; |
||||
|
} |
||||
|
.login { |
||||
|
background-color: #dfdfdf; |
||||
|
} |
||||
|
table.data { |
||||
|
width: 98%; |
||||
|
background-color: #f7f7f7; |
||||
|
border: none; |
||||
|
} |
||||
|
tr { |
||||
|
vertical-align: baseline; |
||||
|
} |
||||
|
td, th { |
||||
|
padding: 1pt; |
||||
|
} |
||||
|
th { |
||||
|
font-weight: bold; |
||||
|
background-color: #b0c4de; |
||||
|
border: outset 1px; |
||||
|
} |
||||
|
td { |
||||
|
border-width: none; |
||||
|
border-style: none; |
||||
|
} |
||||
|
.right { |
||||
|
float: right; |
||||
|
} |
||||
|
.left { |
||||
|
float: left; |
||||
|
} |
||||
|
.title { |
||||
|
font-size: 16pt; |
||||
|
font-weight: bold; |
||||
|
font-style: italic; |
||||
|
} |
||||
|
.label { |
||||
|
font-size: 9pt; |
||||
|
font-weight: bold; |
||||
|
text-align: right; |
||||
|
} |
||||
|
.form { |
||||
|
font-size: 9pt; |
||||
|
} |
||||
|
.header { |
||||
|
background-color: #f7f7f7; |
||||
|
} |
||||
|
.light { |
||||
|
background-color: #efefef; |
||||
|
border-width: 1pt; |
||||
|
border-style: none; |
||||
|
} |
||||
|
.dark { |
||||
|
background-color: #e7e7e7; |
||||
|
border-width: 1pt; |
||||
|
border-style: none; |
||||
|
} |
||||
|
.status { |
||||
|
font-family: Lucida Console; |
||||
|
font-size: 7pt; |
||||
|
background-color: #dfdfdf; |
||||
|
border-width: 1pt; |
||||
|
border-style: none; |
||||
|
} |
||||
|
.boxed { |
||||
|
border-style: solid; |
||||
|
border-width: 1px; |
||||
|
border-color: black; |
||||
|
} |
||||
|
input.small { |
||||
|
font-family: Arial; |
||||
|
font-size: 7pt; |
||||
|
background-color: #e7e7e7; |
||||
|
border-width: 1px; |
||||
|
width: 27pt; |
||||
|
height: 13pt; |
||||
|
} |
||||
|
--> |
@ -0,0 +1,185 @@ |
|||||
|
<!-- common.css |
||||
|
body { |
||||
|
font-family: Helvetica; |
||||
|
margin-left: 3%; |
||||
|
margin-right: 3%; |
||||
|
} |
||||
|
|
||||
|
a { |
||||
|
color: Black; |
||||
|
text-decoration: none; |
||||
|
} |
||||
|
|
||||
|
p { |
||||
|
font-family: Helvetica; |
||||
|
margin-top: none; |
||||
|
margin-bottom: none; |
||||
|
padding: none 3pt; |
||||
|
} |
||||
|
|
||||
|
h1,h2,h3,h4,h5,h6 { |
||||
|
font-family: Helvetica; |
||||
|
} |
||||
|
|
||||
|
.title { |
||||
|
font-size: 18pt; |
||||
|
font-style: italic; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.boxed { |
||||
|
background-color: transparent; |
||||
|
border-color: black; |
||||
|
border-width: 1px; |
||||
|
border-style: solid; |
||||
|
} |
||||
|
|
||||
|
h1 { |
||||
|
font-size: 11pt; |
||||
|
font-weight: bold; |
||||
|
background-color: #d3d3d3; |
||||
|
border: outset 1pt; |
||||
|
} |
||||
|
|
||||
|
h3 { |
||||
|
font-size: 9pt; |
||||
|
font-weight: bold; |
||||
|
background-color: #b0c4de; |
||||
|
border: outset 1pt; |
||||
|
} |
||||
|
|
||||
|
p.title { |
||||
|
background-color: #cccccc; |
||||
|
font-size: 12pt; |
||||
|
font-weight: bold; |
||||
|
border: outset 1pt; |
||||
|
} |
||||
|
|
||||
|
p.heading { |
||||
|
background-color: #b0c4de; |
||||
|
font-size: 9pt; |
||||
|
font-weight: bold; |
||||
|
border: outset 1pt; |
||||
|
} |
||||
|
|
||||
|
p.content { |
||||
|
font-family: Helvetica; |
||||
|
font-size: 9pt; |
||||
|
} |
||||
|
|
||||
|
p.list { |
||||
|
margin-top: -1em; |
||||
|
margin-left: 3%; |
||||
|
} |
||||
|
|
||||
|
form { |
||||
|
font-family: Helvetica; |
||||
|
font-size: 9pt; |
||||
|
} |
||||
|
|
||||
|
table { |
||||
|
font-family: Helvetica; |
||||
|
font-size: 9pt; |
||||
|
background-color: #d3d3d3; |
||||
|
border-style: outset; |
||||
|
border-width: 1pt; |
||||
|
margin-left: 2%; |
||||
|
width: 96%; |
||||
|
min-width: 740px; |
||||
|
} |
||||
|
|
||||
|
table.entry, table.data { |
||||
|
border-style: none; |
||||
|
background-color: #dedede; |
||||
|
} |
||||
|
|
||||
|
table.hidden { |
||||
|
background-color: #f0f0f0; |
||||
|
border-width: none; |
||||
|
border-style: none; |
||||
|
margin-left: 3%; |
||||
|
width: 94%; |
||||
|
vertical-align: bottom; |
||||
|
} |
||||
|
|
||||
|
table.third { |
||||
|
margin-left: 33%; |
||||
|
width: 34%; |
||||
|
background-color: inherit; |
||||
|
border-style: inset; |
||||
|
} |
||||
|
|
||||
|
table.login { |
||||
|
margin-left: 35%; |
||||
|
width: 30%; |
||||
|
min-width: 200px; |
||||
|
border-width: 1pt; |
||||
|
border-style: outset; |
||||
|
} |
||||
|
|
||||
|
thead,th { |
||||
|
font-weight: bold; |
||||
|
border-width: 1pt; |
||||
|
border-style: outset; |
||||
|
padding: inherit; |
||||
|
background-color: #b0c4de; |
||||
|
} |
||||
|
|
||||
|
tr { |
||||
|
font-weight: normal; |
||||
|
border-width: inherit; |
||||
|
border-style: none; |
||||
|
padding: inherit; |
||||
|
} |
||||
|
|
||||
|
td { |
||||
|
border-width: inherit; |
||||
|
border-style: inherit; |
||||
|
} |
||||
|
|
||||
|
td.status { |
||||
|
font-family: Helvetica; |
||||
|
font-size: 7pt; |
||||
|
background-color: #dadada; |
||||
|
border-style: none; |
||||
|
border-width: 1px; |
||||
|
} |
||||
|
|
||||
|
.label { |
||||
|
font-weight: bold; |
||||
|
padding-left: 9pt; |
||||
|
text-align: right; |
||||
|
} |
||||
|
|
||||
|
.field { |
||||
|
font-weight: normal; |
||||
|
padding-right: 9pt; |
||||
|
padding-top: 2pt; |
||||
|
padding-bottom: 2pt; |
||||
|
font-size: 8pt; |
||||
|
text-align: left; |
||||
|
} |
||||
|
|
||||
|
.inset { |
||||
|
border-style: inset; |
||||
|
border-width: 1pt; |
||||
|
} |
||||
|
|
||||
|
.outset { |
||||
|
border-style: outset; |
||||
|
border-width: 1pt; |
||||
|
} |
||||
|
|
||||
|
.center { |
||||
|
text-align: center; |
||||
|
} |
||||
|
|
||||
|
.light { |
||||
|
background-color: #f0f0f0; |
||||
|
} |
||||
|
|
||||
|
.dark { |
||||
|
background-color: #e5e5e5; |
||||
|
} |
||||
|
|
||||
|
--> |
@ -0,0 +1,269 @@ |
|||||
|
<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> |
||||
|
<%@ include file="Connections/jimi.jsp" %> |
||||
|
<% |
||||
|
Driver DriverAddressList = (Driver)Class.forName(MM_jimi_DRIVER).newInstance(); |
||||
|
Connection ConnAddressList = DriverManager.getConnection(MM_jimi_STRING,MM_jimi_USERNAME,MM_jimi_PASSWORD); |
||||
|
PreparedStatement StatementAddressList = ConnAddressList.prepareStatement("SELECT nick,name,street,city,state,zipcode FROM address"); |
||||
|
ResultSet AddressList = StatementAddressList.executeQuery(); |
||||
|
boolean AddressList_isEmpty = !AddressList.next(); |
||||
|
boolean AddressList_hasData = !AddressList_isEmpty; |
||||
|
Object AddressList_data; |
||||
|
int AddressList_numRows = 0; |
||||
|
%> |
||||
|
<% |
||||
|
int Repeat1__numRows = 35; |
||||
|
int Repeat1__index = 0; |
||||
|
AddressList_numRows += Repeat1__numRows; |
||||
|
%> |
||||
|
<% |
||||
|
// *** Recordset Stats, Move To Record, and Go To Record: declare stats variables |
||||
|
|
||||
|
int AddressList_first = 1; |
||||
|
int AddressList_last = 1; |
||||
|
int AddressList_total = -1; |
||||
|
|
||||
|
if (AddressList_isEmpty) { |
||||
|
AddressList_total = AddressList_first = AddressList_last = 0; |
||||
|
} |
||||
|
|
||||
|
//set the number of rows displayed on this page |
||||
|
if (AddressList_numRows == 0) { |
||||
|
AddressList_numRows = 1; |
||||
|
} |
||||
|
%> |
||||
|
<% |
||||
|
// *** Recordset Stats: if we don't know the record count, manually count them |
||||
|
|
||||
|
if (AddressList_total == -1) { |
||||
|
|
||||
|
// count the total records by iterating through the recordset |
||||
|
for (AddressList_total = 1; AddressList.next(); AddressList_total++); |
||||
|
|
||||
|
// reset the cursor to the beginning |
||||
|
AddressList.close(); |
||||
|
AddressList = StatementAddressList.executeQuery(); |
||||
|
AddressList_hasData = AddressList.next(); |
||||
|
|
||||
|
// set the number of rows displayed on this page |
||||
|
if (AddressList_numRows < 0 || AddressList_numRows > AddressList_total) { |
||||
|
AddressList_numRows = AddressList_total; |
||||
|
} |
||||
|
|
||||
|
// set the first and last displayed record |
||||
|
AddressList_first = Math.min(AddressList_first, AddressList_total); |
||||
|
AddressList_last = Math.min(AddressList_first + AddressList_numRows - 1, AddressList_total); |
||||
|
} |
||||
|
%> |
||||
|
<% String MM_paramName = ""; %> |
||||
|
<% |
||||
|
// *** Move To Record and Go To Record: declare variables |
||||
|
|
||||
|
ResultSet MM_rs = AddressList; |
||||
|
int MM_rsCount = AddressList_total; |
||||
|
int MM_size = AddressList_numRows; |
||||
|
String MM_uniqueCol = ""; |
||||
|
MM_paramName = ""; |
||||
|
int MM_offset = 0; |
||||
|
boolean MM_atTotal = false; |
||||
|
boolean MM_paramIsDefined = (MM_paramName.length() != 0 && request.getParameter(MM_paramName) != null); |
||||
|
%> |
||||
|
<% |
||||
|
// *** Move To Record: handle 'index' or 'offset' parameter |
||||
|
|
||||
|
if (!MM_paramIsDefined && MM_rsCount != 0) { |
||||
|
|
||||
|
//use index parameter if defined, otherwise use offset parameter |
||||
|
String r = request.getParameter("index"); |
||||
|
if (r==null) r = request.getParameter("offset"); |
||||
|
if (r!=null) MM_offset = Integer.parseInt(r); |
||||
|
|
||||
|
// if we have a record count, check if we are past the end of the recordset |
||||
|
if (MM_rsCount != -1) { |
||||
|
if (MM_offset >= MM_rsCount || MM_offset == -1) { // past end or move last |
||||
|
if (MM_rsCount % MM_size != 0) // last page not a full repeat region |
||||
|
MM_offset = MM_rsCount - MM_rsCount % MM_size; |
||||
|
else |
||||
|
MM_offset = MM_rsCount - MM_size; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
//move the cursor to the selected record |
||||
|
int i; |
||||
|
for (i=0; AddressList_hasData && (i < MM_offset || MM_offset == -1); i++) { |
||||
|
AddressList_hasData = MM_rs.next(); |
||||
|
} |
||||
|
if (!AddressList_hasData) MM_offset = i; // set MM_offset to the last possible record |
||||
|
} |
||||
|
%> |
||||
|
<% |
||||
|
// *** Move To Record: if we dont know the record count, check the display range |
||||
|
|
||||
|
if (MM_rsCount == -1) { |
||||
|
|
||||
|
// walk to the end of the display range for this page |
||||
|
int i; |
||||
|
for (i=MM_offset; AddressList_hasData && (MM_size < 0 || i < MM_offset + MM_size); i++) { |
||||
|
AddressList_hasData = MM_rs.next(); |
||||
|
} |
||||
|
|
||||
|
// if we walked off the end of the recordset, set MM_rsCount and MM_size |
||||
|
if (!AddressList_hasData) { |
||||
|
MM_rsCount = i; |
||||
|
if (MM_size < 0 || MM_size > MM_rsCount) MM_size = MM_rsCount; |
||||
|
} |
||||
|
|
||||
|
// if we walked off the end, set the offset based on page size |
||||
|
if (!AddressList_hasData && !MM_paramIsDefined) { |
||||
|
if (MM_offset > MM_rsCount - MM_size || MM_offset == -1) { //check if past end or last |
||||
|
if (MM_rsCount % MM_size != 0) //last page has less records than MM_size |
||||
|
MM_offset = MM_rsCount - MM_rsCount % MM_size; |
||||
|
else |
||||
|
MM_offset = MM_rsCount - MM_size; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// reset the cursor to the beginning |
||||
|
AddressList.close(); |
||||
|
AddressList = StatementAddressList.executeQuery(); |
||||
|
AddressList_hasData = AddressList.next(); |
||||
|
MM_rs = AddressList; |
||||
|
|
||||
|
// move the cursor to the selected record |
||||
|
for (i=0; AddressList_hasData && i < MM_offset; i++) { |
||||
|
AddressList_hasData = MM_rs.next(); |
||||
|
} |
||||
|
} |
||||
|
%> |
||||
|
<% |
||||
|
// *** Move To Record: update recordset stats |
||||
|
|
||||
|
// set the first and last displayed record |
||||
|
AddressList_first = MM_offset + 1; |
||||
|
AddressList_last = MM_offset + MM_size; |
||||
|
if (MM_rsCount != -1) { |
||||
|
AddressList_first = Math.min(AddressList_first, MM_rsCount); |
||||
|
AddressList_last = Math.min(AddressList_last, MM_rsCount); |
||||
|
} |
||||
|
|
||||
|
// set the boolean used by hide region to check if we are on the last record |
||||
|
MM_atTotal = (MM_rsCount != -1 && MM_offset + MM_size >= MM_rsCount); |
||||
|
%> |
||||
|
<% |
||||
|
// *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters |
||||
|
|
||||
|
String MM_keepBoth,MM_keepURL="",MM_keepForm="",MM_keepNone=""; |
||||
|
String[] MM_removeList = { "index", MM_paramName }; |
||||
|
|
||||
|
// create the MM_keepURL string |
||||
|
if (request.getQueryString() != null) { |
||||
|
MM_keepURL = '&' + request.getQueryString(); |
||||
|
for (int i=0; i < MM_removeList.length && MM_removeList[i].length() != 0; i++) { |
||||
|
int start = MM_keepURL.indexOf(MM_removeList[i]) - 1; |
||||
|
if (start >= 0 && MM_keepURL.charAt(start) == '&' && |
||||
|
MM_keepURL.charAt(start + MM_removeList[i].length() + 1) == '=') { |
||||
|
int stop = MM_keepURL.indexOf('&', start + 1); |
||||
|
if (stop == -1) stop = MM_keepURL.length(); |
||||
|
MM_keepURL = MM_keepURL.substring(0,start) + MM_keepURL.substring(stop); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// add the Form variables to the MM_keepForm string |
||||
|
if (request.getParameterNames().hasMoreElements()) { |
||||
|
java.util.Enumeration items = request.getParameterNames(); |
||||
|
while (items.hasMoreElements()) { |
||||
|
String nextItem = (String)items.nextElement(); |
||||
|
boolean found = false; |
||||
|
for (int i=0; !found && i < MM_removeList.length; i++) { |
||||
|
if (MM_removeList[i].equals(nextItem)) found = true; |
||||
|
} |
||||
|
if (!found && MM_keepURL.indexOf('&' + nextItem + '=') == -1) { |
||||
|
MM_keepForm = MM_keepForm + '&' + nextItem + '=' + java.net.URLEncoder.encode(request.getParameter(nextItem)); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// create the Form + URL string and remove the intial '&' from each of the strings |
||||
|
MM_keepBoth = MM_keepURL + MM_keepForm; |
||||
|
if (MM_keepBoth.length() > 0) MM_keepBoth = MM_keepBoth.substring(1); |
||||
|
if (MM_keepURL.length() > 0) MM_keepURL = MM_keepURL.substring(1); |
||||
|
if (MM_keepForm.length() > 0) MM_keepForm = MM_keepForm.substring(1); |
||||
|
%> |
||||
|
<% |
||||
|
// *** Move To Record: set the strings for the first, last, next, and previous links |
||||
|
|
||||
|
String MM_moveFirst,MM_moveLast,MM_moveNext,MM_movePrev; |
||||
|
{ |
||||
|
String MM_keepMove = MM_keepBoth; // keep both Form and URL parameters for moves |
||||
|
String MM_moveParam = "index="; |
||||
|
|
||||
|
// if the page has a repeated region, remove 'offset' from the maintained parameters |
||||
|
if (MM_size > 1) { |
||||
|
MM_moveParam = "offset="; |
||||
|
int start = MM_keepMove.indexOf(MM_moveParam); |
||||
|
if (start != -1 && (start == 0 || MM_keepMove.charAt(start-1) == '&')) { |
||||
|
int stop = MM_keepMove.indexOf('&', start); |
||||
|
if (start == 0 && stop != -1) stop++; |
||||
|
if (stop == -1) stop = MM_keepMove.length(); |
||||
|
if (start > 0) start--; |
||||
|
MM_keepMove = MM_keepMove.substring(0,start) + MM_keepMove.substring(stop); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// set the strings for the move to links |
||||
|
StringBuffer urlStr = new StringBuffer(request.getRequestURI()).append('?').append(MM_keepMove); |
||||
|
if (MM_keepMove.length() > 0) urlStr.append('&'); |
||||
|
urlStr.append(MM_moveParam); |
||||
|
MM_moveFirst = urlStr + "0"; |
||||
|
MM_moveLast = urlStr + "-1"; |
||||
|
MM_moveNext = urlStr + Integer.toString(MM_offset+MM_size); |
||||
|
MM_movePrev = urlStr + Integer.toString(Math.max(MM_offset-MM_size,0)); |
||||
|
} |
||||
|
%> |
||||
|
<html> |
||||
|
<head> |
||||
|
<title>Test Document</title> |
||||
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> |
||||
|
<link href="style/common.css" rel="stylesheet" type="text/css"> |
||||
|
</head> |
||||
|
<body> |
||||
|
<table cellpadding="0" cellspacing="2" class="data"> |
||||
|
<tr> |
||||
|
<th>name</th><th>street</th><th>city</th><th>state</th><th>zipcode</th> |
||||
|
</tr> |
||||
|
<% int row = 0; while ((AddressList_hasData)&&(Repeat1__numRows-- != 0)) { %> |
||||
|
<tr class="<%=(row++ % 2 == 1) ? "dark" : "light"%>"> |
||||
|
<td><%=(((AddressList_data = AddressList.getObject("name"))==null || AddressList.wasNull())?"":AddressList_data)%></td> |
||||
|
<td><%=(((AddressList_data = AddressList.getObject("street"))==null || AddressList.wasNull())?"":AddressList_data)%></td> |
||||
|
<td><%=(((AddressList_data = AddressList.getObject("city"))==null || AddressList.wasNull())?"":AddressList_data)%></td> |
||||
|
<td><%=(((AddressList_data = AddressList.getObject("state"))==null || AddressList.wasNull())?"":AddressList_data)%></td> |
||||
|
<td><%=(((AddressList_data = AddressList.getObject("zipcode"))==null || AddressList.wasNull())?"":AddressList_data)%></td> |
||||
|
</tr> |
||||
|
<% |
||||
|
Repeat1__index++; |
||||
|
AddressList_hasData = AddressList.next(); |
||||
|
} |
||||
|
%> |
||||
|
<tr valign="bottom" class="status"> |
||||
|
<td colspan=5> |
||||
|
<span class="left"> |
||||
|
<%=(AddressList_first)%> to <%=(AddressList_last)%> of <%=(AddressList_total)%> |
||||
|
</span> |
||||
|
<span class="right"> |
||||
|
<% if (MM_offset !=0) { %> |
||||
|
<a href="<%=MM_movePrev%>"><img src="Previous.gif" border=0></a> |
||||
|
<% } /* end MM_offset != 0 */ %> |
||||
|
<% if (!MM_atTotal) { %> |
||||
|
<a href="<%=MM_moveNext%>"><img src="Next.gif" border=0></a> |
||||
|
<% } /* end !MM_atTotal */ %> |
||||
|
</span> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
</body> |
||||
|
</html> |
||||
|
<% |
||||
|
AddressList.close(); |
||||
|
StatementAddressList.close(); |
||||
|
ConnAddressList.close(); |
||||
|
%> |
@ -0,0 +1,139 @@ |
|||||
|
<%@ page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*" errorPage="" %> |
||||
|
<%@ include file="Connections/jimi.jsp" %> |
||||
|
<% |
||||
|
// *** Edit Operations: declare variables |
||||
|
|
||||
|
// set the form action variable |
||||
|
String MM_editAction = request.getRequestURI(); |
||||
|
if (request.getQueryString() != null && request.getQueryString().length() > 0) { |
||||
|
MM_editAction += "?" + request.getQueryString(); |
||||
|
} |
||||
|
|
||||
|
// connection information |
||||
|
String MM_editDriver = null, MM_editConnection = null, MM_editUserName = null, MM_editPassword = null; |
||||
|
|
||||
|
// redirect information |
||||
|
String MM_editRedirectUrl = null; |
||||
|
|
||||
|
// query string to execute |
||||
|
StringBuffer MM_editQuery = null; |
||||
|
|
||||
|
// boolean to abort record edit |
||||
|
boolean MM_abortEdit = false; |
||||
|
|
||||
|
// table information |
||||
|
String MM_editTable = null, MM_editColumn = null, MM_recordId = null; |
||||
|
|
||||
|
// form field information |
||||
|
String[] MM_fields = null, MM_columns = null; |
||||
|
%> |
||||
|
<% |
||||
|
// *** Insert Record: set variables |
||||
|
|
||||
|
if (request.getParameter("MM_insert") != null && request.getParameter("MM_insert").toString().equals("form1")) { |
||||
|
|
||||
|
MM_editDriver = MM_jimi_DRIVER; |
||||
|
MM_editConnection = MM_jimi_STRING; |
||||
|
MM_editUserName = MM_jimi_USERNAME; |
||||
|
MM_editPassword = MM_jimi_PASSWORD; |
||||
|
MM_editTable = "address"; |
||||
|
MM_editRedirectUrl = ""; |
||||
|
String MM_fieldsStr = "id|value|nick|value|name|value|street|value|city|value|state|value|zipcode|value|zipext|value|phone|value|areacode|value"; |
||||
|
String MM_columnsStr = "id|none,none,NULL|nick|',none,''|name|',none,''|street|',none,''|city|',none,''|state|none,none,NULL|zipcode|none,none,NULL|zipext|none,none,NULL|phone|',none,''|areacode|',none,''"; |
||||
|
|
||||
|
// create the MM_fields and MM_columns arrays |
||||
|
java.util.StringTokenizer tokens = new java.util.StringTokenizer(MM_fieldsStr,"|"); |
||||
|
MM_fields = new String[tokens.countTokens()]; |
||||
|
for (int i=0; tokens.hasMoreTokens(); i++) MM_fields[i] = tokens.nextToken(); |
||||
|
|
||||
|
tokens = new java.util.StringTokenizer(MM_columnsStr,"|"); |
||||
|
MM_columns = new String[tokens.countTokens()]; |
||||
|
for (int i=0; tokens.hasMoreTokens(); i++) MM_columns[i] = tokens.nextToken(); |
||||
|
|
||||
|
// set the form values |
||||
|
for (int i=0; i+1 < MM_fields.length; i+=2) { |
||||
|
MM_fields[i+1] = ((request.getParameter(MM_fields[i])!=null)?(String)request.getParameter(MM_fields[i]):""); |
||||
|
} |
||||
|
|
||||
|
// append the query string to the redirect URL |
||||
|
if (MM_editRedirectUrl.length() != 0 && request.getQueryString() != null) { |
||||
|
MM_editRedirectUrl += ((MM_editRedirectUrl.indexOf('?') == -1)?"?":"&") + request.getQueryString(); |
||||
|
} |
||||
|
} |
||||
|
%> |
||||
|
<% |
||||
|
// *** Insert Record: construct a sql insert statement and execute it |
||||
|
|
||||
|
if (request.getParameter("MM_insert") != null) { |
||||
|
|
||||
|
// create the insert sql statement |
||||
|
StringBuffer MM_tableValues = new StringBuffer(), MM_dbValues = new StringBuffer(); |
||||
|
for (int i=0; i+1 < MM_fields.length; i+=2) { |
||||
|
String formVal = MM_fields[i+1]; |
||||
|
String elem; |
||||
|
java.util.StringTokenizer tokens = new java.util.StringTokenizer(MM_columns[i+1],","); |
||||
|
String delim = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:""; |
||||
|
String altVal = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:""; |
||||
|
String emptyVal = ((elem = (String)tokens.nextToken()) != null && elem.compareTo("none")!=0)?elem:""; |
||||
|
if (formVal.length() == 0) { |
||||
|
formVal = emptyVal; |
||||
|
} else { |
||||
|
if (altVal.length() != 0) { |
||||
|
formVal = altVal; |
||||
|
} else if (delim.compareTo("'") == 0) { // escape quotes |
||||
|
StringBuffer escQuotes = new StringBuffer(formVal); |
||||
|
for (int j=0; j < escQuotes.length(); j++) |
||||
|
if (escQuotes.charAt(j) == '\'') escQuotes.insert(j++,'\''); |
||||
|
formVal = "'" + escQuotes + "'"; |
||||
|
} else { |
||||
|
formVal = delim + formVal + delim; |
||||
|
} |
||||
|
} |
||||
|
MM_tableValues.append((i!=0)?",":"").append(MM_columns[i]); |
||||
|
MM_dbValues.append((i!=0)?",":"").append(formVal); |
||||
|
} |
||||
|
MM_editQuery = new StringBuffer("insert into " + MM_editTable); |
||||
|
MM_editQuery.append(" (").append(MM_tableValues.toString()).append(") values ("); |
||||
|
MM_editQuery.append(MM_dbValues.toString()).append(")"); |
||||
|
|
||||
|
if (!MM_abortEdit) { |
||||
|
// finish the sql and execute it |
||||
|
Driver MM_driver = (Driver)Class.forName(MM_editDriver).newInstance(); |
||||
|
Connection MM_connection = DriverManager.getConnection(MM_editConnection,MM_editUserName,MM_editPassword); |
||||
|
PreparedStatement MM_editStatement = MM_connection.prepareStatement(MM_editQuery.toString()); |
||||
|
MM_editStatement.executeUpdate(); |
||||
|
MM_connection.close(); |
||||
|
|
||||
|
// redirect with URL parameters |
||||
|
if (MM_editRedirectUrl.length() != 0) { |
||||
|
response.sendRedirect(response.encodeRedirectURL(MM_editRedirectUrl)); |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
%> |
||||
|
<% |
||||
|
Driver DriveraddressData = (Driver)Class.forName(MM_jimi_DRIVER).newInstance(); |
||||
|
Connection ConnaddressData = DriverManager.getConnection(MM_jimi_STRING,MM_jimi_USERNAME,MM_jimi_PASSWORD); |
||||
|
PreparedStatement StatementaddressData = ConnaddressData.prepareStatement("SELECT * FROM address"); |
||||
|
ResultSet addressData = StatementaddressData.executeQuery(); |
||||
|
boolean addressData_isEmpty = !addressData.next(); |
||||
|
boolean addressData_hasData = !addressData_isEmpty; |
||||
|
Object addressData_data; |
||||
|
int addressData_numRows = 0; |
||||
|
%> |
||||
|
<html> |
||||
|
<head> |
||||
|
<title>Test Document 2</title> |
||||
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
|
||||
|
</body> |
||||
|
</html> |
||||
|
<% |
||||
|
addressData.close(); |
||||
|
StatementaddressData.close(); |
||||
|
ConnaddressData.close(); |
||||
|
%> |
@ -0,0 +1,178 @@ |
|||||
|
<html> |
||||
|
<head> |
||||
|
<title>HTML 4.0 Test Page</title> |
||||
|
<style type="text/css"> |
||||
|
<!-- |
||||
|
body, table, input { |
||||
|
font-family: Arial, Helvetica; |
||||
|
font-size: 8pt; |
||||
|
} |
||||
|
body { |
||||
|
border: none; |
||||
|
padding-left: 1%; |
||||
|
} |
||||
|
table.data { |
||||
|
width: 98%; |
||||
|
background-color: #f7f7f7; |
||||
|
border: none; |
||||
|
} |
||||
|
tr { |
||||
|
vertical-align: baseline; |
||||
|
} |
||||
|
td, th { |
||||
|
padding: 1pt; |
||||
|
} |
||||
|
th { |
||||
|
background-color: #b0c4de; |
||||
|
border: outset 1px; |
||||
|
} |
||||
|
td { |
||||
|
border-width: inherit; |
||||
|
border-style: inherit; |
||||
|
} |
||||
|
.right { |
||||
|
float: right; |
||||
|
} |
||||
|
.left { |
||||
|
float: left; |
||||
|
} |
||||
|
.title { |
||||
|
font-size: 22pt; |
||||
|
font-weight: bold; |
||||
|
font-style: italic; |
||||
|
} |
||||
|
.label { |
||||
|
font-size: 9pt; |
||||
|
font-weight: bold; |
||||
|
text-align: right; |
||||
|
} |
||||
|
.header { |
||||
|
background-color: #f7f7f7; |
||||
|
} |
||||
|
.light { |
||||
|
background-color: #efefef; |
||||
|
border-width: 1pt; |
||||
|
border-style: none; |
||||
|
} |
||||
|
.dark { |
||||
|
background-color: #e7e7e7; |
||||
|
border-width: 1pt; |
||||
|
border-style: none; |
||||
|
} |
||||
|
.status { |
||||
|
font-family: Lucida Console; |
||||
|
font-size: 7pt; |
||||
|
background-color: #dfdfdf; |
||||
|
border-width: 1pt; |
||||
|
border-style: none; |
||||
|
} |
||||
|
input.small { |
||||
|
font-family: Arial; |
||||
|
font-size: 7pt; |
||||
|
background-color: #efefef; |
||||
|
border-width: 1px; |
||||
|
width: 27pt; |
||||
|
height: 13pt; |
||||
|
} |
||||
|
--> |
||||
|
</style> |
||||
|
</head> |
||||
|
<body bgcolor="#f7f7f7" onload="document.search.filter.focus();"> |
||||
|
|
||||
|
<table class="data" cellpadding=2 cellspacing=2> |
||||
|
<colgroup> |
||||
|
<col><!-- Name --> |
||||
|
<col><!-- Street --> |
||||
|
<col size=16em><!-- City --> |
||||
|
<col size=2em><!-- State --> |
||||
|
<col size=5em><!-- Zipcode --> |
||||
|
<col size=10em><!-- Phone --> |
||||
|
</colgroup> |
||||
|
<tr class="header"> |
||||
|
<td colspan=2 class="title">Contact List</td> |
||||
|
<form name="search"> |
||||
|
<td colspan=4 align=right><b class="label">Search:</b> |
||||
|
<input type="text" name="filter" style="width: 140pt"/></td> |
||||
|
</form> |
||||
|
</tr> |
||||
|
<!-- Table Headers -----> |
||||
|
<th>Name</th> |
||||
|
<th>Street</th> |
||||
|
<th>City</th> |
||||
|
<th>ST</th> |
||||
|
<th>Zip</th> |
||||
|
<th>Phone</th> |
||||
|
<!----------------------> |
||||
|
<tr class="light"> |
||||
|
<!--.---+----1----+----2----+----3----+----4----+----5--> |
||||
|
<td>This 30 character Company Name</td> |
||||
|
<td>My 30 character Street Address</td> |
||||
|
<td>Rancho Cucamonga</td> |
||||
|
<td>CA</td> |
||||
|
<td>99999_</td> |
||||
|
<td>(800) 555-1212</td> |
||||
|
</tr><!---+----1----+----2----+----3----+----4----+----5--> |
||||
|
<tr class="dark"> |
||||
|
<td>2</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="light"> |
||||
|
<td>3</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="dark"> |
||||
|
<td>4</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="light"> |
||||
|
<td>5</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="dark"> |
||||
|
<td>6</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="light"> |
||||
|
<td>7</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="dark"> |
||||
|
<td>8</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="light"> |
||||
|
<td>9</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="dark"> |
||||
|
<td>10</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="light"> |
||||
|
<td>11</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="dark"> |
||||
|
<td>12</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="light"> |
||||
|
<td>13</td><td> </td><td> </td> |
||||
|
<td> </td><td> </td><td> </td> |
||||
|
</tr> |
||||
|
<tr class="status"> |
||||
|
<td colspan=6> |
||||
|
<span class="left">  Page 1 of 2</span> |
||||
|
<span class="right">< prev   next >  </span> |
||||
|
</td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
<form> |
||||
|
<input type="button" value="save" class="small"> |
||||
|
<input type="button" value="reset" class="small"> |
||||
|
<input type="button" value="delete" class="small"> |
||||
|
<input type="text" width=30> |
||||
|
<input type="submit" value="submit" class="small"> |
||||
|
</form> |
||||
|
</body> |
||||
|
</html> |
@ -0,0 +1,52 @@ |
|||||
|
<%! static String pageTitle = "Snoopy"; %> |
||||
|
<%@ page info="test area" %> |
||||
|
<%@ page import="java.util.Enumeration" %> |
||||
|
<%@ include file="include/pageHeader.jsp" %> |
||||
|
<body style="background-color: #f0f0f0"> |
||||
|
<div> |
||||
|
<h1>Header And Session Snooper</h1> |
||||
|
|
||||
|
<h3>Header Contents:</h3> |
||||
|
<p class="content"> |
||||
|
<% |
||||
|
Enumeration header = request.getHeaderNames(); |
||||
|
while(header.hasMoreElements()) { |
||||
|
String name = header.nextElement().toString(); |
||||
|
String value = request.getHeader(name); |
||||
|
out.println(" " + name + " = " + value + " <br>"); |
||||
|
} |
||||
|
%> |
||||
|
<h3>Request Parameters:</h3> |
||||
|
<p class="content"> |
||||
|
RemoteUser = <%= request.getRemoteUser() %> <br> |
||||
|
SessionID from cookie: <%= request.isRequestedSessionIdFromCookie() %> <br> |
||||
|
SessionID from URL: <%= request.isRequestedSessionIdFromURL() %> <br> |
||||
|
<% |
||||
|
Enumeration arglist = request.getParameterNames(); |
||||
|
while(arglist.hasMoreElements()) { |
||||
|
String name = arglist.nextElement().toString(); |
||||
|
String value = request.getParameter(name); |
||||
|
out.println(" " + name + " = " + value + " <br>"); |
||||
|
} |
||||
|
%> |
||||
|
|
||||
|
<h3>Session Contents:</h3> |
||||
|
<p class="content"> |
||||
|
sessionId: <%= session.getId()%> <br> |
||||
|
maxInactiveInterval: <%= session.getMaxInactiveInterval() %> seconds <br> |
||||
|
sessionAttributes: <br> |
||||
|
<p class="list"> |
||||
|
<% Enumeration enum = session.getAttributeNames(); |
||||
|
while(enum.hasMoreElements()) { |
||||
|
String attr = enum.nextElement().toString(); |
||||
|
String val = session.getAttribute(attr).toString(); |
||||
|
out.println(" " + attr + " = " + val + " <br>"); |
||||
|
} |
||||
|
%> |
||||
|
<hr> |
||||
|
<form method=GET action="/endSession.jsp" class="center"> |
||||
|
<input type="submit" value="End Session"/> |
||||
|
</form> |
||||
|
</div> |
||||
|
</body> |
||||
|
</html> |