java - 404 错误(Servlet)

标签 java servlets glassfish

我想编写自己的 JavaEE 应用程序。我使用 Linux Mint 和 Glassfish 4 作为应用程序服务器。我的 Eclipse 是 Oxygen(EE 版本)。

我想测试我的客户是否能够登录。

我还没有包含 CSS,所以它可能看起来有点无聊。 :D

这些是我在 Eclipse 中的项目:

enter image description here

这是我的索引 HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
   <link rel="stylesheet" href="css/styles.css">
   <title>Onlineshop</title>
</head>
<body>
    <header>
        <hgroup>
        <h1 class="title">Onlineshop</h1>
        </hgroup>
        <nav>
          <a href="index.html">Home</a>
          <a href="register.html">Registrieren</a>
          <a href="signin.html">Einloggen</a>
          <a href="sell.html">Verkaufen</a>
          <a href="search.html">Suchen</a>
        </nav>
</header>

<footer>
        Copyright
</footer>
</body>

“Registrieren”的意思是“注册”,“Einloggen”的意思是“登录”,“Verkaufen”的意思是“出售”,“Suchen”的意思是“搜索”。

这是点击“Registrieren”后显示的 HTML 站点:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
<link rel="stylesheet" href="css/styles.css">
   <title>Onlineshop</title>
</head>
<body>
    <header>
        <hgroup>
        <h1 class="title">Onlineshop</h1>
        </hgroup>
        <nav>
          <a href="index.html">Home</a>
          <a href="register.html">Registrieren</a>
          <a href="signin.html">Einloggen</a>
          <a href="sell.html">Verkaufen</a>
          <a href="search.html">Suchen</a>
        </nav>
</header>
<form action="register" method="post">
<fieldset>
<legend>Registrieren</legend>
<table>
    <tbody>
    <tr>
        <th>
            <label for="email">Email:</label>
        </th>
        <td>
            <input 
                type="email" 
                name="email"
                size="40"
                maxlength="40"
                title="muster@beispiel.de"
                placeholder="E-Mail eingeben"
                pattern=".{6,40}" 
                required="required">
        </td>
    </tr>
    <tr>
        <th>
            <label for="password">
                Password:
            </label>
        </th>
        <td>
            <input 
                type="password" 
                name="password"
                size="10"
                maxlength="10"
                title="6-10 Zeichen"
                placeholder=
                    "Passwort eingeben"
                pattern=".{6,10}" 
                required="required">
        </td>
    </tr>
    <tr>
        <td/><td>
            <input type="submit">       
            <input type="reset">        
        </td>
    </tr>
</tbody>
</table>
</fieldset>
</form>

<footer>
        Copyright 
</footer>
</body>

这是我的 Servlet:

package de.java2enterprise.onlineshop;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


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

/**
 * Default constructor. 
 */
public RegisterServlet() {
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse    
  response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse 
 response) 
        throws ServletException, IOException {

    response.setContentType("text/html;charset=UTF-8");

    final String email = request.getParameter("email");
    final String password = request.getParameter("password");

    final PrintWriter out = response.getWriter();

    out.println("<!DOCTYPE html>");
    out.println("<html>");
    out.println("<body>");
    out.println("<br> Ihre Eingaben");
    out.println("<br> EMail: " + email);
    out.println("<br> EMail: " + password);
    out.println("</body>");
    out.println("</html>");

 }

}

我没有编写 Web.xml,因为我只是想用注释来处理它。 现在我有两个问题:

无法解析 Servlet-API 的所有导入。但为什么?我确实创建了一个 Java-Enterprise-Application-Project 并将 Webproject onlineshop-war 分配给该应用程序。 Glassfish 被分配到 Java-Enterprise-Application-Project,并且 Glassfish-Server 上记录了 Servlet-API,不是吗?

第二个问题: 为什么他在注册 HTML 上输入电子邮件和密码后点击提交后找不到 Servlet?和问题1有关系吗?

非常感谢!

最佳答案

第一个问题 -

All the imports of the Servlet-API can't be resolved. But why? I did create a Java-Enterprise-Application-Project and assigned the Webproject onlineshop-war to the App. And the Glassfish is assigned to the Java-Enterprise-Application-Project and on the Glassfish-Server is the Servlet-API recorded, isn't it?

我正在使用eclipseJava-8 的组合和Tomcat 8.5 web container ,通过观看你的问题,我只是创建了一个新的 dynamic web project在eclipse中,后来创建了两个html文件index.htmlregister.html以及Servlet class RegisterServlet在您定义的同一个包中。

完成所有工作后,我只是首先启动并停止我的 Web 容器服务器,然后创建 Right click on the project name, Go to menu Run As > Run on Server > Choose an existing server, there I choose the Tomcat 8.5 Server at localhost > Remove all other projects from list Configured instead the current one and pressed the Finish .

之前我已经选择了我已按步骤选择了默认浏览器选项 Window(Menu)>Web Browser>Chrome .

我的项目中的目录 WebContent/WEB-INF/中没有这样的 web.xml 配置文件。

因此 Tomcat 8.5 server将启动并显示 index.html页面位于chrome新标签页,有 Optionshop page出现了,我选择了Registrieren链接,然后重定向到register.html ,我在那里插入了电子邮件 ID 和密码,然后按 Enter 键,然后显示 servlet mapping在新页面中查看了我的电子邮件 ID 和密码,仅此而已。

第二个问题-

Why can't he find the Servlet after clicking on submit after typing in the EMail and the Password on the register-HTML? Has it something to do with question 1?

我更改了@WebServlet/RegisterServlet并在 register.html我将表单起始标记替换为

<form name="register" method="POST" action="RegisterServlet">

也在 Servlet对方法进行类 doGet(HttpServletRequest request, HttpServletResponse response)丢失了,所以我创建了一个和我的 Servlet类如下:

package de.java2enterprise.onlineshop;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

    public RegisterServlet() { }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException { }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");

        final String email = request.getParameter("email");
        final String password = request.getParameter("password");

        final PrintWriter out = response.getWriter();

        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<body>");
        out.println("<br> Ihre Eingaben");
        out.println("<br> EMail: " + email);
        out.println("<br> EMail: " + password);
        out.println("</body>");
        out.println("</html>");

        out.close();
    }
}

希望对你有帮助,谢谢。

关于java - 404 错误(Servlet),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48139947/

相关文章:

java - RxJava - 嵌套的 Observables? ( retrofit )

java - 如何在 Java 中使用 WSDL 文件的序列化器?

java - 参数索引超出范围 (0 < 1)

java - 找不到提供程序 org.glassfish.json.JsonProviderImpl

java - AWS Lambda 连接到可公开访问的 AWS RDS

java - 关于克服 Java 中缺乏多重继承的任何既定做法?

java - 我可以在运行时在 tomcat 服务器上添加 <server-mapping>

java - 如何正确执行 JSP 代码以将 HttpSession 中的值检索到 JavaScript 函数中?

java - 使用 asadmin 在 glassfish 上创建具有默认属性的 jdbc 连接池

java - Payara 5 HTTPS 速度极慢