我是 servlet 的初学者,对于“hello world 风格”的 servlet,我安装了 apache tomcat 并在其webapps
目录下创建了以下内容:
servletdir
|- index.xhtml
|- WEB-INF
|- web.xml
|- classes
|- mypackage
|- ServletClass.class
初始化所有内容,以便我可以在 localhost 上访问我的 servlet:
web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app>
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>mypackage.ServletClass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/servleturl/*</url-pattern>
</servlet-mapping>
</web-app>
并且 index.xhtml 包含一个具有action="/servleturl" method="get"
理论上,当我启动 tomcat 时,我现在应该能够访问 servlet 和 index.xhtml 文件localhost:8080/servletdir/index.xhtml
并在那里提交表单。到达索引没有问题,但是当我提交表单时,我收到 servlet 的 404 错误,说它“源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。” .
我的 servlet 类应该不是问题,它扩展HttpServlet
并覆盖doGet
以通过ServletResponse
参数的getWriter().println()
. servlet 类中的错误会导致 404 吗?我的目录结构或 web.xml 错误吗?
我尝试了多种目录结构和解决方案,包括:
- WEB-INF 中的平面目录结构和不在包中的类(没有“类”目录)
- 没有 WEB-INF,一切都在 servlet 目录中
- 将 WEB-INF 和 index.xhtml 包装在名为“WebContent”的目录中
- 保留“classes”目录但不使用包,将类文件直接放入类*
我已经关注了多种资源,包括一些教程和许多问题,这些与我的问题没有直接关系,但包含一些信息,但由于我是这项技术的新手,我无法推断出哪个资源好,哪个不好t,这不是我尝试几乎所有发现的原因。
顶部描述的目录结构是直接在磁盘上的结构,而不是在war文件中,但由于我可以访问某些部分,我想这不是问题。
*:请注意,每次代表包的目录结构发生变化时,我都会在文件的顶行使用相应的“包”重新编译 java 文件,这不是问题