2011-12-18 40 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。注意商业和商业中的不同情况。

相关问题