404 错误(小服务程序)

404 Error (Servlet)

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

我想测试一下我的客户是否可以登录。

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

这些是我在 Eclipse 中的项目:

这是我的索引-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"表示"sign up","Einloggen"表示"to log in","Verkaufen"表示"to sell","Suchen"表示"to search".

这是点击 "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 分配给 App。 Glassfish 被分配给 Java-Enterprise-Application-Project 并且在 Glassfish-Server 上记录了 Servlet-API,不是吗?

第二个问题: 为什么他在register-HTML输入EMail和密码后点击提交后找不到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?

我正在使用 eclipse 结合 Java-8Tomcat 8.5 web container,通过观察你的问题,我只是在 eclipse 中创建了一个新的 dynamic web project,后来又创建了两个 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 将启动并在 chrome 新选项卡中显示 index.html 页面,Optionshop page 出现,我选择 Registrieren link,然后重定向到 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">

也在Servletclass中缺少方法doGet(HttpServletRequest request, HttpServletResponse response),所以我创建了一个,我的Servletclass如下:

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();
    }
}

希望对您有所帮助,谢谢。