如何访问 servlet [重复]

Posted

技术标签:

【中文标题】如何访问 servlet [重复]【英文标题】:How to access servlet [duplicate] 【发布时间】:2019-12-31 23:38:13 【问题描述】:

我在 Eclipse 中创建了一个名为 testWarNotMaven 的动态 Web 项目。我使用以下代码在 web 内容文件夹中创建了一个 index.html 文件

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>File Upload</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h2>Add Questions</h2>
        <form method="POST" action="/upload" enctype="multipart/form-data" >
            File:
            <input type="file" name="file" id="file" /> <br/>
            <input type="submit" value="Upload" name="upload" id="upload" />
        </form>
    </body>
</html>

然后我创建了一个以以下开头的 servlet 类

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet 

当我通过将 EAR 项目部署到服务器来部署此项目时,加载了 index.html 页面。但是,当我单击上传按钮将我带到 servlet 类时,

HTTP 状态 404 错误。请求的资源不可用。

1) 我研究过这个问题,发现应该编译 servlet 类并放在 WEB-INF/classes 文件夹中。我在 Java Resources/src/ 中只有 .java 文件。我没有 classes 文件夹,也没有 .class 文件。为什么会这样,我需要它们吗?

2) 当我在服务器上运行项目时,我被定向到 http://localhost:8080/testWarNotMaven/,当我单击表单上传按钮时,我被定向到 http://localhost:8080/upload。我想我缺少对上下文如何工作的理解 - 根。我知道网址是http://localhost:8080//。为什么按下上传按钮时缺少上下文根?

3) 或者为什么无法访问 servlet?

编辑:

我添加了的截图

【问题讨论】:

您是如何将它部署到服务器的?是的,您可能确实需要将 servlet 上下文路径添加到您的 form action 值之前,无论是动态还是其他方式。 你定义了明确的 web.xml 吗? @nitind 我尝试将其部署为将项目导出为 WAR 文件并将其粘贴到 payara5\glassfish\domains\domain1\autodeploy。但是当我尝试访问localhost:8080/testWarNotMaven 时,出现了 HTTP 404 错误。因此,我尝试通过将 testWarNotMavenEAR 项目添加到服务器来在服务器上运行,然后我就能够访问localhost:8080/testWarNotMaven @Kris。我改用网络注释。 web.xml 已保留默认值。我找不到任何需要添加的内容。有什么要补充的吗? 【参考方案1】:

项目可能尚未在 Eclipse 中构建。请检查是否存在任何构建路径问题或缺少依赖项。这些类将位于项目下的 build 文件夹中。

【讨论】:

不存在构建路径问题或依赖项缺失且构建文件夹为空! 如果构建文件夹为空,那么很可能项目没有构建。通常这将在问题视图中列出(Windows -> 显示视图 -> 问题)。如果您可以包含项目结构的屏幕截图,那也可能会有所帮助 我添加了项目结构的截图,从截图中也可以看出没有问题。 我最初查看了问题,现在我注意到了一个错误日志,我查看并显示错误说从插件调用代码时发生了问题:“org.eclipse.jst.jee” Java.lang.NullPointerException。你知道这意味着什么吗? 我也将它从服务器中删除,然后再次部署【参考方案2】:

在您的索引文件中进行更改,例如:

<form method="POST" action="upload" enctype="multipart/form-data" >

从 action="upload" 中移除 /

正确的 URL 应该是这样的:

http://localhost:8080/testWarNotMaven/

http://localhost:8080/testWarNotMaven/upload

【讨论】:

我已经尝试过上传,然后看到尝试使用 /。无论哪种方式都不起作用!

以上是关于如何访问 servlet [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTTP 请求发送到 servlet [重复]

servlet的生命周期

servlet 请求的资源未缓存 [重复]

Servlet 生命周期工作原理

Servlet 生命周期工作原理

Servlet 生命周期工作原理