2014-06-09 53 views
0

我無法運行我的程序。它應該從JSP頁面獲取信息到servlet,以便它可以通過Java類中的方法進行驗證。然後,一旦驗證該servlet確定是否將消息發送到前一個JSP頁面或成功JSP頁面。當我運行該程序時,它會將我帶到RegisterUser.jsp頁面。我輸入信息然後點擊提交。它讓我變成了一個404找不到的頁面。該鏈接表示它試圖將我指向CreateUser.java servlet。它不應該這樣做。任何幫助將不勝感激,無論它只是一個鏈接,我可以找到信息或一些實際的解決方案幫助。謝謝。.JSP和servlet連接到.java類

  1. CreateUser.java SERVLET:

    @WebServlet(name = "createUser", urlPatterns = {"/createUser"}) 
    public class CreateUser extends HttpServlet { 
    
    /** 
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> 
    * methods. 
    * 
    * @param req 
    * @param resp 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    
        protected void processRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        System.out.println("in process login.java"); 
        ServletContext context = getServletContext(); 
    
        // Extract password and id from login.jsp form 
    
        String userName = req.getParameter("USERNAME"); 
        String password = req.getParameter("PASSWORD"); 
        String answerOne = req.getParameter("ANSWERONE"); 
        String answerTwo = req.getParameter("ANSWERTWO"); 
        String answerThree = req.getParameter("ANSWERTHREE"); 
    
        Boolean duplicateUser = User.verifyUserExists(userName); 
    
        HttpSession session = req.getSession(); 
        if (duplicateUser) { 
         req.setAttribute("MESSAGE", "UserName is in use. Try again"); 
         context.getRequestDispatcher("/RegisterUser.jsp").forward(req, resp); 
        } 
        else{ 
         User user = new User(userName, password, answerOne, answerTwo, answerThree); 
         user.addUser(user); 
         req.getRequestDispatcher("RegistrationSuccessful.jsp").forward(req, resp); 
        } 
    
    } 
    

    }

  2. RegisterUser.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
     pageEncoding="ISO-8859-1"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<HTML> 

    <body> 
     <H1>New User Registration</H1> 
     <H3>Required Information</H3> 

     <FORM name="CREATE" action="servlets/CreateUser.java" method="POST" > 
      <table> 
       <tr> 
        <td>Username:</td> 
        <td><INPUT name="USERNAME" maxlength="50" size="40" type="text" ></TD> 
       </tr> 
       <tr> 
        <td>Password:</td> 
        <td><INPUT name="PASSWORD" maxlength="50" size="40" type="password" ></td> 
       </tr> 
       <tr> 
        <td>Favorite Vacation Spot:</td> 
        <td><INPUT name="ANSWERONE" maxlength="50" size="40" type="text" ></TD> 
       </tr> 
       <tr> 
        <td>Mother's Maiden Name:</td> 
        <td><INPUT name="ANSWERTWO" maxlength="50" size="40" type="text" ></TD> 
       </tr> 
       <tr> 
        <td>First Pet's Name:</td> 
        <td><INPUT name="ANSWERTHREE" maxlength="50" size="40" type="text" ></TD> 
       </tr> 
       <tr> 
        <td><input type="submit" name="Register" value="Register" onClick = "CreateUser.java"></td> 
        <td></td> 
       </tr> 
      </table> 
     </FORM> 
     <p>${MESSAGE}</p> 

    </BODY> 
</HTML> 
  1. User.java類

公共類用戶{

private String userName; 
private String password; 
    private String answerOne; 
    private String answerTwo; 
    private String answerThree; 
    private static File file = new File("C:\\Users.txt"); 

    @SuppressWarnings("OverridableMethodCallInConstructor") 
    public User(String un, String pw, String a1, String a2, String a3) { 
     setUserName(un); 
     setPassword(pw); 
     setAnswerOne(a1); 
     setAnswerTwo(a2); 
     setAnswerThree(a3); 

    } 

    public void addUser(User user) throws IOException { 
     FileWriter fw = new FileWriter(getFile()); 
     try (BufferedWriter bfw = new BufferedWriter(fw)) { 
      bfw.write(user.userName); 
      bfw.write(user.password); 
      bfw.write(user.answerOne); 
      bfw.write(user.answerTwo); 
      bfw.write(user.answerThree); 
      bfw.newLine(); 
     } 

    } 

    public static boolean verifyUserExists(String userName) throws FileNotFoundException { 
     Scanner scannedFile = new Scanner(getFile()); 
     while (scannedFile.hasNext()) { 
      String search = scannedFile.next(); 
      return search.equals(userName); 
     } 
     return false; 
    } 

    public static Boolean verifyPassword(String userName, String password) throws FileNotFoundException { 
     Scanner scannedFile = new Scanner(getFile()); 
     while (scannedFile.hasNext()) { 
      String search = scannedFile.next(); 
      if (search.equals(userName)) { 
       return scannedFile.nextLine().equals(getMD5(password)); 
      } 
     } 
     return false; 
    } 

    public static String getMD5(String input) { 
     try { 
      MessageDigest md = MessageDigest.getInstance("MD5"); 
      byte[] messageDigest = md.digest(input.getBytes()); 
      BigInteger number = new BigInteger(1, messageDigest); 
      String hashtext = number.toString(16); 
      // Now we need to zero pad it if you actually want the full 32 chars. 
      while (hashtext.length() < 32) { 
       hashtext = "0" + hashtext; 
      } 
      return hashtext; 
     } catch (NoSuchAlgorithmException e) { 
      throw new RuntimeException(e); 
     } 
    } 

    public static File getFile() { 
     return file; 
    } 
+0

試圖改變'行動= 「小服務程序/ CreateUser.java」''到行動=「小服務程序/ CreateUser「' – yate

+0

我剛剛運行它的建議,仍然收到相同的錯誤頁面。我嘗試改變路徑和名稱,至少不要試圖將我引導到我的servlet,而這些servlet無法在瀏覽器中查看。 – KLG2014

+0

將action =「servlets/CreateUser.java」更改爲action =「/ createUser」。 – fajarkoe

回答

2

使用

action="createUser" OR action="./createUser" 

行動= 「/的createUser」 將調用默認情況下的URL

http://localhost:8084/createUser 

而行動= 「./的createUser」 將調用servlet的URL模式在當前目錄/上下文

http://localhost:8084/ContextName/createUser 
+0

謝謝。事實證明,這是我創建用戶的邏輯。在我能做任何事之前,我需要確保我的文件存在。它現在可以工作,並且正確運行。這就是爲什麼它給了我404錯誤。該文件未找到。 – KLG2014