j2EE servlet 路径问题

表单是用户提供数据的重要来源,服务请根据用户的输入返回相应的结果,这是动态构建web页面的关键。

读取表单数据就不介绍了,无非就是getParameter、getParameterValues、getParameterNames、getParameterMap等。

但是从前端页面的form到指定的servlet,action定义的路径和web.xml中定义的路径起到了关键作用。
在web.xml当中,<url-pattern>/...</url-pattern>指定了servlet的访问地址。这里注意是要加“/”的。这里的/代表了【http://address:port/工程名/】这个地址。
假设:<url-pattern>/test</url-pattern>
    
工程名为:servletTest
那么通过【http://address:post/servletTest/test】就可以访问到这个servlet。

在form表单中action如果也用/开头,情况就不同了!
先看这样一个实例:
<form action="/test"> 【同前面的假设】
原始目的是和web.xml中的<url-pattern>像对应,访问到相应的action,进行表单值的传递。但是,提交发生错误。
提交后地址栏显示:http://address:port/test
很明显这里少了工程名,当然访问不到对应的servlet了。
只要在action当中加入工程名就好了!如:
<form action="/servletTest/test">

还有另外一种情况:包含form的html或jsp文件在WebRoot的某个文件夹下,例如:WebRoot/html/test.html
这是访问这个html文件的路径是:
http://address:port/servletTest/html/test.html
在test.html中的form,action也可以去指定对应的servlet:
<form action="../test">
../相当于是去掉上级目录html,直接接到工程名servletTest后面,和web.xml解析出来的地址是一样的。

同理,若WebRoot/html/html2/test.html
则这个action这么写:
<form action="../../test">

================================================================
结论:
action
和web.xml中的<url-pattern>共同完成了form到指定servlet数据的传递路径。
只是"/"代表的意思不同而已!

你可能感兴趣的:(j2EE servlet 路径问题)