2014-09-30 71 views
0

在执行servlet程序时我遇到了这个问题。现在我无论在哪个项目中都面临同样的问题。不知道我做错了什么。我正在使用netbeans 8.1和玻璃鱼服务器。错误是: -在执行servlet程序时发生错误

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> 
+0

什么是您尝试击中的URL? – Renjith 2014-09-30 17:18:15

+0

http:// localhost:8080/calculator/for index.html运行完美 – 2014-09-30 17:31:25

+0

http:// localhost:8080/calculator/calc?no1 = 1&no2 = 1&opr = addition参数根据action =“http :// localhost:8080/calculator/calc“ – 2014-09-30 17:32:29

回答

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 
     { 
    ..... 
+0

是的愚蠢的错误。我纠正了它,但现在它完全不同的错误。我更新了这篇文章 – 2014-09-30 18:36:48

+0

@augustushill您可以发布错误日志部分错误 – 2014-09-30 18:55:13

+0

的日志部分吗?我是这个网站的新手,这是一种错误发布约定? – 2014-10-01 04:08:07

相关问题