在浏览器中获取servlet的结果

时间:2014-03-30 20:08:49

标签: java jsp servlets

这个问题可能已被问了很多次,也可能已经回答了。我已经找了很长时间才得到答案,但还没找到。 让我们从头开始。

我在我的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)

3 个答案:

答案 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的结果:

的servlet:

  1. 由Sun ONE Web Server servlet在运行时创建和管理 发动机。

  2. 对封装在请求对象中的输入数据进行操作

  3. 使用封装在响应对象中的数据回复查询

  4. 是可扩展的

  5. 在交互之间提供用户会话信息持久性

  6. 可以在服务器运行时动态重新加载

  7. 可通过网址进行寻址。经常在应用程序页面上显示按钮  指向servlet

  8. 可以调用其他servlet和/或JSP

  9. 您应该使用以下方法:

    `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

    参考链接:

    1. http://docs.oracle.com/cd/E19857-01/817-1833-10/pwasrvlt.html#wp34399

    2. http://docs.oracle.com/cd/E19857-01/817-1833-10/pwasrvlt.html#wp34478