Web アプリケーションは、動的な Web サイトを作成するために使用されます。 Java は、サーブレットと JSP を通じて Web アプリケーションのサポートを提供します。静的な HTML ページを使用して Web サイトを作成できますが、情報を動的にしたい場合 (Web サイトと対話するため)、Web アプリケーションが必要になります。 この記事の目的は、Web アプリケーションのさまざまなコンポーネントに関する基本情報と、サーブレットと JSP を使用して Java Web アプリケーションを作成する方法を提供することです。
Web サーバーは、クライアントのリクエストを処理し、クライアントに応答を送信できるソフトウェアです。たとえば、Apache は最も広く使用されている Web サーバーの 1 つです。 Web サーバーは物理マシン上で実行され、特定のポート上のクライアント要求を監視します。
クライアントはサーバーと通信するソフトウェアであり、広く使用されている Web クライアントには Firefox、Safari などのブラウザがあります。(URL 経由で) サーバーに何かをリクエストする場合、Web クライアントはリクエストを作成してサーバーに送信すると、サーバーの応答が解析されてユーザーに表示されます。
Web サーバーと Web クライアントは 2 つの独立したソフトウェアであるため、通信するための共通言語が必要です。 HTML は、クライアントとサーバー間で使用されるハイパーテキスト マークアップ言語です。
Web サーバーとクライアントには共通の通信プロトコルが必要です。HTTP (Hypertext Transfer Protocol) はサーバーとクライアント間の通信プロトコルです。 HTTP は TCP/IP 通信プロトコル上で動作します。
HTTP リクエストの重要な部分:
HTTP メソッド (リクエスト メソッド) – 実行されるアクション (主に GET、POST、PUT など) URL アクセスしたいページ フォーム パラメータ (フォームパラメータ) – 同様の Java プログラム内のパラメータ (ログイン ページでユーザーが入力したアカウント番号やパスワードなど)
例:
GET /FirstServletProject/jsps/hello.jsp HTTP/1.1 ホスト: localhost: 8080 キャッシュ制御: no-cache
HTTP 応答のいくつかの重要な部分:
ステータス コード (ステータス コード) – より一般的なステータス コードは次のとおりです: 200 は成功を意味します。 、404 は見つからないことを意味し、403 はリクエストが見つからなかったことを意味します。拒否 コンテンツ タイプ – テキスト、html、画像、pdf など。MIME タイプとも呼ばれますコンテンツ – クライアント上でユーザーに表示される実際のデータ
例:
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
MIME タイプまたは Content-Type: 上記の HTTP 応答ヘッダーの例を参照すると、タグ「Content-Type」が含まれています。これは MIME タイプとも呼ばれ、サーバーはクライアントに送信されるデータのタイプを伝えます。これは、クライアントがユーザーにデータを提示するのに役立ちます。一般的に使用される MIME タイプには、text/html、text/xml、application/xml などがあります。
URL は、Uniform Resource Locator の略称で、サーバーやリソースを見つけるために使用されます。ネットワーク上のすべてのリソースには、独自の一意のアドレスがあります。例を見てみましょう: http://localhost:8080/FirstServletProject/jsps/hello.jsp http:// – これは URL の最初の部分で、サーバーとクライアント間の通信に使用されるプロトコルを指定します。 localhost – サーバーの特定のアドレス。ほとんどの場合、特定の IP アドレスにマップされたドメイン名です。場合によっては、複数のドメイン名が同じ IP アドレスを指し、WEB サーバー仮想マシンがリクエストを分散する役割を果たします。特定のサーバー 8080 – これはサーバーがリッスンするポートです。指定しない場合、ポート番号 0 ~ 1023 が使用されます。たとえば、80 は HTTP ポート、443 は HTTPS ポート、21 は FTP ポートなどです。 FirstServletProject/jsps/hello.jsp – サーバーから要求されるリソースは、静的 HTML、PDF、JSP、サーブレット、PHP です。など。
Web サーバーは HTML Web ページを十分にサポートしていますが、動的なコンテンツを生成する方法やデータをデータベースに保存する方法を知らないため、別のツールが必要です。動的コンテンツの生成 PHP、Python、Ruby on Rails、Java サーブレット、JSP など、動的コンテンツを生成できるプログラムは多数あり、動的応答をサポートすることで Web サーバーの機能を拡張します。サーブレットと JSP を使用して最初の Web アプリケーションを作成します
サーブレットはサーバー側のテクノロジであるため、ここでは Apache Tomcat を使用します。インストールは非常に簡単です。開発の便宜のために、Tomcat を Eclipse に追加しました。これにより、プログラムを迅速にデプロイして実行できるようになりました環境設定 -> サーバー ランタイム環境を選択します。対応する Tomcat のバージョン
Tomcat のパスと jre 環境を入力し、サーバー ビューを表示して、以下に示すように新しいサーバーを作成します
提示: 如果server标签不可见,选择 Window > Show View > Servers. 试着启动一下,看看是否配置成功,如果你已经通过终端启动了服务,那么你需要从终端先停止服务,然后再从eclipse中启动服务
接下来终于特么可以创建第一个程序了(老外写东西太墨迹了~~) 选择 File > New > Dynamic Web Project 一直按下一步,直到最后一步的时候添加servlet模本3.0 !
你可以直接点击完成或者下一步查看其他的选项设置 现在,选择 File > New > Servlet 创建一个servlet,此处点啥就不翻译了 !
如果我们点完成,他会生成servlet的框架代码,所以我们有一些重要的方法不需要我们自己写,这很节省时间 接下来,我们在doGet()方法中添加一些html代码.当我们使用get方法请求时会调用这个doGet方法.我们的程序如下:
package com.journaldev.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="pankaj")}) public class FirstServlet extends HttpServlet { private static final long serialVersionUID = 1L; public static final String HTML_START=""; public static final String HTML_END=""; /** * @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以前的版本中.我们需要在应用部署描述信息中提供url表达式信息,但是Servlet 3.0使用java注解的方式,这样即容易理解也可以减少错误 然后选择 Run > Run on Server 如下图:
点击完成,然后使用浏览器打开页面
通过刷新页面,你会发现数据是在不断变化的,eclipse有内部浏览器,你愿意用就用,不愿意用爱用啥用啥.
小结:Servlet用于生成动态页面并把它通过响应信息发送给客户端,如果你查看 doGet() 方法的实现.我们实际上创建了一个 PrintWriter 对象,我们使用他来写动态内容
这是一个好的开始,但是,但是如果有很多的动态数据需要展示,那么我们要在servlet中码很多代码,这样即不好阅读也容易出错,这个时候Jsp就派上用场了 jsp也是服务端技术,他向html一样提供了很多额外功能让我们方便的创建动态内容.因为他很像HTML,所以他很容易展示. 下面这段代码就是jsp代码:
<%@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" "http://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>
运行程序看到如下结果:
后续文章会讲述很多关于SERVLET和jsp的内部细节,在详细介绍之前我们还要多学一些Web应用方面的知识.
Tomcat 是一个Web容器, 当一个请求从客户端发送到服务端时,请求会被web容器接收,web容器会找到请求的正确资源,然后把这些资源封装成响应提供给服务器,然后服务器再把响应发送给客户端 当web容器接收到请求的时候,如果请求是servlet类型的请求,容器会创建两个对象 HTTPServletRequest 和 HTTPServletResponse 然后他会从url中找到瑶要接收请求的servlet并且给请求单独创建一个线程.然后调用service方法,service方法再调doGet() 或者 doPost() 方法,Servlet方法生成动态页面并且将他写入response(响应)中,一旦servlet线程结束,容器将response转成HTTP respons并发送给客户端 web容器做的一些主要工作:
通信支持–容器给web服务器和servlet(jsp)之间提供一种简单的通信方式,因为有了容器,我们不需要创建server socket来监听从web服务器传过来的请求,也不需要解析请求和生成响应,这些重要而且复杂的任务全部由容器来完成,我们只需要关注我们应用的业务逻辑就好.
生命周期和资源关联– 容器会管理servlet的整个声明周期,容器负责把servlet加载到内存中,初始化servlet,调用servlet方法并且销毁他们,容器也提供了像JNDI一样对资源的共享和管理工具
多线程支持– 容器为每一个servlet请求创建一个单独线程,所以servlet并不为每一个请求单独创建资源来节省时间和内存
对JSP的支持– jsp看起来并不像标准的java程序但是容器却可以支持,应用中的每一个jsp都被容器解析并转换成servlet并像管理servlet一样来管理他们
复杂的任务– Web容器管理资源池,做内存优化,执行垃圾回收,提供安全配置,支持多个应用,热部署和后台执行使生活变得美好
Java Web应用程序被打成war包(有固定的结构),你可以把上面的程序解压出来看看目录结构,内容应该像下面的图片一样:
web.xml是web应用程序的部署文件,包括对servlet的映射,欢迎页面,安全性配置,session失效时间等
这些就是关于java web应用的初级介绍,接下来我们会介绍更多的关于 Servlets and JSP 的东西
FirstServlet.zip
(全文完)