我是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错误吗?
我尝试了多种目录结构和解决方案,包括:
我遵循了多种资源,包括一些教程和许多问题,这些问题与我的问题没有直接关系,但是包含一些信息,但是由于我是这项技术的新手,所以我无法推断出哪种资源是好的,并且并非如此,这就是为什么我尝试了发现的几乎所有东西的原因。
最上面描述的目录结构直接位于磁盘上,而不是在war文件中,但是由于我可以访问某些部分,所以我认为这不是问题。
*:请注意,每当代表该包的目录结构发生更改时,我都会在文件的第一行用相应的“包”重新编译java文件,这不是问题
答案 0 :(得分:2)
将action="/servleturl" method="get"
更改为action="/servletdir/servleturl" method="get"
或action="servleturl" method="get"
。
使用action="/servleturl"
,您尝试访问根相对路径,但缺少上下文路径servletdir
。
如果您使用action="servleturl"
,则无需将上下文路径放入action
中,因为它将从当前URL中获取