2014-06-09 46 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