我无法运行我的程序。它应该从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