Apache tomcat和servlet(初学者)-404错误,也许找不到类?

时间:2018-11-28 14:02:08

标签: java tomcat servlets http-status-code-404

我是servlet的初学者,对于“ hello world style” 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时,我现在应该能够通过localhost:8080/servletdir/index.xhtml访问servlet和index.xhtml文件,并在那里提交表单。到达索引是没有问题的,但是当我提交表单时,对于servlet,我收到404错误,说它“源服务器没有找到目标资源的当前表示,或者不愿意透露它的存在。”

我的servlet类应该不是问题,它扩展了HttpServlet并重写了doGet,以通过ServletResponse参数的getWriter().println()输出一个简单的html。 Servlet类中的错误会导致404吗?我的目录结构或web.xml错误吗?

我尝试了多种目录结构和解决方案,包括:

  • WEB-INF中的平面目录结构,并且类不在软件包中(没有“ classes”目录)
  • 没有WEB-INF,一切直接在servlet目录中
  • 将WEB-INF和index.xhtml包裹在名为“ WebContent”的目录中
  • 保留“ classes”目录,但不使用任何包,将类文件直接放入类中*

我遵循了多种资源,包括一些教程和许多问题,这些问题与我的问题没有直接关系,但是包含一些信息,但是由于我是这项技术的新手,所以我无法推断出哪种资源是好的,并且并非如此,这就是为什么我尝试了发现的几乎所有东西的原因。

最上面描述的目录结构直接位于磁盘上,而不是在war文件中,但是由于我可以访问某些部分,所以我认为这不是问题。

*:请注意,每当代表该包的目录结构发生更改时,我都会在文件的第一行用相应的“包”重新编译java文件,这不是问题

1 个答案:

答案 0 :(得分:2)

action="/servleturl" method="get"更改为action="/servletdir/servleturl" method="get"action="servleturl" method="get"

使用action="/servleturl",您尝试访问根相对路径,但缺少上下文路径servletdir

如果您使用action="servleturl",则无需将上下文路径放入action中,因为它将从当前URL中获取