2017-04-22 38 views
1

嗨,我正在寫一個程序在Java驗證用戶,如果登錄用戶是管理員,他可以添加另一個用戶從註冊表單到數據庫。但是當我要註冊某人並按下注冊按鈕時,它會向我顯示此錯誤。 任何人都可以幫我解決這個問題嗎? 這裏是我的代碼:爲什麼沒有這個代碼wrking?HTTP狀態404 - 沒有在jsp和servlet上找到

index.jsp: 

​​3210

的welcome.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
 
    pageEncoding="ISO-8859-1"%> 
 
<html> 
 
<head> 
 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
 
<title>Welcome <%=session.getAttribute("name")%></title> 
 
</head> 
 
<body> 
 
    <h3>Register form</h3> 
 
     <form method="post" action="Register.jsp"> 
 
     Name:<input type="text" name="name" /><br/> 
 
     Password:<input type="text" name="pass" /><br/> 
 
     Email:<input type="text" name="email" /><br/> 
 
     <input type="submit" value="register" /> 
 
     </form> 
 
</body> 
 
</html>

NewFile.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
 
    pageEncoding="ISO-8859-1"%> 
 
<html> 
 
<head> 
 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
 
<title>Welcome <%=session.getAttribute("name")%></title> 
 
</head> 
 
<body> 
 
    <h3>Login successful!!! user</h3> 
 
    <h4> 
 
     Hello, 
 
     <%=session.getAttribute("name")%></h4> 
 
</body> 
 
</html>

LoginCheck.java:

package com.example.saeid; 


import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

public class LoginCheck { 
static Boolean isadmin = false; 
public static boolean validate(String name, int pass) { 
     boolean isValid = false; 
     Connection conn = null; 
     ResultSet rs = null; 
     String db_userName = "root"; 
     String db_Password = "uyhgbv098"; 
     String db_Name = "my_demo_database"; 
     String driver = "com.mysql.jdbc.Driver"; 
     String url = "jdbc:mysql://localhost:3306/"; 
     PreparedStatement ps = null; 
     try { 
      Class.forName(driver); 
      conn = DriverManager.getConnection(url+db_Name,db_userName,db_Password); 
      ps =conn.prepareStatement 
        ("select * from user_account where username=? and password=?"); 
       ps.setString(1, name); 
       ps.setInt(2, pass); 
       rs = ps.executeQuery(); 
       if(rs.next()) { 
        isValid = true; 
        isadmin = rs.getBoolean("isadmin"); 
       } 


     }catch (Exception e) { 
      System.out.println(e); 
     } finally { 
      if (conn != null) { 
       try { 
        conn.close(); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
       } 
      } 
      if (ps != null) { 
       try { 
        ps.close(); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
       } 
      } 
      if (rs != null) { 
       try { 
        rs.close(); 
       } catch (SQLException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return isValid; 
    } 

public static Boolean admin(){ 
    return isadmin; 
} 
} 

loginservelet.java:

package com.example.saeid; 

import java.io.IOException; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
import java.io.PrintWriter; 

import com.example.saeid.LoginCheck; 




public class LoginServlet extends HttpServlet{ 

private static final long serialVersionUID = 1L; 

public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    String n=request.getParameter("username"); 
    String p=request.getParameter("userpass"); 
    int p2 = Integer.parseInt(p); 

    HttpSession session = request.getSession(false); 
    if(session!=null) 
    session.setAttribute("name", n); 

    if(LoginCheck.validate(n, p2)){ 
     if(LoginCheck.admin()){ 
      RequestDispatcher rd=request.getRequestDispatcher("welcome.jsp"); 
      rd.forward(request,response); 
     } 
     else{ 
      RequestDispatcher rd=request.getRequestDispatcher("NewFile.jsp"); 

      rd.forward(request,response); 

     } 

    } 
    else{ 
     out.print("<p style=\"color:red\">Sorry username or password error</p>"); 
     RequestDispatcher rd=request.getRequestDispatcher("index.jsp"); 
     rd.include(request,response); 
    } 

    out.close(); 
} 
} 

register.java:

package com.example.saeid; 

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 

public class Register extends HttpServlet { 
private static final long serialVersionUID = 1L; 

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 

    String name = request.getParameter("name"); 
    String pass1 = request.getParameter("pass"); 
    int pass = Integer.parseInt(pass1); 
    String email = request.getParameter("email"); 
    try{ 

    //loading drivers for mysql 
    Class.forName("com.mysql.jdbc.Driver"); 

//creating connection with the database 
    String db_userName = "root"; 
    String db_Password = "uyhgbv098"; 
    String url = "jdbc:mysql://localhost:3306/"; 
    String db_Name = "my_demo_database"; 
     Connection con=DriverManager.getConnection 
       (url+db_Name,db_userName,db_Password); 

    PreparedStatement ps=con.prepareStatement 
       ("insert into user_acount values(?,?,?)"); 

    ps.setString(1, name); 
    ps.setInt(2, pass); 
    ps.setString(3, email); 

    int i=ps.executeUpdate(); 

     if(i>0) 
     { 
     out.println("You are sucessfully registered"); 
     } 

    } 
    catch(Exception se) 
    { 
     se.printStackTrace(); 
    } 

    } 
} 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
 
    <display-name>FirstHomework</display-name> 
 
    <welcome-file-list> 
 
    <welcome-file>index.jsp</welcome-file> 
 
    </welcome-file-list> 
 
    <servlet> 
 
    <servlet-name>login</servlet-name> 
 
    <servlet-class>com.example.saeid.LoginServlet</servlet-class> 
 
    </servlet> 
 
    <servlet-mapping> 
 
    <servlet-name>login</servlet-name> 
 
    <url-pattern>/loginServlet</url-pattern> 
 
    </servlet-mapping> 
 
    
 
     <servlet> 
 
     <servlet-name>register</servlet-name> 
 
     <servlet-class>com.example.saeid.Register</servlet-class> 
 
    </servlet> 
 
    <servlet-mapping> 
 
     <servlet-name>register</servlet-name> 
 
     <url-pattern>/Register</url-pattern> 
 
    </servlet-mapping> 
 
</web-app>

+1

請縮小完成您的問題 –

回答

1

您沒有在web.xml中給出Register Servlet的全名: -

</servlet-mapping> 
    <servlet> 
    <servlet-name>register</servlet-name> 
    <servlet-class>Register</servlet-class> // give the full path 
</servlet> 

和另一件事是,你是將密碼存儲爲register.java中的字符串,但是當您在Loginservelet中運行查詢時,您將密碼設置爲Int。請在兩個班級中都以密碼作爲字符串。

+0

我改變了代碼,但再次得到了同樣的錯誤 –

+0

感謝您的help.problem解決 –

0

正如Mayank Sharma表示

首先,在web.xml文件中,你必須指定註冊的servlet在你爲LoginServlet類的servlet類標籤相同的方式完整路徑。 其次,您的註冊servlet url-pattern標記的值應該與welcome.jsp頁面中form標記的action屬性的值相同(不包括/)。 最後,注意Mayank Sharma的第二次觀察。

我必須建議您必須開始學習如何使用框架開發Java Web應用程序。它會幫助你很多。

+0

我改變了代碼,但再次得到了同樣的錯誤 –

+0

感謝您的help.problem解決的只是有將Register.jsp更改爲註冊,而無需jsp擴展在action屬性中 –