簡體   English   中英

在瀏覽器中獲取servlet的結果

[英]Getting the result of a servlet in a browser

這個問題可能已經問了好幾次了,也可能已經回答了。我已經花了相當長的時間尋找答案,但還沒有找到答案。 讓我們從頭開始。

我在Java文件夾C:\\ Program Files \\ java \\中的程序文​​件中的c:驅動器上安裝了jdk 8

我在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 buy命令promt和catalina_home / lib / statup.bat,它成功運行了並且當我輸入url 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)

您無需輸入寫URL,就可以在以下位置訪問您的servlet: http://localhost:8080/ch03/MyFirstServlet

您需要從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,並訪問URL: http://127.0.0.1:8080/ch03/myfirstservlet : http://127.0.0.1:8080/ch03/myfirstservlet : http://127.0.0.1:8080/ch03/myfirstservlet

在瀏覽器中獲取servlet的結果:

Servlet:

  1. 由Sun ONE Web服務器Servlet引擎在運行時創建和管理。

  2. 對封裝在請求對象中的輸入數據進行操作

  3. 使用封裝在響應對象中的數據來響應查詢

  4. 是可擴展的

  5. 提供交互之間的用戶會話信息持久性

  6. 可以在服務器運行時動態重新加載

  7. 可通過URL尋址。 應用程序頁面上的按鈕通常指向servlet

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

您應該使用以下方法:

`http://server:port/context_root/servlet/servlet_name?name=value`

關於servlet的說明:

server:port > IP地址(或主機名)和可選端口號。

context-root >上下文路徑,不包含安裝Web應用程序的前導“ /”。

servlet >僅當web.xml文件中未定義servlet映射時才需要。

servlet名稱 >在web.xml文件中配置的servlet名稱(或servlet映射,如果已定義)。

?name = value >可選的servlet名稱-值參數。

您需要將ch03 (項目的命名)用作url-pattern。。嘗試使用以下URL: http://localhost:8080/ch03/MyFirstServlet訪問文件URL: http://localhost:8080/ch03/MyFirstServlet

您需要在web.xml文件中正確配置您的應用程序,如果您以后要使用Java類並將其用作Servlet ,則必須在web.xml如下定義:

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

網址格式定義了以后可以訪問的路徑。 要在上述代碼中訪問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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM