java.lang.ClassCastException:无法强制转换为javax.servlet.Servlet

时间:2017-02-17 14:10:55

标签: java servlets

我已尝试在Tomcat 7.0v服务器上运行此程序,但遇到异常 java.lang.ClassCastException:bean.Customer无法强制转换为javax.servlet.Servlet throw。

Bean类

 public class Customer {

@Id
private Integer id;
@Column
private String name;
@Column
private String address;
@Column
private String city;
@Column
private String postalcode;
@Column
private String country;

public Customer() {}

public Customer(Integer id, String name, String address, String city, String postalcode, String country) {
    this.id = id;
    this.name = name;
    this.address = address;
    this.city = city;
    this.postalcode = postalcode;
    this.country = country;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
}

public String getPostalcode() {
    return postalcode;
}

public void setPostalcode(String postalcode) {
    this.postalcode = postalcode;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}   

}

Servlet代码

public void init(ServletConfig config) throws ServletException {
    factory = new Configuration().configure("resources/mysql.cfg.xml").buildSessionFactory();}

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    PrintWriter out = response.getWriter();

    int first = Integer.parseInt(request.getParameter("fr"));
    int second = Integer.parseInt(request.getParameter("mr"));

    Session session = factory.openSession();
    Criteria criteria = session.createCriteria(Customer.class);
    List customers = criteria.list();
    Iterator it = customers.iterator();

    while (it.hasNext()) {
        Customer customer = (Customer)it.next();
        out.println(customer.getId());
        out.println(customer.getName());
        out.println(customer.getAddress());
        out.println(customer.getCountry());
        out.println(customer.getPostalcode());
        out.println("===============================");
    }

    session.close();

}

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
    <servlet>
<servlet-name>Customer</servlet-name>
<servlet-class>bean.Customer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Customer</servlet-name>
<url-pattern>/data</url-pattern>
</servlet-mapping>
</web-app>      

错误

java.lang.ClassCastException: bean.Customer cannot be cast to javax.servlet.Servlet
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5210)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5493)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3988)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:425)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
at java.lang.Thread.run(Thread.java:745)

2 个答案:

答案 0 :(得分:1)

您告诉您的Web容器bean.Customer是一个带有指令

的Servlet
<servlet>
  <servlet-name>Customer</servlet-name>
  <servlet-class>bean.Customer</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

但是这个类没有实现javax.servlet.Servlet。您应该在web.xml中配置正确的servlet类。

答案 1 :(得分:0)

确保您的Customer类使用HttpServlet实现 例如 公共类客户扩展HttpServlet