This example code, in conjunction with the code in the other two example files, displays an HTMLTree and FileListElement in a servlet. The three files in the example are:
////////////////////////////////////////////////////////////////////////////////// // // This source is an example of using the IBM Toolbox for Java HTML // package classes, which allow you to easily build HTML and File Trees. // ////////////////////////////////////////////////////////////////////////////////// import java.io.File; import java.io.PrintWriter; import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*; import com.ibm.as400.access.AS400; import com.ibm.as400.access.IFSJavaFile; import com.ibm.as400.util.html.HTMLMeta; import com.ibm.as400.util.html.HTMLTree; import com.ibm.as400.util.html.HTMLTreeElement; import com.ibm.as400.util.html.URLParser; import com.ibm.as400.util.html.DirFilter; import com.ibm.as400.util.html.FileTreeElement; import com.ibm.as400.util.servlet.ServletHyperlink; // // An example of using the HTMLTree and FileTreeElement classes // in a servlet. // public class TreeNav extends HttpServlet { private AS400 sys_; public void init(ServletConfig config) throws ServletException { super.init(config); // Create an AS400 object. sys_ = new AS400("mySystem", "myUserID", "myPassword"); // IBM Toolbox for Java uses a set of default icons to represents expanded, // collapsed, and documents within the HTMLTree. To enhance those icons, // IBM Toolbox for Java ships three gifs (expanded.gif, collapsed.gif, bullet.gif) // in the jt400Servlet.jar file. Browsers do not have the ability to find // gifs in a jar or zip file, so you need to extract those images from the // jar file and place them in the appropriate webserver directory (by default // it is the /html directory). Then change the following lines of code to // specify the correct location in the set methods. The location can be // absolute or relative. HTMLTreeElement.setExpandedGif("http://myServer/expanded.gif"); HTMLTreeElement.setCollapsedGif("http://myServer/collapsed.gif"); HTMLTreeElement.setDocGif("http://myServer/bullet.gif"); } /** * Process the GET request. * @param req The request. * @param res The response. **/ public void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // Use session data to remember the state of the tree. HttpSession session = req.getSession(true); HTMLTree fileTree = (HTMLTree)session.getValue("filetree"); // If this session does not already have a file tree, then // create the initial tree. if (fileTree == null) fileTree = createTree(req, resp, req.getRequestURI()); // Set the Http servlet request on the HTMLTree. fileTree.setHttpServletRequest(req); resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html>\n"); out.println(new HTMLMeta("Expires","Mon, 03 Jan 1990 13:00:00 GMT")); out.println("<body>\n"); // Get the tag for the HTMLTree. out.println(fileTree.getTag()); out.println("</body>\n"); out.println("</html>\n"); out.close(); // Set the session tree value, so when entering this servlet for // the second time, the FileTree object will be reused. session.putValue("filetree", fileTree); } /** * Process the POST request. * @param req The request. * @param res The response. **/ public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); ServletOutputStream out = res.getOutputStream(); } /** * This method will create the initial HTMLTree. **/ private HTMLTree createTree(HttpServletRequest req, HttpServletResponse resp, String uri) { // Create an HTMLTree object. HTMLTree tree = new HTMLTree(req); try { // Create a URLParser object. URLParser urlParser = new URLParser(uri); // Create a File object and set the root IFS directory. IFSJavaFile root = new IFSJavaFile(sys_, "/QIBM"); // Create a Filter. DirFilter filter = new DirFilter(); // Get the list of files that satisfy the directory filter. String[] list = root.list(filter); File[] dirList = new File[list.length]; // We don't want to require webservers to use JDK1.2 because // most webserver JVM's are slower to upgrade to the latest // JDK level. The most efficient way to create these file objects // is to use the listFiles(filter) method in JDK1.2 which would // be done like the following, instead of using the list(filter) // method and then converting the returned string arrary into the // appropriate File array. // File[] dirList = root.listFiles(filter); for (int j=0; j<dirList.length; ++j) { if (root instanceof IFSJavaFile) dirList[j] = new IFSJavaFile((IFSJavaFile)root, list[j]); else dirList[j] = new File(list[j]); } for (int i=0; i<dirList.length; i++) { // Create a FileTreeElement for each directory in the list. FileTreeElement node = new FileTreeElement(dirList[i]); // Create a ServletHyperlink for the expand/collapse icons. ServletHyperlink sl = new ServletHyperlink(urlParser.getURI()); sl.setHttpServletResponse(resp); node.setIconUrl(sl); // Create a ServletHyperlink to the TreeList servlet, which will // display the contents of thie FileTreeElement (directory). ServletHyperlink tl = new ServletHyperlink("/servlet/TreeList"); tl.setTarget("list"); // If the ServletHyperlink doesn't have a name, then set it to the // name of the directory. if (tl.getText() == null) tl.setText(dirList[i].getName()); // Set the TextUrl for the FileTreeElement. node.setTextUrl(tl); // Add the FileTreeElement to the HTMLTree. tree.addElement(node); } sys_.disconnectAllServices(); } catch (Exception e) { e.printStackTrace(); } return tree; } public void destroy(ServletConfig config) { // do nothing } public String getServletInfo() { return "FileTree Navigation"; } }