我有一个基本的HTML表单,如下所示,它向servlet提交了一个post请求:
我使用网址提交:http://localhost:8080/sample/forms.html
但是当提交请求时,上下文根部分会被删除,并且网址被视为:
http://localhost:8080/getFormParam
使用的表格是:
<form method="post" action="/getFormParam">
<input type="text" name="user" />
<input type="text" name="id"/>
<input type="submit" value="Submit"/>
<input type="reset" value="clear"/>
</form>
web.xml映射是
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>getFormParam</servlet-name>
<servlet-class>dep.getFormParam</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getFormParam</servlet-name>
<url-pattern>/getFormParam</url-pattern>
</servlet-mapping>
</web-app>
这里有什么问题。
答案 0 :(得分:1)
问题在于
<form method="post" action="/getFormParam">
将其更改为(删除/)
<form method="post" action="getFormParam">
帖子网址将变为http://localhost:8080/sample/getFormParam
servlet现在将获得请求。
答案 1 :(得分:1)
问题只是动作参数
中的前面斜杠“/” <form method="post" action="/getFormParam">
当您在URL前面提到斜杠时,这意味着该资源位于tomcat服务器的上下文根(而不是应用程序的上下文根),在本例中为localhost:8080。如果将其更改为
<form method="post" action="getFormParam">
它会像你想要的那样开始工作。但是,如果你没有再次陷入这种情况,你最好知道URL重写概念。为了克服这种情况,JSTL库中有一个标记,其名称为url确保您传递的任何URL,它将始终解析为应用程序的上下文根(Url重写)。
可以找到更多详细信息here