404错误(Servlet)

时间:2018-01-07 17:50:55

标签: java servlets glassfish

我想编写自己的JavaEE-App代码。我正在使用Linux Mint和Glassfish 4作为App-Server。我的Eclipse是Oxygen(EE-Version)。

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

我还没有包含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并将Web项目onlineshop-war分配给App。并且Glassfish被分配到Java-Enterprise-Application-Project并且Glassfish-Server上记录了Servlet-API,不是吗?

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

第一个问题 -

  

无法解析所有Servlet-API导入。但为什么?我做到了   创建一个Java-Enterprise-Application-Project并分配   Webproject onlineshop-war to the App。 Glassfish被分配到   Java-Enterprise-Application-Project和Glassfish-Server是   记录的Servlet-API不是吗?

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

完成所有工作后,我首先启动并停止了我的网络容器服务器,稍后再制作Servlet class RegisterServlet

之前我选择了我已按步骤选项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选择了默认浏览器。

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

因此,Window(Menu)>Web Browser>Chrome将会在Tomcat 8.5 server新标签页中显示index.html页面,chrome出现,我选择了Optionshop page链接,然后重定向到Registrieren,我在后面按了Enter键插入了电子邮件ID和密码,register.html在新页面中查看了我的电子邮件ID和密码,就是这样。

第二个问题 -

  

为什么在输入后点击提交后找不到Servlet   注册HTML上的电子邮件和密码?有它的东西   问题1?

我将servlet mapping更改为@WebServlet,并在/RegisterServlet中将表单起始标记替换为

register.html

同样在<form name="register" method="POST" action="RegisterServlet"> 类中缺少方法Servlet,因此我创建了一个,doGet(HttpServletRequest request, HttpServletResponse response)类如下:

Servlet

希望这对你有所帮助,谢谢。