这个问题可能已被问了很多次,也可能已经回答了。我已经找了很长时间才得到答案,但还没找到。 让我们从头开始。
我在我的c:驱动程序中安装了jdk 8,在java文件夹的程序文件中 C:\ Program Files \ java \
我在C:\ Program Files \ Apache Software Foundation \ apache-tomcat-8.0.5 \
中解压缩了已安装的apache tomcat我已经设置了一个指向apache目录的CATALINA_HOME变量和一个指向jdk 8目录的java home变量,如上所述。 路径设置为C:\ Program Files \ Java \ jdk1.8.0 \ bin; 和classpath设置为C:\ Program Files \ Apache Software Foundation \ apache-tomcat-8.0.5 \ lib \ servlet-api.jar 我运行tomcat购买去命令promt和catalina_home / lib / statup.bat它运行成功,我可以看到服务器的主页当我输入网址localhost:8080 现在我在catalina_home中设置了文件夹,如下所示 C:\ Program Files \ Apache Software Foundation \ apache-tomcat-8.0.5 \ webapps \ ch03 \ WEB-INF \ classes \ com \ wrox \ projsp \ ch03 \ myfirstwebapp(这是在wrox出版物的书中提到的,我从中我试图在“myfirstwebapp”文件夹中创建一个MyFirstServlet.java文件,其中包含以下代码
package com.wrox.projsp.ch03.myfirstwebapp;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
public class MyFirstServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType("text/plain");
PrintWriter out=response.getWriter();
out.println("this is my first servlet");
}
}
之后我通过输入命令promt“javac MyFirstServlet.java”编译.java文件,该文件在同一文件夹中创建了MyFirstServlet.class文件。但是当我尝试通过键入
http://localhost:8080/ch03/servlet/com.wrox.projsp.ch03.MyFirstServlet
它出现错误,说“请求的资源不可用”。为什么会这样? 我想我已经完成了所有必要的步骤。这是什么原因?如果我错过了沟通,请提前道歉。我的写作技巧很差。请不要评价这篇文章,因为我已经付出了很多努力,只有在我没有其他选择之后才发布这个问题。谢谢提前
type Exception report
message Error instantiating servlet class com.wrox.projsp.ch03.MyFirstServlet
description The server encountered an internal error that prevented it from fulfilling this request.
Exception:
javax.servlet.ServletException: Error instantiating servlet class com.wrox.projsp.ch03.MyFirstServlet
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2451)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2440)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:744)
root cause
java.lang.ClassNotFoundException: com.wrox.projsp.ch03.MyFirstServlet
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1328)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1175)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2451)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2440)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:744)
答案 0 :(得分:0)
您没有输入写入URL,您的servlet可以在http://localhost:8080/ch03/MyFirstServlet
答案 1 :(得分:0)
您需要从url到servlet的映射。尝试将@WebServlet
注释添加到类中:
package com.wrox.projsp.ch03.myfirstwebapp;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
@WebServlet("/myfirstservlet")
public class MyFirstServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType("text/plain");
PrintWriter out=response.getWriter();
out.println("This is my first servlet.");
}
}
编译并将类文件放入:webapps/ch03/WEB-INF/classes/com/wrox/projsp/ch03/myfirstwebapp/MyFirstServlet.class
重启tomcat,并访问网址:http://127.0.0.1:8080/ch03/myfirstservlet
答案 2 :(得分:0)
的的servlet:强> 的
由Sun ONE Web Server servlet在运行时创建和管理 发动机。
对封装在请求对象中的输入数据进行操作。
使用封装在响应对象中的数据回复查询。
是可扩展的。
在交互之间提供用户会话信息持久性。
可以在服务器运行时动态重新加载。
可通过网址进行寻址。经常在应用程序页面上显示按钮 指向servlet 。
可以调用其他servlet和/或JSP 。
您应该使用以下方法:
`http://server:port/context_root/servlet/servlet_name?name=value`
有关servlet的说明:
服务器:端口强>> IP地址(或主机名)和可选端口号。
的上下文根强>>没有安装Web应用程序的前导“/”的上下文路径。
的的servlet 强>>仅在web.xml文件中未定义servlet映射时才需要。
的 servlet的名称强>>在web.xml文件中配置的servlet-name(或servlet-mapping,如果已定义)。
的名称=值强>&GT?;可选的servlet名称 - 值参数。
您需要使用ch03
(项目命名)作为url-pattern ..尝试使用以下URL: http://localhost:8080/ch03/MyFirstServlet
您需要在web.xml
文件中正确配置应用程序,如果您想稍后使用Java类并将其用作Servlet
,则必须在{web.xml
中对其进行定义。 1}}那样:
<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>com.wrox.projsp.ch03.MyFirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/MyFirstServlet</url-pattern>
</servlet-mapping>
url模式定义了稍后可以访问它的路径。要访问上述代码中的MyFirstServlet
,您需要使用此url: http://localhost:8080/MyFirstServlet
参考链接: