Java Web应用程序教程
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之前),欢迎页面,安全性配置,会话超时设置等的映射。