我有足够的知识在Java SE / JavaFX(桌面)中开发,但这是我第一次使用Java EE(WEB)。我想构建一个基本应用程序,只在HTML / JSP中获取Login和Password,调用Servlet(用Java)并将单个消息返回给HTML / JSP。这次我想在没有任何IDE的情况下做到这一点。#34; hard way"所以,我已经安装了Tomcat 7.0,我有这些模块:
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>");
}
}
<!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>
<?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错误。
答案 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。
除了:
LoginServlet
,而不是loginServlet
)。一个陌生人喜欢的事情:似乎只调用了(直接)servlet(loginServlet.class)。 HTML(loginServlet.jsp)未显示可以通知Login和Password的页面。我看到了由Servlet生成的msg“Hello userName welcome to my blog”(loginServlet.class)。当然,登录名和密码为空。
根据您之前的问题,您说您正在调用此应用程序:
这不会告诉应用程序使用您创建的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