Love Pisces

          It's not your aptitude but your attitude that determines your altitude!
          posts - 2, comments - 43, trackbacks - 0, articles - 9

          第1章 Java Web編程技術(shù)

          Posted on 2007-05-18 21:11 筱筱 閱讀(447) 評論(0)  編輯  收藏 所屬分類: Struts學(xué)習(xí)日記

          1.1 Java Web編程的主要組件技術(shù)
                   一個(gè)完整的Java Web應(yīng)用軟件通常是由多種組件技術(shù)構(gòu)成的,一般由表示層組件、控制層組件、業(yè)務(wù)邏輯層組件及數(shù)據(jù)訪問層組件組成。表示層組件通常由HTML和JSP頁面構(gòu)建,控制層組件一般是Servlet,業(yè)務(wù)邏輯層組件是JavaBeans或EJB,數(shù)據(jù)訪問層組件是JDBC,Hibernate或CMP。此外,Java Web應(yīng)用的各個(gè)組件需要在XML格式的配置文件中進(jìn)行聲明,然后打包,部署Java Web服務(wù)器(例如Tomcat)中運(yùn)行。
          1.1.1 Servlet
                   Servlet(Java服務(wù)器小程序)是由Java編寫的服務(wù)器端程序,是由服務(wù)器端調(diào)用和執(zhí)行的、按照Servlet自身規(guī)范編寫的Java類。
                   Servlet可以處理客戶端傳來的HTTP請求,并返回一個(gè)響應(yīng)。它是一個(gè)Java類,具有可移植、功能強(qiáng)大、安全、集成、模塊化和可擴(kuò)展性好等特點(diǎn)。

          例1-1:
          package chap1;
          import javax.servlet.*;
          import java.io.*;
          public class Servlet extends GenericServlet{
             public void service(ServletRequest request,ServletResponse response)throws IOException
             {
                  response.setContentType("text/html");
                  PrintWriter out=response.getWriter();
                  out.println("<html>");
                  out.println("<body>");
                  out.println("<h1>Hello World</h1>");
                  out.println("</body>");
                  out.println("</html>");
              }
          }
                   Servlet需要部署在Web容器中,它的生命周期由Web容器管理,可以分為以下幾個(gè)階段:
                   1. 裝載Servlet:這項(xiàng)操作一般是動(dòng)態(tài)執(zhí)行的。有些服務(wù)提供了相應(yīng)的管理功能,可以在啟動(dòng)的時(shí)候就裝載Servlet,并能夠初始化特定的Servlet。
                   2.創(chuàng)建一個(gè)Servlet實(shí)例。
                   3.調(diào)用Servlet的init()方法。
                   4.服務(wù):如果Web容器接收到對此Servlet的請求,那么它調(diào)用Servlet的service()方法。
                   5.銷毀:銷毀實(shí)例,通過調(diào)用Servlet的destroy()方法來銷毀Servlet。
           
                   Java對Servlet的支持是通過javax.servlet和javax.servlet.http兩個(gè)軟件實(shí)現(xiàn)的,其中javax.servlet.http是一個(gè)子軟件包。
                    javax.servlet軟件包包含Servlet常用的接口和類,如GenericServlet,ServletConfig,ServletRequest,ServletResponse和RequestDispatcher等。
                    javax.servlet.Servlet接口提供了創(chuàng)建Servlet的一般框架。Servlet可直接實(shí)現(xiàn)此接口,或者間接地通過擴(kuò)展javax.servlet.GenericServlet類或javax.servlet.http.HttpServlet類來實(shí)現(xiàn)此接口。javax.servlet.GenericServlet類可用于創(chuàng)建與任何協(xié)議一起使用的Servlet.
                    而javax.servlet.http軟件包除了繼承以上的接口和類外,還包含了一些針對HTTP協(xié)議的方法、特殊請求和響應(yīng)對象,如HttpServlet,HttpServletRequest,HttpServletResponse,HttpSession和HttpDispatcher等。

                   1. HttpServlet類提供了處理不同HTTP請求類型(有GET,POSTH和PUT等)的方法,其中兩種最常見的HTTP請求類型是GET和POST,它們分別是由doGet()和doPost()方法進(jìn)行處理的:

                      protected void doGet(HttpServletRequest request,HttpServletResponse response)
                            throws ServletException,java.io.IOException;
                      protected void doPost(HttpServletRequest request,HttpServletResponse response)
                            throws ServletException,java.io.IOException;

                   2. HttpServletRequest接口提供了處理客戶請求的方法。使用這些方法,Servlet可從客戶頁面窗體中取得數(shù)據(jù)。例如,從客戶頁面窗體取得用戶名(username)的方法如下:

                      HttpServletRequest request;
                      String name=request.getParameter("username");

                   3. HttpServletResponse接口提供了以HTML頁面形式把請求發(fā)送給客戶的方法,主要方法有setContentType(),sendRedirect()等。例如,把請求轉(zhuǎn)發(fā)給下一個(gè)頁面next.jsp的實(shí)現(xiàn)方法如下:

                      HttpServletResponse response;
                      respinse.sendRedirect("next.jsp");

                   4. HttpSession接口用來記錄當(dāng)前Servlet中的用戶會(huì)話。例如:在Web站點(diǎn)上注冊的每個(gè)用戶自動(dòng)與HttpSession對象關(guān)聯(lián)。Servlet可用此對象來存儲(chǔ)關(guān)于用戶會(huì)話的信息。可使用HttpSession接口的putValue()和getValue()等方法把數(shù)據(jù)寸入HttpSession對象中,或從該對象中取出數(shù)據(jù)。通過HttpServletRequest對象的getSession()方法可生成一個(gè)HttpSession對象,如下面的代碼所示:

                      HttpServletRequest request;
                      HttpSession session=request.getSession(true);

                   5. RequestDispatcher接口可以把Servlet的請求提交或委派給另一個(gè)資源,如Servlet,HTML文件或JSP頁面。在這種情況下,源Servlet進(jìn)行同樣處理并把請求委派給另一個(gè)Servlet。RequestDispatcher接口封裝指向特定資源(Servlet,HTML文件或JSP頁面)的URL。用此接口的forward(HttpServletRequest request,HttpServletResponse response)方法委派任務(wù)到特定資源。RequestDispatcher對象可通過HttpServletRequest對象的getRequestDispatcher()方法生成。例如:

                      RequestDispatcher td=request.getRequestDispatcher("reply.jsp");
                      rd.forward(request,response);

          例1-2:
          MyJsp.jsp:
          <FORM name="form1" method="get" action="MyFirstServlet">

          MyFirstServlet.java:
          package chap1;
          import javax.servlet.http.*;
          import javax.servlet.*;
          import java.io.*;
          import java.util.*;

          public class MyFirstServlet extends HttpServlet{
                public void doPost(HttpServletRequest request,HttpServletResponse response){
                String name=request.getParameter("username");
                RequestDispatcher rd;
                try{
                   try{
                    if(name.equals("Tom")){
                     HttpSession session=request.getSession(true);
                     session.setAttribute("nm",name);
                     response.sendRedirect("servlet/reply.jsp");
                    }
                    else{
                     rd=request.getRequestDispatcher("servlet/error.jsp");
                     rd.forward(request,response);     
                     }
                   }catch(ServletException e){System.out.println(e);}
                  }catch(IOException e){System.out.println(e);}
              }
             public void doGet(HttpServletRequest request,HttpServletResponse response){
                 doPost(request,response);
             }
          }
          在Java Web應(yīng)用程序中,Servlet常用做控制器組件。當(dāng)Servlet部署到Web服務(wù)器中時(shí),需要Web配置文件Web.xml中進(jìn)行聲明。
          <servlet>
          <servlet-name>MyFirstServlet</servlet-name>
          <servlet-class>chap1.MyFirstServlet</servlet-class>
          </servlet>
          <servlet-mapping>
          <servlet-name>MyFirstServlet</servlet-name>
          <url-pattern>/MyFirstServlet</url-pattern>
          </servlet-mapping>

           

          主站蜘蛛池模板: 玛纳斯县| 德江县| 抚顺县| 马龙县| 云梦县| 广西| 沾化县| 弋阳县| 宽甸| 化隆| 桦南县| 尤溪县| 绥宁县| 青岛市| 桂东县| 九江县| 鞍山市| 台湾省| 洛川县| 永胜县| 济宁市| 延津县| 黑山县| 武山县| 清远市| 盐山县| 华蓥市| 方正县| 辛集市| 册亨县| 锡林郭勒盟| 桐城市| 墨竹工卡县| 拉萨市| 崇礼县| 莆田市| 贺州市| 格尔木市| 文水县| 克东县| 锡林浩特市|