从tomcat调用servlet会抛出HTTP状态500 java.lang.NullPointerException
我是J2EE新手,使用tomcat和eclipse构建了一个示例项目。虽然index.html加载正确,但当我提交页面(或调用servlet)时,我收到以下异常从tomcat调用servlet会抛出HTTP状态500 java.lang.NullPointerException,java,eclipse,jakarta-ee,servlets,tomcat7,Java,Eclipse,Jakarta Ee,Servlets,Tomcat7,我是J2EE新手,使用tomcat和eclipse构建了一个示例项目。虽然index.html加载正确,但当我提交页面(或调用servlet)时,我收到以下异常 HTTP Status 500 - type Exception report message description The server encountered an internal error that prevented it from fulfilling this request. exception java.la
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
java.util.concurrent.ConcurrentHashMap.putVal(Unknown Source)
java.util.concurrent.ConcurrentHashMap.putIfAbsent(Unknown Source)
java.lang.ClassLoader.getClassLoadingLock(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1641)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Unknown Source)
以下是我创建的文件
1) index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="SelectCoffee.do">
select coffee
<select name="taste" size="1">
<option value="dark">dark</option>
<option value="latte">latte</option>
<option value="cold">cold</option>
<option value="chocolate">chocolate</option>
</select>
<input type="submit">
</form>
</body>
在此处插入标题
精选咖啡
黑暗的
拿铁
寒冷的
巧克力
2) web.xml
喝咖啡
com.example.web.CoffeeSelect
喝咖啡
/选择咖啡
3) CoffeeSelect.java
package com.example.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class CoffeeSelect extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Cofee Advice");
String c= "mine : " + request.getParameter("taste");
out.println("<br>Got taste = "+c);
}}
package com.example.web;
导入javax.servlet.*;
导入javax.servlet.http.*;
导入java.io.*;
公共类CoffeeSelect扩展了HttpServlet{
public void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出IOException、ServletException{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“咖啡建议”);
String c=“mine:”+request.getParameter(“taste”);
out.println(“
Got taste=“+c”);
}}
如果还需要什么,请告诉我。请帮助我,因为这可能会给我找到一份工作:(是否将
类咖啡选择
内置到类文件夹中?在错误提示中,可能是找不到类。检查请求。getParameterValues(“taste”);
如果可能的话,从
servlet名称中删除空格,这将非常有效
index.html
在此处插入标题
精选咖啡
黑暗的
拿铁
寒冷的
巧克力
web.xml
咖啡精选
咖啡精选
咖啡精选
/精选咖啡
CoffeeSelect.java
package com.example.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class CoffeeSelect extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Cofee Advice");
String c= "mine : " + request.getParameter("taste");
out.println("<br>Got taste = "+c);
}}
protectedvoidprocessrequest(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
试一试{
out.println(“咖啡建议”);
String c=“mine:”+request.getParameter(“taste”);
out.println(“
Got taste=“+c”);
}最后{
out.close();
}
}
在您的webb.xml中,servlet类定义中有一个输入错误,它应该是
而不是
,可能servlet从未注册过,这就是为什么您会得到一个NullpointerExcepion
检查部署描述符(web.xml)注册servlet类时出错
因此,您将获得空指针异常。
用这个替换你的web.xml,现在它肯定能工作了
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<servlet>
<servlet-name>For Coffee</servlet-name>
<servlet-class>com.example.web.CoffeeSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>For Coffee</servlet-name>
<url-pattern>/SelectCoffee.do</url-pattern>
</servlet-mapping>
</web-app>
喝咖啡
com.example.web.CoffeeSelect
喝咖啡
/选择咖啡
这没有什么区别,您可以在url模式中使用自定义名称
<servlet>
<servlet-name>CoffeeSelect</servlet-name>
<servlet-class>CoffeeSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CoffeeSelect</servlet-name>
<url-pattern>/SelectCoffee</url-pattern>
</servlet-mapping>
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("Cofee Advice");
String c= "mine : " + request.getParameter("taste");
out.println("<br>Got taste = "+c);
} finally {
out.close();
}
}
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<servlet>
<servlet-name>For Coffee</servlet-name>
<servlet-class>com.example.web.CoffeeSelect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>For Coffee</servlet-name>
<url-pattern>/SelectCoffee.do</url-pattern>
</servlet-mapping>
</web-app>