<form action ="/ sampleServlet"给我例外

use*_*917 11 java forms jsp servlets

在我的jsp中,如果我打电话<form action="/sampleServlet" method="get" name="form1">,我得到以下异常:

http 404错误 - 找不到sampleServlet.我在web.xml文件中设置sampleServlet,url-pattern也设置为/ sampleServlet.

为什么我得到404(找不到servlet.)?

Ale*_*oie 33

当您在HTML中使用URL时,没有前导/它们相对于当前URL(即显示的当前页面).领先/他们是相对于网站根:

<form action="/context-path/sampleServlet">
Run Code Online (Sandbox Code Playgroud)

要么

<form action="sampleServlet">
Run Code Online (Sandbox Code Playgroud)

会做你想做的.

我建议你动态地在动作路径中添加上下文.示例(在JSP中):

<form action="${pageContext.request.contextPath}/sampleServlet">
Run Code Online (Sandbox Code Playgroud)

有了这个,您将永远不必更改路径,例如,如果您移动文件或复制代码,或重命名您的上下文!


Rav*_*iya 5

可能会帮助你

servlet配置

<servlet>
    <servlet-name>sampleServlet</servlet-name>
    <servlet-class>test.sampleServlet</servlet-class>
  </servlet>
<servlet-mapping>
    <servlet-name>sampleServlet</servlet-name>
    <url-pattern>/sampleServlet/</url-pattern>
  </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

Servlet代码:

package test;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class sampleServlet extends HttpServlet{

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException{
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>Hello Servlet Get</h1>");
        out.println("</body>");
        out.println("</html>"); 
    }
}
Run Code Online (Sandbox Code Playgroud)

JSP代码:

<html>
  <body>
     <form action="/sampleServlet/" method="GET">
      <input type="submit" value="Submit form "/>
     </form>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

你可以点击提交按钮,然后你可以看到servlet输出