2011-12-18 53 views
0

我正在學習servlets,我試圖創建一個小程序來獲得我創建的類的小時。但我有蜜蜂得到一個例外。下面是代碼:爲什麼這個例外Java?

用戶

package Business; 

public class User { 

    private String userId; 

    public User() { 
     userId = ""; 
    } 

    public User(String id) { 
     userId = id; 
    } 

    public void setUserId(String id) { 
     userId = id; 
    } 

    public String getUserId() { 
     return userId; 
    } 

} 

小時

package Business; 

import java.util.Calendar; 
import java.util.GregorianCalendar; 

import business.User; 

public class Hours { 

    private User user; 
    private Calendar cal = new GregorianCalendar(); 
    private int min = 0; 

    public Hours(User user) { 
     this.user = user; 
     min = cal.get(Calendar.MINUTE); 
    } 

    public String getMinutes() { 
     return Integer.toString(min); 
    } 

    public User getUser() { 
     return user; 
    } 

} 

CheckUser

package process; 

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

import Business.User; 
import Business.Hours; 

public class CheckUser extends HttpServlet { 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String userId = request.getParameter("userID"); 
     User user1 = new User(userId); 
     Hours h1 = new Hours(user1); 
     String url = "/show.jsp"; 

     request.setAttribute("hours", h1); 

     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url); 
     dispatcher.forward(request, response); 

    } 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String userId = request.getParameter("userID"); 
     User user1 = new User(userId); 
     Hours h1 = new Hours(user1); 
     String url = "/show.jsp"; 

     request.setAttribute("hours", h1); 

     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url); 
     dispatcher.forward(request, response); 
    } 


    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     String userId = request.getParameter("userID"); 
     User user1 = new User(userId); 
     Hours h1 = new Hours(user1); 
     String url = "/show.jsp"; 

     request.setAttribute("hours", h1); 

     RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url); 
     dispatcher.forward(request, response); 
    } 

} 

指數

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Project</title> 
    </head> 
    <body> 
     <h1>Employees</h1> 
     <form action="<%=response.encodeURL("CheckUser")%>" method="get"> 
      <input type="submit" value="Diogo"> 
      <input type="hidden" name="userId" value="1"> 
     </form> 
    </body> 
</html> 

顯示

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <%@ page import="Business.*, process.*" %> 

     <% 
      Hours h1 = (Hours) request.getAttribute("hours"); 
      String userId =h1.getUser().getUserId(); 
     %> 
     <h1><%= userId %></h1> 
    </body> 
</html> 

,從完成此請求防止 它異常

類型異常報告

消息

描述服務器遇到一個內部錯誤()。

例外

了java.lang.RuntimeException:不可編譯的源代碼 - 錯誤的構造函數符號類型:process.CheckUser.doGet(CheckUser.java:37) javax.servlet.http.HttpServlet.service(的HttpServlet .java:621) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)note注意根本原因的 完整堆棧跟蹤可在Apache Tomcat/7.0.23日誌中找到。

+1

這是迄今爲止一個堆棧溢出問題,太多的代碼。請將您的代碼減少到展示此問題所需的最低限度(請參閱http://sscce.org)。 – 2011-12-18 15:02:24

+0

使用Eclipse或其他IDE來檢測彙編問題 – 2011-12-18 15:09:29

回答

1

你的包是package Business;Hours類,你已經使用import business.User; 記得包是區分大小寫的,按標準應該在小寫

3

您正在收到異常,因爲您已經部署並嘗試執行帶有編譯錯誤的代碼。

而且我懷疑,編譯錯誤是由於該行:

import business.User; 

,因爲你實際上已經宣告在BusinessUser類,而不是business包。


我有你已經忽略了Java命名約定拍攝自己的腳的感覺:

  • 包名應該全部小寫。
  • 軟件包名稱應該帶有一個字符串前綴,該字符串唯一標識您的「業務」,以最大程度地減少您的軟件包/類名稱與別人碰撞的風險。按照慣例,這是
+0

謝謝大家。這是一個愚蠢的錯誤。還有一個疑問。當我編譯並要求在show.jsp上返回userId時,它顯示爲空。有人知道爲什麼嗎? – Camus 2011-12-18 21:06:21

+0

可能是因爲''userId「'不等於''userID」' – 2011-12-19 14:52:54

1

您正在使用兩種不同的情況下,反向DNS名稱爲您的包名:

package Business; 
import business.User; 

包名應該全部小寫(或至少每個段應以較低的開始情況)遵循普通的Java命名約定。

標準化您的business包並重新編譯。

1

唯一想我可以看到,可能是錯誤的是,在Hours.java您導入一個類business.UserCheckUser.java您使用類Business.User

Java區分大小寫。這是兩個不同的類,所以代碼中的類型不匹配。

1

在process.CheckUser創建Business.User,但在你的Business.Hour你需要business.User。注意商業和商業中的不同情況。