如何访问 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章