语法和语法

时间:2018-01-30 17:50:15

标签: java html web-services servlets

我有足够的知识在Java SE / JavaFX(桌面)中开发,但这是我第一次使用Java EE(WEB)。我想构建一个基本应用程序,只在HTML / JSP中获取Login和Password,调用Servlet(用Java)并将单个消息返回给HTML / JSP。这次我想在没有任何IDE的情况下做到这一点。#34; hard way"所以,我已经安装了Tomcat 7.0,我有这些模块:

Java(此示例仅从HTML / JSP接收)

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

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

public class loginServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String userName = request.getParameter("userName");
        String password = request.getParameter("password");
        out.println("<html>");
        out.println("<body>");
        out.println("Hello " + "  " + userName + "welcome to my blog");
        out.println("Your password is : " + "  " + password + "<br>");
        out.println("</body></html>");
    }
}

HTML / JSP

<!DOCTYPE html>
<html lang ="pt-br">        
   <head>
      <title> loginServlet </title>
      <meta http-equiv = ”Content-Type” content=”text/html; charset=UTF-8”>
      <link rel="stylesheet" type="text/css" 
            href="c:/java/html/css/estilo.css"/>                     
   </head>

   <body>
      <h2> Login Page </h2>

      <p>Please enter your username and password</p>

      <form method="GET" action="loginServlet">
         <p> Username <input type="text" name="userName" size="50"> </p>

     <p> Password <input type="text" name="password" size="20"> </p>

     <p> <input type="submit" value="Submit" name="B1"> </p>
      </form>
   </body>
</html>

WEB.XML

<?xml version="1.0" encoding="ISO-8859-1" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <display-name>loginServlet</display-name>
    <description>
        This is a simple web application with a source code organization
        based on the recommendations of the Application Developer's Guide.
    </description>

    <servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>java.loginServlet.WebContaint.WEB-
                       INF.classes.loginServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
    </servlet-mapping>

</web-app> 

路径和文件夹

  • loginServlet.class位于C://java/loginServlet/WebContaint/WEB-INF/classes/

  • loginServlet.jsp位于C://java/loginServlet/WebContaint/

  • web.xml位于C://java/loginServlet/WebContaint/WEB-INF/

  • loginServlet.war位于C:\Program Files\Apache Software Foundation\ Tomcat 7.0\webapps

当我尝试使用localhost(http://localhost:8080/loginServlet)拨打Chrome时,收到404错误。

1 个答案:

答案 0 :(得分:0)

您的Servlet类名称看起来不对:

<servlet-class>java.loginServlet.WebContaint.WEB-
               INF.classes.loginServlet</servlet-class>

我甚至不确定是否可以将用户代码放在java命名空间中(可能受到保护),无论我不推荐它。包名中包含WEB-INF.classes也不对。将名称拆分为多行也是不对的。

事实上,在你的代码中,你甚至没有包名,所以你应该能够写:

<servlet-class>loginServlet</servlet-class> 

阅读此tutorial on creating servlets,它解决了servlet类的命名并从web.xml文件中交叉引用它们。

注意,对于像这样的简单示例,您甚至不需要web.xml文件,只需use an @WebServlet annotation

除了:

  • 当前版本的Tomcat是9.x,我不建议使用像7.x这样的旧版本。
  • 坚持使用Java命名约定(例如,致电您的班级LoginServlet,而不是loginServlet)。
  • 要了解JEE,我建议您使用official JEE tutorial
  

一个陌生人喜欢的事情:似乎只调用了(直接)servlet(loginServlet.class)。 HTML(loginServlet.jsp)未显示可以通知Login和Password的页面。我看到了由Servlet生成的msg“Hello userName welcome to my blog”(loginServlet.class)。当然,登录名和密码为空。

根据您之前的问题,您说您正在调用此应用程序:

  

http://localhost:8080/loginServlet

这不会告诉应用程序使用您创建的jsp文件,该文件名为loginServlet.jsp。您所做的调用的细分是您使用端口8080上的http协议来访问您的tomcat服务器。您提供了路径/loginServlet,它标识了您的Web应用程序(默认情况下,它从您部署的war文件中获取其名称,您称之为loginServlet.war)。一旦进入应用程序,它将尝试打开欢迎文件(如果有)。但是您没有为servlet提供欢迎文件或空名称映射,因此,通常情况下,我只希望该URL找不到404错误。

你的servlet的url是

http://localhost:8080/loginServlet/loginServlet  

第一个loginServlet标识您的应用,第二个loginServlet标识servlet本身。因此,访问该URL将直接访问servlet处理。

但是,您不希望您的用户直接调用它。相反,您希望显示您的jsp文件,然后将其发送到服务器http://localhost:8080/loginServlet/loginServlet以触发servlet处理。

访问jsp的两个选项是提供欢迎文件或在请求字符串中提供完全限定名称。

完全限定名称请求将是:

http://localhost:8080/loginServlet/loginServlet.jsp

如果您要分配welcome file,则可以将以下部分添加到您的web.xml中:

<welcome-file-list>
    <welcome-file>loginServlet.jsp</welcome-file>
</welcome-file-list>

然后,以下访问字符串应显示loginServlet.jsp页面:

http://localhost:8080/loginServlet