Java Web应用程序教程

时间:2020-02-23 14:37:00  来源:igfitidea点击:

Java Web Application用于创建动态。
Java通过Servlet和JSP为Web应用程序提供支持。
我们可以使用静态HTML页面创建一个,但是当我们希望信息是动态的时,我们需要Web应用程序。

Java Web应用程序

本文的目的是提供Web应用程序中不同组件的基本细节,以及如何使用Servlet和JSP创建我们的第一个Java Web应用程序。

  • Web服务器和客户端
  • HTML和HTTP
  • 了解网址
  • 为什么我们需要Servlet和JSP?
  • 第一个使用Servlet和JSP的Web应用程序
  • 网络容器
  • Web应用程序目录结构
  • 部署描述符

Web服务器和客户端

Web服务器是一种可以处理客户端请求并将响应发送回客户端的软件。
例如,Apache是使用最广泛的Web服务器之一。
Web Server在某些物理计算机上运行,并在特定端口上侦听客户端请求。

Web客户端是一种有助于与服务器通信的软件。
一些使用最广泛的Web客户端是Firefox,Google Chrome,Safari等。
当我们从服务器(通过URL)请求某些内容时,Web客户端会负责创建请求并将其发送到服务器,然后解析服务器响应并将其呈现给用户。

HTML和HTTP

Web服务器和Web客户端是两个单独的软件,因此应该使用某种通用语言进行通信。
HTML是服务器和客户端之间的通用语言,代表超文本标记语言。

Web服务器和客户端需要一个通用的通信协议,HTTP(超文本传输协议)是服务器和客户端之间的通信协议。
HTTP在TCP/IP通信协议之上运行。

HTTP请求的一些重要部分是:

  • HTTP方法–要执行的操作,通常是GET,POST,PUT等。

  • URL –访问页面

  • 表单参数–类似于Java方法中的参数,例如,用户,登录页面的密码详细信息。

示例HTTP请求:

GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

HTTP响应的一些重要部分是:

  • 状态码–一个整数,指示请求是否成功。
    一些众所周知的状态码是200表示成功,404表示未找到,403表示禁止访问。

  • 内容类型–文本,html,图像,pdf等。
    也称为MIME类型

  • 内容–客户端呈现并显示给用户的实际数据。

示例HTTP响应:

200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>

MIME类型或者内容类型:如果您在上面的示例HTTP响应标头中看到,则其中包含标签" Content-Type"。
也称为MIME类型,服务器将其发送给客户端,以让他们知道其发送的数据类型。
它有助于客户端为用户呈现数据。
一些最常用的mime类型是text/html,text/xml,application/xml等。

了解网址

URL是Universal Resource Locator的首字母缩写,用于查找服务器和资源。
网络上的每个资源都有其自己的唯一地址。
让我们以示例的形式查看网址的一部分。

https://localhost:8080/FirstServletProject/jsps/hello.jsp

https://–这是URL的第一部分,提供服务器-客户端通信中使用的通信协议。

本地主机-服务器的唯一地址,通常是映射到唯一IP地址的服务器的主机名。
有时,多个主机名指向相同的IP地址,并且Web服务器虚拟主机负责将请求发送到特定服务器实例。

8080 –这是服务器正在侦听的端口,它是可选的,如果我们未在URL中提供它,则请求将转到协议的默认端口。
端口号0到1023是已知服务的保留端口,例如,对于HTTP是80,对于HTTPS是443,对于FTP是21,等等。

FirstServletProject/jsps/hello.jsp –服务器请求的资源。
它可以是静态html,pdf,JSP,servlet,PHP等。

为什么我们需要Servlet和JSP?

Web服务器可用于静态内容HTML页面,但是它们不知道如何生成动态内容或者如何将数据保存到数据库中,因此我们需要另一个可用于生成动态内容的工具。
有几种用于动态内容的编程语言,例如PHP,Python,Ruby on Rails,Java Servlet和JSP。

Java Servlet和JSP是服务器端技术,通过提供对动态响应和数据持久性的支持来扩展Web服务器的功能。

Java Web开发

第一个使用Servlet和JSP的Web应用程序

我们将使用" Java EE开发人员的Eclipse IDE"来创建我们的第一个servlet应用程序。
由于Servlet是一种服务器端技术,因此我们需要一个支持Servlet技术的Web容器,因此我们将使用Apache Tomcat服务器。
设置非常简单,我将这部分留给您自己。

为了便于开发,我们可以在Eclipse中添加配置Tomcat,它有助于轻松部署和运行应用程序。

转到Eclipse Preference,然后选择Server Runtime Environments,然后选择您的tomcat服务器的版本,我的是Tomcat 7。

提供apache tomcat目录位置和JRE信息以添加运行时环境。

现在转到"服务器"视图并创建一个新服务器,如下图所示,指向上面添加的运行时环境。

注意:如果"服务器"选项卡不可见,则可以选择"窗口">"显示视图">"服务器",以便在Eclipse窗口中可见。
尝试停止并启动服务器,以确保其正常运行。
如果您已经从终端启动了服务器,那么您将不得不从终端停止它,然后从Eclipse启动它,否则它将无法正常运行。

现在,我们准备好创建第一个servlet并在tomcat服务器上运行它的设置。

选择"文件">"新建">"动态Web项目",然后使用下面的图像提供运行时,作为我们在上一步中添加的服务器,模块版本为3.0,以使用Servlet 3.0规范创建Servlet。

您可以直接单击"完成"按钮来创建项目,也可以单击"下一步"按钮来检查其他选项。

现在选择File> New> Servlet并使用下图创建我们的第一个Servlet。
同样,我们可以单击完成,也可以通过下一步按钮检查其他选项。

当我们单击完成按钮时,它将生成我们的Servlet框架代码,因此我们无需键入所有不同的方法并在Servlet中导入,从而节省了我们的时间。

现在,我们将在doGet()方法中添加一些带有动态数据代码HTML,这些HTML将为HTTP GET请求调用。
我们的第一个servlet如下所示。

package com.theitroad.first;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

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

/**
 * Servlet implementation class FirstServlet
 */
@WebServlet(description = "My First Servlet", urlPatterns = { "/FirstServlet" , "/FirstServlet.do"}, initParams = {@WebInitParam(name="id",value="1"),@WebInitParam(name="name",value="hyman")})
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public static final String HTML_START="<html><body>";
	public static final String HTML_END="</body></html>";
     
  /**
   * @see HttpServlet#HttpServlet()
   */
  public FirstServlet() {
      super();
      //TODO Auto-generated constructor stub
  }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Date date = new Date();
		out.println(HTML_START + "<h2>Hi There!</h2><br<h3>Date="+date +"</h3>"+HTML_END);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//TODO Auto-generated method stub
	}

}

在Servlet 3之前,我们需要在Web应用程序部署描述符中提供url模式信息,但是Servlet 3.0使用易于理解的Java注释,并且出错的机会更少。

现在,从Servlet编辑器窗口中选择"运行">"在服务器上运行"选项,并使用以下图像作为选项。

单击完成后,浏览器将在Eclipse中打开,然后出现以下HTML页面。

您可以刷新它以检查Date是否是动态的并保持不变,也可以在Eclipse之外的任何其他浏览器中将其打开。

因此,servlet用于生成HTML并作为响应发送它,如果您研究doGet()实现,实际上是在响应PrintWriter对象中编写HTML文档时创建它,并在需要的地方添加动态信息。

首先,这是个好习惯,但如果响应很大且包含大量动态数据,则容易出错,并且难以阅读和维护。
这是引入JSP的主要原因。

JSP还是服务器端技术,就像HTML一样,具有附加功能,可以在需要的地方添加动态内容。
JSP很适合演示,因为它很容易编写,因为它就像HTML。
这是我们的第一个JSP程序,它执行与上述servlet相同的操作。

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
  pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=<%= new Date() %>
</h3>
</body>
</html>

如果我们在JSP之上运行,我们将得到下图所示的输出。

最终的项目层次结构类似于Eclipse中的下图。

下载FirstServlet项目

下载Servlet Hello World示例项目

在以后的文章中,我们将更详细地研究Servlet和JSP,但是在结束本文之前,我们应该对Java Web应用程序的某些方面有充分的了解。

网络容器

Tomcat是一个Web容器,当从客户端向Web服务器发出请求时,它将请求传递到Web容器,并且它是Web容器的工作,以找到正确的资源来处理该请求(servlet或者JSP),然后使用资源来生成响应并将其提供给Web服务器。
然后,网络服务器将响应发送回客户端。

当网络容器收到请求(如果是针对servlet的请求)时,容器会创建两个对象HTTPServletRequest和HTTPServletResponse。
然后,它根据URL找到正确的servlet,并为请求创建一个线程。
然后,它调用servlet service()方法,并基于HTTP方法service()方法调用doGet()或者doPost()方法。
Servlet方法生成动态页面并将其写入响应。
Servlet线程完成后,容器会将响应转换为HTTP响应,然后将其发送回客户端。

Web容器完成的一些重要工作是:

  • 通讯支持–容器提供了Web服务器与Servlet和JSP之间的简便通讯方式。
    由于有了容器,我们不需要构建服务器套接字即可侦听来自网络服务器的任何请求,解析请求并生成响应。
    所有这些重要而复杂的任务都是由容器完成的,我们需要集中精力处理应用程序的业务逻辑。

  • 生命周期和资源管理–容器负责管理Servlet的生命周期。
    容器负责将servlet装入内存,初始化servlet,调用servlet方法并销毁它们。
    该容器还提供实用程序(如JNDI)来进行资源池和管理。

  • 多线程支持–容器会为对Servlet的每个请求以及处理后的线程创建一个新线程。
    因此,不必为每个请求初始化servlet,从而节省时间和内存。

  • JSP支持– JSP看起来不像普通的Java类,并且Web容器提供了对JSP的支持。
    应用程序中的每个JSP都由容器编译并转换为Servlet,然后容器像其他Servlet一样管理它们。

  • 杂项任务– Web容器管理资源池,进行内存优化,运行垃圾收集器,提供安全性配置,对多个应用程序的支持,热部署以及其他一些使我们的生活变得更轻松的任务。

Web应用程序目录结构

Java Web应用程序打包为Web存档(WAR),并且具有定义的结构。
您可以将上述动态Web项目导出为WAR文件,并将其解压缩以检查层次结构。
就像下面的图片一样。

部署描述符

web.xml文件是Web应用程序的部署描述符,包含Servlet(3.0之前),欢迎页面,安全性配置,会话超时设置等的映射。