/////////////////////////////////////////////////////////////////////////////// // // 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 java.util.Vector; import java.util.Properties; import javax.servlet.*; import javax.servlet.http.*; import com.ibm.as400.access.AS400; import com.ibm.as400.access.Trace; 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 { public void init(ServletConfig config) throws ServletException { super.init(config); // The Toolbox uses a set of default icons to represents expanded, // collapsed, and documents within the HTMLTree. To enhance those icons, // the Toolbox 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 those images need to be extracted // from the jar file and placed in the appropriate webserver directory // (by default it is the /html directory). Then uncomment the following // lines of code and specify the correct location in the these set // methods. The location can be absolute or relative. HTMLTreeElement.setExpandedGif("/images/expanded.gif"); HTMLTreeElement.setCollapsedGif("/images/collapsed.gif"); HTMLTreeElement.setDocGif("/images/bullet.gif"); } /** * Process the GET request. * @param req The request. * @param res The response. **/ public void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 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); AS400 sys = new AS400(CPUStatus.systemName_, "javactl", "jteam1"); // Create a File object and set the root IFS directory. IFSJavaFile root = new IFSJavaFile(sys, "/QIBM"); // Create a Filter and list all of the directories. DirFilter filter = new DirFilter(); //File[] dirList = root.listFiles(filter); // 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); } } catch (Exception e) { e.printStackTrace(); } return tree; } public void destroy(ServletConfig config) { // do nothing } public String getServletInfo() { return "FileTree Navigation"; } }