Http状态404 - /请求的资源不可用

Son*_*man -1 java tomcat

我是java的新手,我只是尝试从Deployment Descriptor文件(web.xml)中读取初始化参数,但是出现了上述错误?

web.xml和java文件编码编码附加快照.

我的直接结构是

c:\....tomcat\webapps\dd\web-inf\classes
Run Code Online (Sandbox Code Playgroud)

java类文件中没有错误.

在此输入图像描述

成功编译的Java文件代码

import java.io.*; 
import java.net.*; 
import javax.servlet.*;
import javax.servlet.http.*;

public class MyServlet2 extends HttpServlet { 

    String fileName; 
    public void init(ServletConfig config) throws ServletException {
        super.init(config); 
        fileName = config.getInitParameter("logfilename"); 
    } 

    protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException { 
         processRequest(request, response); 
    } 

    protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException { 
         processRequest(request, response); 
    } 

    protected void processRequest(HttpServletRequest request,HttpServletResponse 
response)throws ServletException, IOException { 
          PrintWriter out = response.getWriter(); 
          out.println(fileName); 
          out.close(); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

web.xml中

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app> 
    <servlet> 
    <servlet-name>MyServlet2</servlet-name> 
    <servlet-class>MyServlet2</servlet-class>
        <init-param>
            <param-name>logfilename</param-name>
            <param-value>value1</param-value> 
        </init-param>
    </servlet> 
    <servlet-mapping> 
        <servlet-name>MyServlet2</servlet-name> 
        <url-pattern>/mc11</url-pattern> 
    </servlet-mapping> 
</web-app> 
Run Code Online (Sandbox Code Playgroud)

我的目录和错误页面的其他细节我认为我的web.xml无法正常工作 在此输入图像描述

Jon*_*eet 5

我目前可以看到两个问题......

Servlet init参数

你目前有:

//定义param1 param1 value1

这不是你定义参数的方式.您应该指定param-name包含参数名称的元素,而不是将参数的名称用作XML元素名称.

<init-param>
   <param-name>logfilename</param-name>
   <param-value>...</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)

另请注意,这//不是您在XML中编写注释的方式 - 如果您想要注释,您应该:

<!-- Define the first parameter -->
<init-param>
   <param-name>logfilename</param-name>
   <param-value>...</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)

(该param-value元素应该是一个提示 - 如果你真的可以只指定自己的元素,我已经预料到<logfilename>value in here</logfilename>- 将名称指定为元素名称,但使用固定元素名称指定的值param-value将是一个奇怪的方案.)

Servlet映射

目前您的映射是:

<servlet-name> FormServlet</servlet-name>
    <url-pattern>/ss/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

我怀疑映射不匹配,http://localhost:8080/dd/ss/s.html因为你没有任何通配符 - 你可能会发现它完全 匹配http://localhost:8080/dd/ss/.目前尚不清楚该dd部件的位置,但我认为这是您配置的一个独立部分.你应该试试:

<!-- I would recommend removing the space from the servlet
   - name *everywhere*. -->
<servlet-name>FormServlet</servlet-name>
    <url-pattern>/ss/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

如果这不起作用http://localhost:8080/dd/ss/s.html,请查看它是否映射http://localhost:8080/ss/s.html- 可能是您的引擎未按照您在其他地方的预期配置.