无法从 jsp 调用 servlet 文件 - 发现 404 错误 [重复]

Posted

技术标签:

【中文标题】无法从 jsp 调用 servlet 文件 - 发现 404 错误 [重复]【英文标题】:Unable to call servlet file from jsp - 404 error found [duplicate] 【发布时间】:2019-01-31 10:55:26 【问题描述】:

我的索引页面已更改为 Register_1.jsp 并在 xml 文件中进行了更新,页面运行良好,带有连接 servlet 文件的操作字段 Guru_register 我已在下图中的 eclipse 中添加了 jsp 代码以及 java 代码和结构帮助我提前谢谢...!!

Register_1.jsp

<body>
<h1>Guru Register Form</h1>
<form action="Guru_register.java" method="post">
            <table style="with: 50%">
                <tr>
                    <td>First Name</td>
                    <td><input type="text" name="first_name" /></td>
                </tr>
                <tr>
                    <td>Last Name</td>
                    <td><input type="text" name="last_name" /></td>
                </tr>
                <tr>
                    <td>UserName</td>
                    <td><input type="text" name="username" /></td>
                </tr>
                    <tr>
                    <td>Password</td>
                    <td><input type="password" name="password" /></td>
                </tr>
                <tr>
                    <td>Address</td>
                    <td><input type="text" name="address" /></td>
                </tr>
                <tr>
                    <td>Contact No</td>
                    <td><input type="text" name="contact" /></td>
                </tr></table>
            <input type="submit" value="Submit" /></form>
</body>

Register_2.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Success Page</title>
</head>
<body>
           <a><b>Welcome User!!!!</b></a>
</body>
</html>

我的 servlet 类

public class Guru_register extends HttpServlet 
    private static final long serialVersionUID = 1L;


     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        // TODO Auto-generated method stub
        String first_name = request.getParameter("first_name");
        String last_name = request.getParameter("last_name");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String address = request.getParameter("address");
        String contact = request.getParameter("contact");
        System.out.println(first_name+" "+contact);
        if(first_name.isEmpty() || last_name.isEmpty() || username.isEmpty() || 
                password.isEmpty() || address.isEmpty() || contact.isEmpty())
        
            RequestDispatcher req = request.getRequestDispatcher("Register_1.jsp");
            req.include(request, response);
        
        else
        
            RequestDispatcher req = request.getRequestDispatcher("Register_2.jsp");
            req.forward(request, response);
        
    


我尝试过以两种方式提交带有值的表单并且没有任何一种方式得到相同的错误。

【问题讨论】:

【参考方案1】:

你需要在action中给Servlet Name不需要指定任何东西;

<body>
<h1>Guru Register Form</h1>
<form action="Guru_register" method="post">

//带注解的Servlet

@WebServlet("/Guru_register")
public class Guru_register extends HttpServlet 
    private static final long serialVersionUID = 1L;

【讨论】:

嗨,Prabath,我确实添加了注释,就像你在课程开始前所说的那样,同样的结果我将删除缓存并再次尝试重新运行。感谢您抽出宝贵时间 Prabath @WebServlet("/Guru_register") public class Guru_register extends HttpServlet private static final long serialVersionUID = 1L; 兄弟加注解后还是一样的错误 它现在工作正常,兄弟我在操作字段中更改为 Guru_register 正如你提到的它现在工作正常 为什么在操作字段中使用 .java 扩展名不起作用兄弟...? HTML 引擎无法识别 java,这就是我们需要 JSP 的原因。通过映射,我们给 Servlet 一个名称、一个 URL,并强制 HTML 通过这个特定的 URL 来识别一个 Servlet。如果您要求 HTML 标记识别 abc.java,它会在 Mapping 中查找,但不会识别它。【参考方案2】:

尝试将 servlet 信息添加到 web.xml 首先将您的 servlet 移动到一个包中,我们将其称为“控制器”,因此文件的新位置将是 src > controllers > Guru_register.java

<servlet>
    <servlet-name>Guru_register</servlet-name>
    <servlet-path>controllers.Guru_register</servlet-path>
</servlet>
<servlet-mapping>
    <servlet-name>Guru_register</servlet-name>
    <url-pattern>/guru-register</url-pattern>
</servlet-mapping>

接下来,修改jsp表单如下:

<form action="guru-register" method="post">

【讨论】:

嗨,Arvind 兄弟,是的,这是另一种正确的方式,我的意思是不使用注释,我认为这也可以工作。谢谢你让我学习新的

以上是关于无法从 jsp 调用 servlet 文件 - 发现 404 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Servlet无法输出HashMap键到jsp:FileNotFoundException,util类在部署后无法找到本地文件

尝试从 JSP 表单调用 servlet 时出现 404 错误

JSP运行原理啥

如何从 jsp 中的超链接调用 doPost() servlet

《Head First Servlets & JSP》-5-属性和监听

JSP总结