官术网_书友最值得收藏!

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);
             }
         }
主站蜘蛛池模板: 遂宁市| 姜堰市| 旅游| 惠水县| 菏泽市| 万盛区| 肃宁县| 肥西县| 海南省| 鱼台县| 张家川| 大庆市| 南京市| 杨浦区| 星子县| 万载县| 喜德县| 韶山市| 长宁区| 阿城市| 镇宁| 邢台县| 新平| 武定县| 阿瓦提县| 磐石市| 关岭| 揭东县| 泌阳县| 行唐县| 肇庆市| 宁海县| 任丘市| 西充县| 绥棱县| 余庆县| 泰安市| 同心县| 丰都县| 宜宾市| 买车|