- 基于Java技術的Web應用開發
- 孫璐主編
- 1759字
- 2018-12-27 20:00:03
1.1 Web 應用的發展歷史
早期的Web應用僅僅是對靜態信息的訪問,服務器根據用戶的請求把相應的靜態的HTML頁面傳送給客戶端進行顯示。應用程序不會對請求的信息進行任何的處理。
例1_1:靜態頁面的實現。
Ex1_1_1.html
<html> <head> <title>Web應用-----靜態顯示</title> </head> <body> <a href="Ex1_1_2.html">本書的寫作特點</a> </body> </html>
Ex1_1_2.html
<html> <head> <title>顯示靜態內容</title> </head> <body>
本書立足于高職高專,語言淺顯易懂,對進行Web開發的各個環節都予以介紹,并用一個項目貫穿本書的各個章節。理論知識不求全面,以必需、夠用為度。重點在于實用技術。
</body> </html>
后來出現了Java的Applet小應用程序。當用戶發出請求后,Applet隨著頁面一起被下載到客戶端,Applet在瀏覽器的JVM中運行,能夠提供動態的頁面內容。從某種程度說, Applet擴展了Web服務器的功能。
例1_2:Applet的應用。
HelloApplet.java
import java.awt.*; import java.applet.*; public class HelloApplet extends Applet { public void init() { } public void paint(Graphics g) { g.drawString("Welcome to Java!!", 50, 60 ); } }
HelloTest.html
<HTML> <HEAD> </HEAD> <BODY > <CENTER> <APPLET code ="HelloApplet.class" width = 500 height= 300 > </APPLET> </CENTER> </BODY> </HTML>
由于Applet不能對數據庫進行訪問,慢慢就出現了在服務器端運行的Servlet。Servlet實際上也是一段Java程序,它會根據用戶提交數據的不同從而響應不同的頁面,實現動態Web應用。
Servlet是運行在服務器端的Web Container的Web容器中,當一個HTTP請求傳到服務器,Web Server Plugin會檢測這次請求的是靜態資源還是動態資源。如果是靜態資源, Web Server Plugin會將請求傳遞給Web Server,Web Server將請求直接映射到某個頁面,不加任何改變地將頁面傳回給客戶端。但如果請求的是動態資源,Web Server Plugin會將請求傳遞給Web Container,Web Container會調用相應的Servlet,根據用戶提交數據的不同,將動態內容傳回給客戶端。
例1_3:Servlet的應用。
Ex1_3.html
<html> <body bgcolor="cyan" > <font color="" size="8"> <form action="Ex1_3" method="get"> <input type="text" name="paraTxt"> <input type="submit" value="提交"> </form> </body> </html>
Ex1_3.java
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class Ex5_5 extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GB2312"); PrintWriter out=response.getWriter(); out.println("<html>"); out.println("<head><title>Servlet的應用</title></head>"); out.println("<body>"); out.println("<hr width=80% align=left color=blue>"); String para=request.getParameter("paraTxt"); out.print("<br>"+para); out.println("<br><br><hr width=80% align=left color=blue>"); out.println("</body>"); out.println("</html>"); } }
在Ex1_3.html文件中定義了一個文本框和一個提交按鈕,當用戶在文本框中輸入內容,單擊提交按鈕后,服務器端的Servlet會得到用戶的提交信息,并將其顯示出來。根據用戶輸入的內容不同,顯示不同的信息,完成動態頁面的顯示。
但Servlet的缺點在于,如果僅僅使用Servlet往往會把業務邏輯和顯示邏輯混合到一起。例如,上面的Servlet程序將用戶信息的獲取和顯示放到一起,程序的可讀性變得很差。這時就出現了JSP。
JSP可以用來實現更好的MVC模式,也就是分離視圖、控制和業務邏輯,這樣可以使應用程序的結構更加清晰。視圖層一般由界面設計人員和界面程序員來完成,隨著用戶需求的變化而變化;模型層則由業務邏輯程序員來完成,根據流程的變化而變化;控制層則一般由負責整體控制的程序員來完成,這部分代碼比較穩定,一般會實現一個通用的架構。這種模塊功能的劃分有利于在代碼修改過程中進行模塊的隔離,而不需要把具有不同功能的代碼混雜在一起造成混亂。用JSP頁面來顯示給用戶的數據,用Servlet控制頁面的流程。Servlet會根據請求信息的不同或應用程序邏輯的設定而調用相應的JSP頁面。
例1_4:JSP頁面的實現。
input.html
<html> <head> <title>input.html</title> </head> <body> <form action="FirstServlet" method="get"> <input type="text" name="paraTxt"> <input type="submit" value="提交"> </form> </body> </html>
FirstServlet.java
package com; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class FirstServlet extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { HttpSession session=request.getSession(); String para=request.getParameter("paraTxt"); System.out.println(para); session.setAttribute("para", para); response.sendRedirect("showInfo.jsp"); } }
showInput.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <% String path = request.getContextPath(); String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <html> <head> <title>My JSP 'showInfo.jsp' starting page</title> </head> <body> 用戶輸入的信息為:<br> <% String para=(String)session.getAttribute("para"); %> <%=para %> </body> </html>
EJB是企業級的JavaBean,它提供了對業務邏輯數據的封裝。JavaBean可以通過Web Container來訪問EJB。Java應用程序客戶端也可以訪問EJB。
例1_5:簡單的EJB應用。
HelloWorld.java
package com.foshanshop.ejb3; public interface HelloWorld { public String SayHello(String name); }
HelloWorldBean.java
package com.foshanshop.ejb3.impl; import com.foshanshop.ejb3.HelloWorld; import javax.ejb.Remote; import javax.ejb.Stateless; public class HelloWorldBean implements HelloWorld { public String SayHello(String name) { return name +"說:你好!世界,這是我的第一個EJB3哦。"; } }
HelloWorldTest.java
package junit.test; import static org.junit.Assert.*; import java.util.Properties; import javax.naming.InitialContext; import org.junit.BeforeClass; import org.junit.Test; import com.foshanshop.ejb3.HelloWorld; /** * 單元測試用例,運行該用例時,你需要把[Jboss安裝目錄]/client下的jar加入項目的類路徑 下。 * */ public class HelloWorldTest { protected static HelloWorld helloworld; @BeforeClass public static void setUpBeforeClass() throws Exception { Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); InitialContext ctx = new InitialContext(props); helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/remote"); } @Test public void testSayHello() { String result = helloworld.SayHello("佛山人"); //System.out.println(result); assertEquals("佛山人說:你好!世界,這是我的第一個EJB3哦.", result); } }
- Reporting with Visual Studio and Crystal Reports
- Spring實戰(第5版)
- Android開發:從0到1 (清華開發者書庫)
- 青少年信息學競賽
- Node.js:來一打 C++ 擴展
- INSTANT Silverlight 5 Animation
- Java EE Web應用開發基礎
- 進入IT企業必讀的324個Java面試題
- 3D Printing Designs:The Sun Puzzle
- Learning iOS Penetration Testing
- JSP應用與開發技術(第3版)
- Kotlin核心編程
- VB語言程序設計教程(第2版)
- 小學生C++編程課堂(新手篇)
- Getting Started with Kubernetes