我無法運行我的程序。它應該從JSP頁面獲取信息到servlet,以便它可以通過Java類中的方法進行驗證。然後,一旦驗證該servlet確定是否將消息發送到前一個JSP頁面或成功JSP頁面。當我運行該程序時,它會將我帶到RegisterUser.jsp頁面。我輸入信息然後點擊提交。它讓我變成了一個404找不到的頁面。該鏈接表示它試圖將我指向CreateUser.java servlet。它不應該這樣做。任何幫助將不勝感激,無論它只是一個鏈接,我可以找到信息或一些實際的解決方案幫助。謝謝。.JSP和servlet連接到.java類
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); } }
}
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>
- 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;
}
試圖改變'行動= 「小服務程序/ CreateUser.java」''到行動=「小服務程序/ CreateUser「' – yate
我剛剛運行它的建議,仍然收到相同的錯誤頁面。我嘗試改變路徑和名稱,至少不要試圖將我引導到我的servlet,而這些servlet無法在瀏覽器中查看。 – KLG2014
將action =「servlets/CreateUser.java」更改爲action =「/ createUser」。 – fajarkoe