gpt4 book ai didi

java - 连接到 .java 类的 .JSP 和 servlet

转载 作者:行者123 更新时间:2023-12-02 05:45:22 30 4
gpt4 key购买 nike

我在尝试运行我的程序时遇到问题。它应该从 JSP 页面获取信息到 servlet,以便可以通过 java 类中的方法传递信息进行验证。然后,一旦验证成功,servlet 就会确定是将消息发送到前一个 JSP 页面还是发送到成功的 JSP 页面。当我运行该程序时,它会将我带到 RegisterUser.jsp 页面。我输入信息,然后点击提交。它让我进入 404 未找到页面。该链接说它试图将我指向 CreateUser.java servlet。它不应该这样做。任何帮助将不胜感激,无论它只是我可以找到信息的链接还是一些实际的解决方案帮助。谢谢。

  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 类

公共(public)类用户{

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;
}

最佳答案

使用

 action="createUser" OR action="./createUser" 
<小时/>

action="/createUser"将调用默认上下文的 URL

http://localhost:8084/createUser 

while action="./createUser"将调用当前目录/上下文中 servlet 的 URL 模式

 http://localhost:8084/ContextName/createUser

关于java - 连接到 .java 类的 .JSP 和 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24127066/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com