build.xml

1/1

project3-8.0/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:

Project 3

63: 64: 65: 66: 67:
68: 69: 70: 73: 79: 80: 81: 82: 84: 85: 86: 87: 96: 97: 98: 99: 102: 103: 104: 105: 110: 111: 112: 113: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124:


server.xml project3-8.0/conf/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:



1/1

Login.java

1/2

project3-8.0/src/cscie259/project3/wahoo/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:

package cscie259.project3.wahoo; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import import import import

javax.xml.transform.dom.DOMSource; javax.xml.transform.Transformer; javax.xml.transform.TransformerException; javax.xml.transform.TransformerFactory;

import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource;

/** * This servlet logs the user into the Wahoo portal. * * You MAY modify this file. * * @author Computer Science E-259 * @version 8.0 * * @author YOUR NAME GOES HERE **/ public class Login extends WahooServlet { /** * Presents user with login screen and processes login attempts * and account creations. * * @param request HTTP request object * @param response HTTP response object * * @throws IOException if a file-related error occurs * @throws ServletException if a servlet-related error occurs */ protected void doWork(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // check to see if a session already exists; if so, invalidate it HttpSession session = request.getSession(false); if (session != null) { // attempt to retrieve username from session String username = (String) session.getAttribute("username"); // if username is found, log user out (by invalidating session) if (username != null) System.out.println("User " + username + " logged out"); session.invalidate(); // display the login screen displayLoginForm(request, response, null);

63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124:

return; } // process form submission, else display login screen String operation = request.getParameter("submit"); if (operation != null && (operation.equals("Log In") || operation.equals("Register"))) { // retrieve username from HTTP request String username = request.getParameter("username"); // if username missing, display the login screen with an // informative error message if (username == null || username.equals("")) { displayLoginForm(request, response, "Please enter a username"); return; } // retrieve password from HTTP request String password = request.getParameter("password"); // if password missing, display the login screen with an // informative error message if (password == null || password.equals("")) { displayLoginForm(request, response, "Please enter a password"); return; } // retrieve User object with given username; if password incorrect, // display the login screen with an informative error message if (operation.equals("Log In")) { User user = UserManager.getUser(username); if (user == null || !user.getPassword().equals(password)) { displayLoginForm(request, response, "Invalid username or password"); return; } } else { // attempt create a new user, erring if desired username // username is already in use User user = UserManager.addUser(username, password); if (user == null) { displayLoginForm(request, response, "Unable to add user " + username + ". " + "Please try a different username."); return; } // save the new user! UserManager.save(); } // report successful login System.out.println("User " + username + " logged in");

Login.java

2/2

project3-8.0/src/cscie259/project3/wahoo/ 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186:

// establish a new session and store the username in it session = request.getSession(true); session.setAttribute("username", username); // redirect user to view servlet redirect(response, "/servlet/view"); return; } // else display the login screen by default else { displayLoginForm(request, response, null); } }

/** * Displays the login form, with an optional error string. * * @param request HTTP request object * @param response HTTP response object * @param error optional error string * * @throws IOException if an IO-related error occurs * @throws ServletException if a servlet-related error occurs */ public void displayLoginForm(HttpServletRequest request, HttpServletResponse response, String error) throws IOException, ServletException { // output text/html MIME type response.setContentType("text/html"); // retrieve PrintWriter PrintWriter out = response.getWriter(); // attempt to apply login.xsl to an empty document try { // prepare to process login.xsl by way of TrAX TransformerFactory tFactory = TransformerFactory.newInstance(); StreamSource xslSource = new StreamSource(getServletContext().getRealPath("/xsl/login.xsl")); Transformer transformer = tFactory.newTransformer(xslSource); // if there’s an error message waiting to be displayed, // pass it to login.xsl as a stylesheet parameter if (error != null && !error.equals("")) transformer.setParameter("error", error); // apply login.xsl to an empty document by way of TrAX; // of course, a non-minimalist login screen might actually // make use of more interesting data (hint, hint) transformer.transform(new DOMSource(), new StreamResult(out)); } // catch any exceptions catch (TransformerException e) {

187: 188: 189: 190: 191: 192: }

e.printStackTrace(); throw new ServletException("Can’t process login.xsl: " + e.getMessage()); } }

NewsProvider.java

1/1

project3-8.0/src/cscie259/project3/wahoo/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:

package cscie259.project3.wahoo; import import import import

java.io.BufferedReader; java.io.IOException; java.io.InputStream; java.io.InputStreamReader;

/** * This class gets news headlines by connecting to Moreover. * * You MAY modify this file. * * @author Computer Science E-259 * @version 8.0 * * @author YOUR NAME GOES HERE **/ public final class NewsProvider { /** * Default constructor is private so that this utility * class cannot be instantiated. */ private NewsProvider() {}

/** * Returns an XML representation of the headlines for a given * category. * * @param category category for which to fetch headlines * * @return XML representation of headlines for given category * * @throws IOException if an IO-related error occurs */ public static String getHeadlines(String category) throws IOException { // retrieve newsfeed from Moreover, taking care to escape URL // to the application/x-www-form-urlencoded MIME format System.out.println("Getting category = " + category); String urlStr = "http://p.moreover.com/cgi-local/page?c=" + java.net.URLEncoder.encode(category, "UTF-8") + "&o=xml"; java.net.URL url = new java.net.URL(urlStr); InputStream in = url.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; String xmlStr = ""; boolean start = false; // iterate through retrieved XML in order to grab root element // and its descendants do { line = reader.readLine(); if (line != null) { // This is a trick to eliminate the declaration and

63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: }

// the DOCTYPE declaration in order that this be a legal // XML fragment that can be embedded into another document! if (line.indexOf("") != -1) start = true; if (start) xmlStr += line + "\n"; } } while (line != null); // return root element and its descendants as a String return xmlStr; }

Prefs.java

1/1

project3-8.0/src/cscie259/project3/wahoo/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:

package cscie259.project3.wahoo; import import import import

java.io.BufferedReader; java.io.IOException; java.io.InputStream; java.io.InputStreamReader;

import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

/** * This servlet displays personalized preferences in the Wahoo portal. * * You MUST modify this file. * * @author Computer Science E-259 * @version 8.0 * * @author YOUR NAME GOES HERE **/ public class Prefs extends WahooServlet { /** * a cached copy of the categories XML file */ private String categoriesXML_ = "";

/** * Called automatically by servlet container; initializes the servlet * and the categories list. * * @throws ServletException if a servlet-related error occurs */ public void init() throws ServletException { // ensure UserManager is instantiated super.init(); // try to read categories into memory try { // grab categories from cached file ServletContext context = getServletContext(); InputStream in = context.getResourceAsStream("/xml/cache/nested_category_list.xml"); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line; boolean start = false; // iterate through XML in order to grab root element // and its descendants do {

63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: }

line = reader.readLine(); if (line != null) { // This is a trick to eliminate the declaration and // the DOCTYPE declaration in order that this be a legal // XML fragment that can be embedded into another document! if (line.indexOf("") != -1) start = true; if (start) categoriesXML_ += line + "\n"; } } while (line != null); } // catch any error catch (IOException e) { throw new ServletException("Can’t read categories: " + e.getMessage()); } }

/** * Displays and processes the preferences form; if user attempts to execute * this servlet before user’s authenticated (via the login * servlet), should redirect user to login servlet. * * @param request HTTP request object * @param response HTTP response object * * @throws IOException if an IO-related error occurs * @throws ServletException if a servlet-related error occurs */ public void doWork(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // TODO }

User.java

1/1

project3-8.0/src/cscie259/project3/wahoo/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:

package cscie259.project3.wahoo; import java.util.LinkedList; import java.util.List;

/** * This class represents a single user of the Wahoo portal. * * You MAY modify this file. * * @author Computer Science E-259 * @version 8.0 * * @author YOUR NAME GOES HERE **/ public class User { /* * user’s username */ private String username_;

/* * user’s password */ private String password_;

/* * user’s list of preferred categories */ private List newsCategories_ = new LinkedList();

/** * Creates a new User object, recording user’s name and a password. * * @param username new user’s username * @param password new user’s password */ public User(String username, String password) { username_ = username; password_ = password; }

/** * Add a news category to the preferred list, if it not already in the * list. * * @param cat category to be added to user’s preferred categories */ public void addNewsCategory(String cat) { if (!newsCategories_.contains(cat)) newsCategories_.add(cat); }

63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: }

/** * Get the user’s preferred news categories. * * @return list of user’s preferred news categories */ public List getNewsCategories() { return newsCategories_; }

/** * Get the password for this user. * * @return user’s password */ public String getPassword() { return password_; }

/** * Get the username for this user. * * @return user’s username */ public String getUserName() { return username_; }

/** * Removes a news category to the preferred list if it is on the list. * * @param cat category to be removed from user’s preferred categories */ public void removeNewsCategory(String cat) { newsCategories_.remove(cat); }

/** * Saves the user’s preferred news categories, overwriting previous * settings. * * @param newsCategories list of user’s preferred news categories */ public void setNewsCategories(List newsCategories) { newsCategories_ = newsCategories; }

UserManager.java

1/3

project3-8.0/src/cscie259/project3/wahoo/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:

package cscie259.project3.wahoo; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.HashMap; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.Map; import java.util.Properties; import javax.servlet.ServletContext; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.OutputKeys; import org.apache.xml.serializer.Serializer; import org.apache.xml.serializer.SerializerFactory; import import import import

org.xml.sax.Attributes; org.xml.sax.ContentHandler; org.xml.sax.InputSource; org.xml.sax.SAXException;

import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.DefaultHandler;

/** * This class keeps track of users of the Wahoo portal by writing out * information to an xml file. * * You MAY modify this file. * * @author Computer Science E-259 * @version 8.0 * * @author YOUR NAME GOES HERE **/ public final class UserManager { /** * a reference to the one and only instance of this class */ private static UserManager instance_;

/** * a reference to the servlet context */ private ServletContext context_;

/** * a hash table of all users */

63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124:

private Map users_ = new HashMap();

/** * A constructor that reads the user DB from an input stream. */ private UserManager(ServletContext context) { context_ = context; readUsers(context_.getResourceAsStream("/xml/users.xml")); }

/** * Must be called (e.g., by Login’s init() method) once before * using any other method in class. * * @param context servlet’s context object */ public static synchronized void init(ServletContext context) { if (instance_ == null) instance_ = new UserManager(context); }

/** * Adds a new user using the given username and password. * Returns the new User object if the operation succeeded or null if the * user could not be added because the username was already taken. * * @param username user’s username * @param password user’s password * * @return User object belonging to given username and password */ public static synchronized User addUser(String username, String password) { return instance().addUserImpl(username, password); }

/** * Adds a new user using the supplied username and password. * Returns the new User object if the operation succeeded or null if the * user could not be added becuase the username was already taken. * * @param username user’s username * @param password user’s password * * @return User object belonging to given username and password */ private User addUserImpl(String username, String password) { // check to see if user already exists, returning immediately if so if (getUserImpl(username) != null) return null; // add user to in-memory database System.out.print("Adding \"" + username + "\" to main memory with " + "password \"" + password + "\"... "); User user = new User(username, password);

UserManager.java

2/3

project3-8.0/src/cscie259/project3/wahoo/ 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186:

users_.put(username, user); System.out.println("Done."); return user; }

/** * Returns a User object for given username or null if one is not found. * * @param username user’s username * * @return User object belonging to given username */ public static synchronized User getUser(String username) { return instance().getUserImpl(username); }

/** * Returns a User object for given username or null if one is not found. * * @param username user’s username * * @return User object belonging to given username */ private User getUserImpl(String username) { return (User)users_.get(username); }

/** * Returns the one and only instance of this class, throwing an exception * if it has not been initialized. */ private static UserManager instance() { if (instance_ == null) throw new RuntimeException("UserManager must be initialized " + "before use"); return instance_; }

/** * Read the user info from the input stream. * * @param in input stream */ private void readUsers(InputStream in) { // try to parse users.xml, using internal UserReader class // as a ContentHandler, catching any errors try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(new InputSource(in), new UserReader()); } catch (IOException e)

187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248:

{ throw new RuntimeException("Error accessing user config file : " + e.getMessage()); } catch (SAXException e) { throw new RuntimeException("Error parsing user config file: " + e.getMessage()); } catch (Exception e) { e.printStackTrace(); } }

/** * Saves the information about all users to the information database * (stored as a file). Call this methods whenever you have made changed * to User objects you would like to save. If you do not call this method, * your chages will be lost next time you start up the server. */ public static synchronized void save() { instance().writeUsers(); }

/** * Writes users info to the config file, overwriting old contents. */ private void writeUsers() { // try to write out users try { // prepare to pretty-print (manually) char [] LF = new char[1]; char [] TAB = new char[1]; LF[0] = ’\n’; TAB[0] = ’\t’; String path = context_.getRealPath("/xml/users.xml"); System.out.println("Writing user info to : " + path); FileOutputStream fos = new FileOutputStream(path); Properties format = new Properties(); format.put(OutputKeys.ENCODING, "UTF-8"); format.put(OutputKeys.INDENT, "no"); format.put(OutputKeys.METHOD, "xml"); Serializer serializer = SerializerFactory.getSerializer(format); serializer.setOutputStream(fos); ContentHandler handler = serializer.asContentHandler(); // start outputting handler.startDocument(); AttributesImpl attributes = new AttributesImpl(); handler.startElement(null, null, "users", attributes); handler.characters(LF, 0, 1); // iterate over the users and write them out Iterator iter = users_.keySet().iterator(); while (iter.hasNext()) {

UserManager.java

3/3

project3-8.0/src/cscie259/project3/wahoo/ 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310:

String username = (String)iter.next(); User user = (User)users_.get(username); AttributesImpl atts = new AttributesImpl(); atts.addAttribute(null, null, "name", null, user.getUserName()); atts.addAttribute(null, null, "password", null, user.getPassword()); handler.characters(TAB, 0, 1); handler.startElement(null, null, "user", atts); handler.characters(LF, 0, 1); // iterate over the user’s news categories and write them out atts = new AttributesImpl(); handler.characters(TAB, 0, 1); handler.characters(TAB, 0, 1); handler.startElement(null, null, "news-categories", atts); handler.characters(LF, 0, 1); Iterator cats = user.getNewsCategories().iterator(); while (cats.hasNext()) { String cat = (String)cats.next(); AttributesImpl atts2 = new AttributesImpl(); atts2.addAttribute(null, null, "name", null, cat); handler.characters(TAB, 0, 1); handler.characters(TAB, 0, 1); handler.characters(TAB, 0, 1); handler.startElement(null, null, "category", atts2); handler.endElement(null, null, "category"); handler.characters(LF, 0, 1); } handler.characters(TAB, 0, 1); handler.characters(TAB, 0, 1); handler.endElement(null, null, "news-categories"); handler.characters(LF, 0, 1); handler.characters(TAB, 0, 1); handler.endElement(null, null, "user"); handler.characters(LF, 0, 1); } // stop outputting handler.endElement(null, null, "users"); handler.characters(LF, 0, 1); handler.endDocument(); } // catch any errors catch (FileNotFoundException e) { throw new RuntimeException("Can’t open file for writing:: " + e.getMessage()); } catch (IOException e) { throw new RuntimeException("Can’t open file for writing:: " + e.getMessage()); } catch (SAXException e) { throw new RuntimeException("Can’t write out users: " + e.getMessage()); } }

311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: }

/** * An inner class which is the SAX2 handler used to read the user * XML file into Java objects. */ private class UserReader extends DefaultHandler { // reference to user being parsed private User curUser_;

/** * SAX handler for elements * * @param namespaceURI element’s namespace (unused) * @param localName element’s local name (unused) * @param qName element’s name * @param atts element’s attributes * * @throws SAXException */ public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { // process user elements if (qName.equals("user")) { String username = atts.getValue("name"); if (username == null || username.equals("")) throw new SAXException("user element must have a " + "name attribute"); String password = atts.getValue("password"); if (password == null || password.equals("")) throw new SAXException("user element must have a " + "password attribute"); curUser_ = addUserImpl(username, password); if (curUser_ == null) throw new SAXException("Can’t add user: " + "username " + username + " " + "is already taken"); } // process category elements else if (qName.equals("category")) { String name = atts.getValue("name"); if (name == null || name.equals("")) throw new SAXException("category element must have a " + "name attribute"); System.out.print("Associating \"" + name + "\" with \"" + curUser_.getUserName() + "\"... "); curUser_.addNewsCategory(name); System.out.println("Done."); } } }

View.java project3-8.0/src/cscie259/project3/wahoo/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:

package cscie259.project3.wahoo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;

/** * This servlet displays the main personalized view in the Wahoo portal. * * You MUST modify this file. * * @author Computer Science E-259 * @version 8.0 * * @author YOUR NAME GOES HERE **/ public class View extends WahooServlet { /** * Displays the current user’s main view; if user attempts to execute * this servlet before user’s authenticated (via the login * servlet), should redirect user to login servlet. * * @param request HTTP request object * @param response HTTP response object * * @throws IOException if an IO-related error occurs * @throws ServletException if a servlet-related error occurs */ public void doWork(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // TODO } }

1/1

WahooServlet.java

1/1

project3-8.0/src/cscie259/project3/wahoo/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:

package cscie259.project3.wahoo; import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException;

/** * Base class for Wahoo’s servlets. * * You MAY modify this file. * * @author Computer Science E-259 * @version 8.0 * * @author YOUR NAME GOES HERE **/ public abstract class WahooServlet extends HttpServlet { /** * Common initialization tasks for this group of servlets. * Initializes the UserManager instance. * * @throws ServletException if a servlet-related error occurs */ public void init() throws ServletException { UserManager.init(getServletContext()); }

/** * Responds to GETs in the same manner as POSTs. * * @param request HTTP request object * @param response HTTP response object * * @throws IOException if an IO-related error occurs * @throws ServletException if a servlet-related error occurs */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doWork(request, response); }

/** * Responds to POSTs in the same manner as GETs. * * @param request HTTP request object * @param response HTTP response object * * @throws IOException if an IO-related error occurs

63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: }

* @throws ServletException if a servlet-related error occurs */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doWork(request, response); }

/** * To be implemented by descendants, handles GETs and POSTs identically. * * @param request HTTP request object * @param response HTTP response object * * @throws IOException if an IO-related error occurs * @throws ServletException if a servlet-related error occurs */ protected abstract void doWork(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;

/** * Used to forward the request and response objects to another servlet * (whose path is of the form "/servlet/foo") for processing. * * @param request HTTP request object * @param response HTTP response object * @param path the path to the servlet being forwarded to * * @throws IOException if an IO-related error occurs * @throws ServletException if a servlet-related error occurs */ public void forward(HttpServletRequest request, HttpServletResponse response, String path) throws IOException, ServletException { RequestDispatcher dispatch = request.getRequestDispatcher(path); dispatch.forward(request, response); }

/** * Used to redirect the user to another url (or servlet in the * same container), without preserving the current * HttpServletRequest object. * * @param response HTTP response object * @param url the url to which the user’s being redirected * * @throws IOException if an IO-related error occurs */ public void redirect(HttpServletResponse response, String url) throws IOException { response.sendRedirect(url); }

moreovernews.dtd project3-8.0/webapps/ROOT/dtd/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:

1/1

xml_nestedcatlist.dtd project3-8.0/webapps/ROOT/dtd/ 1: 2: 3: 4: 5: 6:


nested_category_list (channel*)> channel (channel_name, category*)> channel_name (#PCDATA)> category (category_name, feed_name)> category_name (#PCDATA)> feed_name (#PCDATA)>

1/1

index.jsp project3-8.0/webapps/ROOT/ 1: 2: 3: <% response.sendRedirect("/servlet/login"); %>

1/1

web.xml project3-8.0/webapps/ROOT/WEB-INF/ 1: 2: 3: 7: 8: 12: 13: 14: 15: login 16: cscie259.project3.wahoo.Login 17: 18: 19: view 20: cscie259.project3.wahoo.View 21: 22: 23: prefs 24: cscie259.project3.wahoo.Prefs 25: 26: 27: 28: 29: login 30: /servlet/login 31: 32: 33: view 34: /servlet/view 35: 36: 37: prefs 38: /servlet/prefs 39: 40: 41:

1/1

dummy.xml project3-8.0/webapps/ROOT/xml/ 1: 2:

1/1

users.xml project3-8.0/webapps/ROOT/xml/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

1/1

login.xsl

1/1

project3-8.0/webapps/ROOT/xsl/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: Wahoo! 16: 17: 18:
19: Wahoo! 20:

21:

22: 23: 24: 27: 30: 31: 32: 35: 38: 39: 40: 41: 46: 47: 48: 49: 52: 53:
25: Login: 26: 28: 29:
33: Password: 34: 36: 37:
42: 43: 44: 45:
50: 51:
54:
55:
56: 57:

58:
59:


prefs.xsl project3-8.0/webapps/ROOT/xsl/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: Wahoo! 13: 14: 15:
16: 17: 18: Wahoo’s logo 19:

20: 21: 22: 23:
24: 25: 26:
27: 28:


1/1

view.xsl project3-8.0/webapps/ROOT/xsl/ 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: Wahoo! 13: 14: 15:
16: 17: 18: Wahoo’s logo 19:

20: 21: 22: 23:
24: 25: 26:
27: 28:


1/1

build.xml 1/1 - HUIT Sites Hosting

Login.java. 1/2 project3-8.0/src/cscie259/project3/wahoo/. 1: package cscie259.project3.wahoo;. 2: 3: import java.io.IOException;. 4: import java.io.PrintWriter;. 5: 6: import javax.servlet.ServletException;. 7: 8: import javax.servlet.http.HttpServletRequest;. 9: import javax.servlet.http.HttpServletResponse;. 10: import ...

32KB Sizes 1 Downloads 198 Views

Recommend Documents

Scamazon.com - HUIT Sites Hosting
Dec 20, 2007 - project4-8.0/ directory from the course's website to your local machine. .... If your account or system ain't so happy, feel free to contact.

Wahoo! - HUIT Sites Hosting
Windows machine, you should instead execute `catalina.bat run` (assuming "%CATALINA_HOME%\bin\" is in your. PATH); alternatively ... http://127.0.0.1:n/. 10 Although you needn't type "http://" to visit most websites with most browsers these days, you

Scamazon.com - HUIT Sites Hosting
Dec 20, 2007 - an “Access Key ID” for Amazon's Web Services immediately, .... Next, proceed to edit project4-8.0/conf/server.xml with your favorite text editor.

Wahoo! - HUIT Sites Hosting
If you opt to develop on a ..... 20 Know that, during the development of this project, you can update your Javadoc by executing ... new StreamSource(new java.io.

build.xml 1/2 - HUIT Sites Hosting
7: Of course, that port cannot already be in use. Nor can it. 8: be the same value you choose for the Connector element's port. 9: 10: Also be sure to set the value ...

build.xml 1/2 - HUIT Sites Hosting
5: Computer Science E-259. 6: .... description="remove class, log, runtime, temp, and work files">. 149: ... 12: Of course, that port cannot already be in use.

build.xml 1/2 - HUIT Sites Hosting
64: call.setTargetEndpointAddress(new java.net.URL(endpoint));. 65: call.setOperationName("processPO");. 66: 67: // invoke the service and return the (PO-ACK) response. 68: return (String) call.invoke(new Object [] { poXmlString });. 69: }. 70: catch

DiagServer.java 1/2 - HUIT Sites Hosting
12: * If you spawn the server on a port already in use, you will be informed. 13: * "Server failed to start: java.net.BindException: Permission denied". 14: * Note ...

Computer Science E-259 - HUIT Sites Hosting
Nov 5, 2007 - All Rights Reserved. n-Tier Enterprise Applications. Typical J2EE Architecture. Client. Presentation. Business Logic. Data. Computer. Laptop.

SOAP 1.2 What - HUIT Sites Hosting
Apr 13, 2005 - XML with Java. Lecture 11: Web Services, SOAP 1.2, and WSDL 1.1 .... Distributed computing platforms allow programmatic components to ...

Syllabus - HUIT Sites Hosting - Harvard University
Oct 15, 2007 - the form [email protected], where username is your FAS username. .... your plan at any point, provided you obtain the staff's approval for any modifications. ... Any of these texts should prove a valuable reference for.

Computer Science E-259 - HUIT Sites Hosting
Nov 5, 2007 - 22. Copyright © 2007, David J. Malan . All Rights Reserved. Java Servlet 2.5. Java Servlet Containers. ▫ Apache Tomcat. ▫ BEA WebLogic Server. ▫ IBM WebSphere Application Server. ▫ JBoss Application Server. ▫ Oracle Applicati

General Guidelines - InMotion Hosting
Mar 28, 2016 - 12.0 Understanding Mobile Users, Mobile Queries, and Mobile Results ......................................................... 56 ... 12.9 Rating on Your Phone Issues . ...... best hospitals in the U.S. Users can trust medical informati

General Guidelines - InMotion Hosting
Mar 28, 2016 - .doc or .docx (Microsoft Word). • .xls or .xlsx (Microsoft Excel). • .pdf (PDF) files. If you encounter a page with a warning message, such as “Warning-visiting this web site may harm your computer,” or if your antivirus softwa

General Guidelines - InMotion Hosting
Mar 28, 2016 - 4.3 Clear and Satisfying Website Information: Who is Responsible and Customer Service . ...... news pages, forum pages, video pages, pages with error messages, PDFs, images, gossip pages, humor pages, ... We call such.

pdf web hosting
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. pdf web hosting.

pdf free hosting
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. pdf free hosting.

best pdf hosting site
There was a problem loading more pages. best pdf hosting site. best pdf hosting site. Open. Extract. Open with. Sign In. Main menu. Displaying best pdf hosting ...

Best Hosting Service Provider.pdf
that offer web hosting, so you'll definitely want to do some research to find the best ones. Unlike free web hosting, you will be able to buy your own domain name ...

man-62\dedicated-hosting-india.pdf
Connect more apps... Try one of the apps below to open or edit this item. man-62\dedicated-hosting-india.pdf. man-62\dedicated-hosting-india.pdf. Open. Extract.

IPA Hosting Book_V01_Apr 2017.pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. IPA Hosting ...

man-62\dedicated-hosting-provider.pdf
Connect more apps... Try one of the apps below to open or edit this item. man-62\dedicated-hosting-provider.pdf. man-62\dedicated-hosting-provider.pdf. Open.