【问题标题】:Head first servlets & JSP example doesn't workHead first servlet 和 JSP 示例不起作用
【发布时间】:2017-01-07 13:57:59
【问题描述】:

我正在阅读“Head first servlets & JSP”一书并使用tomcat 9jdk8eclipse neonservlet 不起作用。我收到错误消息:“HTTP Status 500 - Error instantiating servlet class com.example.web.BeerSelect

图片是我的工作区。

my workspace

这是我的HTML 代码。(form.html)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>beer</title>
</head>
<body>
<h1 align = "center">Beer Selection Page</h1>
<form method="POST" action="SelectBeer.do">
	Select beer characteristics<p>
	Color:
	<select name="color" size = "1">
		<option value="light">light</option>
		<option value="amber">amber</option>
		<option value="brown">brown</option>
		<option value="dark">dark</option>
	</select>
	<br><br>
	<center>
		<input type="SUBMIT">
	</center>
</form>
</body>
</html>

这是我的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

  <servlet>
  	<servlet-name>Ch3 Beer</servlet-name>
  	<servlet-class>com.example.web.BeerSelect</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>Ch3 Beer</servlet-name>
  	<url-pattern>/SelectBeer.do</url-pattern>
  </servlet-mapping>

</web-app>

这是我的servlet(BeerSelect.java)

package com.example.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@SuppressWarnings("serial")
public class BeerSelect extends HttpServlet{

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException
	{
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		
		out.println("Beer Selection Advice<br>");
		String c = request.getParameter("color");
		out.println("<br>Got beer color " + c);
	}
}

.class没有生成,这是怎么回事。

【问题讨论】:

  • BeerSelect.class 文件的放置位置是什么
  • 它不是生成的。我认为它会自动生成。那么我如何在eclipse中生成它。
  • 您是否有更多的堆栈跟踪,最好来自服务器日志?您所显示的内容并不表示缺少类文件。顺便说一下,尝试一个没有空格的 servlet 名称。
  • 类文件确实丢失了。解决方法是设置类路径。我忘记了。

标签: java eclipse servlets


【解决方案1】:

嗯,我在您的工作区中看不到 .class 文件。这只是一个建议,但您可以尝试使用编译servlet java 文件

 javac BeerSelect.java

这应该会创建一个BeerSelect.class 文件。然后创建一个classes 文件夹并将其放入其中。像这样:

WebContent/WEB-INF/classes/com/example/web/BeerSelect.class

看看这是否有帮助。

【讨论】:

  • 谢谢,成功了!但是我怎样才能在 eclipse 中生成它
  • 尝试在 Eclipse 中使用 Project -> Build All (Ctrl + B)。我认为应该编译 .java 文件
  • 这个按钮是灰色的。所以我上网搜索。我发现javac不起作用。谢谢你的帮助。
【解决方案2】:

您不会在eclipse 中看到.class 文件。在创建项目时,您可能不会更改您的类文件夹,默认为build/classes。除非您想将它们保存在您想要的位置,否则不必更改您的class 文件夹路径。您可以在工作区中看到class 文件。 与您的代码相关的代码没有任何问题,它工作正常。我只做了一项更改,将 html 作为主页加载。我在您的web.xml 中添加了以下行。

<welcome-file-list>
    <welcome-file>form.html</welcome-file>
  </welcome-file-list>

而且它工作正常。

【讨论】:

  • @Saxon 试试这个,从服务器取消部署你的项目并清理项目。再次构建它并部署并重新启动服务器。请检查是否存在任何导入错误。
  • 哦,没关系。我忘了设置我的类路径,command "javac" 不起作用。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
相关资源
最近更新 更多