执行servlet程序时出错

时间:2014-09-30 17:13:43

标签: java servlets netbeans glassfish netbeans-8.1

在练习servlet程序时我遇到了这个问题。现在我在我创建的任何项目中面临同样的问题。不知道我做错了什么。我正在使用netbeans 8.1和玻璃鱼服务器。错误是: -

HTTP Status 500 - Internal Server Error
type Exception report
messageInternal Server Error
descriptionThe server encountered an internal error that prevented it from      
fulfilling this request.
exception javax.servlet.ServletException: Error instantiating servlet class calc
root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Error creating managed object for class: class calc

root cause

java.lang.NoSuchMethodException: calc.<init>()

note The full stack traces of the exception and its root causes are available in the   
GlassFish Server Open Source Edition 4.1 logs.
GlassFish Server Open Source Edition 4.1 

html代码: -

<html>
    <head>
       <title>TODO supply a title</title>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
       <form method="get" action="http://localhost:8080/calculator/calc">
           <label for="no1">Enter the number one</label>
           <input type="text" id="no1" name="no1"/><br><br>
           <label for="no2">Enter the number two</label>
           <input type="text" id="no2" name="no2"/><br><br>
           <select name="opr">
               <option>addition</option>
               <option>subtraction</option>
               <option>multiplication</option>
               <option>Division</option>
           </select>
           <input type="submit" value="submit"/>
           <input type="reset" value="reset"/>

       </form>
    </body>
</html>

servlet代码: -

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
class calc extends HttpServlet
{
    public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException
    {
       PrintWriter pw=res.getWriter();
       float result=0;
       float a=Float.parseFloat(req.getParameter("no1"));
       float b=Float.parseFloat(req.getParameter("no2"));
       String opr=req.getParameter("opr");
       if(opr.equals("addition"))
       {
           result=a+b;
       }
       if(opr.equals("subtraction"))
       {
           result=a-b;
       }
       if(opr.equals("multiplication"))
       {
           result=a*b;
       }
       if(opr.equals("division"))
       {
           result=a/b;
       }
       pw.println("the answer is "+result);
    }
}

xml代码: -

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <servlet>
       <servlet-name>calc</servlet-name>
       <servlet-class>calc</servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>calc</servlet-name>
       <url-pattern>/calc</url-pattern>
    </servlet-mapping>
    <session-config>
       <session-timeout>
           30
       </session-timeout>
    </session-config>
    <welcome-file-list>
       <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

1 个答案:

答案 0 :(得分:1)

你的serlvet类必须扩展javax.servlet.http.HttpServlet类,

public class calc extends the javax.servlet.http.HttpServlet
{
    public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException
    {
    .....

对于你的第二个错误,我,我不知道为什么你得到这个错误可能是注入对象的另一个配置,但要解决这个问题,你必须创建一个没有参数的公共构造函数。

public class calc extends the javax.servlet.http.HttpServlet
    {
        public calc() {}
        public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException
        {
    .....