0

我是 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 文件,这不是问题

4

1 回答 1

2

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

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

如果使用action="servleturl",则不需要将上下文路径放在 中,action因为它将从当前 url 获取

于 2018-11-28T14:17:21.160 回答