2011-12-18 14 views
0

私はサーブレットを勉強しています。私が作成したクラスを通して時間を得るための小さなプログラムを作成しようとしています。しかし、私は蜂を例外にしています。なぜこの例外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; 
    } 

} 

チェックユーザー

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:互換性のないソースコード - 誤っCTORのSYMタイプ: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を参照)。 –

+0

Eclipseや別のIDEを使用してコンパイルの問題を検出する –

答えて

1

あなたのパッケージあなたがimport business.User; を使用しているpackage Business;しかしHoursクラスがパッケージを覚えているでは大文字と小文字が区別され、標準どおり、これはスタックオーバーフローの質問にはあまりにも多くのコードで小文字

3

あなたが展開され、その中にコンパイルエラーでコードを実行しようとしてきたので、あなたは、例外を取得しています。あなたが実際にBusinessパッケージ、ないbusinessパッケージにUserクラスを宣言したので

import business.User; 

そして私はコンパイルエラーがこの行が原因であると思われます。

  • パッケージ名はすべて小文字でなければなりません:


    は、私はあなたがJavaの命名規則を無視することで足に自分自身を撮影してきた感があります。

  • パッケージ名は、あなたのパッケージ/クラス名が誰かと衝突する危険性を最小限に抑えるために、あなたの "ビジネス"を一意に識別する文字列を先頭に付けてください。

    package Business; 
    import business.User; 
    

    パッケージ名はすべて小文字でなければなりません(あるいは、少なくとも、各セグメントは、下で開始する必要があります:従来、これは、あなたのパッケージ名で、2つの異なるケースを使用しているリバースDNS名

+0

ありがとうございます。それは愚かな間違いでした。もう一つの疑念。コンパイルして、show.jspでuserIdを返すように頼むと、Nullと表示されます。なぜ誰が知っていますか? – Camus

+0

おそらく '' userId "'は '' userID ''と等しくないからです –

1

です大文字と小文字の区別はありません)。

businessパッケージを正規化して再コンパイルしてください。

1

ザ・のみ、私はそれが間違っているかもしれない見ることができると思いますがHours.javaにあなたがクラスbusiness.Userをインポートするが、CheckUser.javaにあなたはクラスBusiness.Userを使用することです。

Javaは大文字と小文字を区別します。これらは2つの異なるクラスであるため、コード内の型は一致しません。 process.CheckUserで

1

あなたはBusiness.Userを作成するが、あなたのBusiness.Hourにあなたはbusiness.Userが必要です。ビジネスとビジネスでは別のケースがあることに注意してください。