zhyiwww
          用平實的筆,記錄編程路上的點點滴滴………
          posts - 536,comments - 394,trackbacks - 0

          1 Tomcat 的目錄結構

          目錄

          描述

          /bin

          存放 Windows 平臺及 Linux 平臺啟動和關閉 Tomcat 的腳本文件

          /conf

          存放 Tomcat 服務器的各種配置文件,其中最重要的配置文件是 server.xml

          /server

          包括 3 個子目錄: Class Lib Webapps

          /server/lib

          存放 Tomcat 服務器所需的各種 JAR 文件 ( 只有 Tomcat 可以訪問 )

          /server/webapps

          存放 Tomcat 自帶的兩個 Web 應用: admin manager

          /common/lib

          存放 Tomcat 服務器以及所有 Web 應用都可以訪問的 JAR 文件

          /share/lib

          存放所有 web 應用都可以訪問的 JAR 文件 (Tomcat 不能訪問 )

          /logs

          存放 Tomcat 的日志文件

          /webapps

          當發布 web 應用時,默認情況下把 web 應用文件放于此目錄下

          /work

          Tomcat JSP 生成的 Servlet 放于此目錄下

          注: lib 目錄下都只能接受 JAR 文件,如果類壓縮文件為 ZIP 文件,應該將它展開,重新打包為 JAR 文件再拷貝到 lib 目錄下。

          2 、把開放目錄結構的 Web 應用打包成 war 文件的方法

          1 )進入 helloapp 應用的根目錄 <CATALINA_HOME>/webapps/helloapp

          2 )把整個 web 應用打包為 helloapp.war 文件,命令如下: jar cvf helloapp.war *.* ;(展開: jar xvf helloapp.war );

          3 Servlet 的功能

          1 )創建并返回基于客戶請求的動態 html 頁面

          2 )創建可嵌入到現有 html 頁面中的部分 html 頁面( html 片段)

          3 )與其他服務器資源(如數據庫或基于 Java 的應用程序)進行通訊

          4 )接收多個客戶機的輸入,并將結果廣播到多個客戶機上

          5 )根據客戶請求采用特定的 MIME(Multipurpose Internet Mail Extensions) 類型對數據過濾,例如進行圖象格式轉換

          4 Servlet API 類框圖

          Servlet 的框圖是由兩個 Java 包組成的: javax.servlet javax.servlet.http 。在 javax.servlet 包中定義了所有的 Servlet 類都必須實現或擴展的通用接口和類。在 javax.servlet.http 包中定義了采用 http 協議通信的 HttpServlet 類。 ?

          servlet_frame.PNG

          5 Tomcat 服務器初次執行 JSP 的過程

          ?flow.PNG


          JSP 生成的 Servlet 類實現了 javax.servlet.jsp.JspPage 接口,該接口擴展了 javax.servlet.Servlet 接口。在 javax.servlet.JspPage 接口中定義了代表 JSP 生命周期的方法 JspInit() JspDestory() ,類似 Servlet Init() Destory() 方法。

          6 JSP 指令: page include taglib

          page 指令: 可以指定所使用的腳本語言、 JSP 代表的 Servlet 實現的接口、 Servlet 擴展的類以及導入的軟件包。語法: <%@ page 屬性 1=” 1” 屬性 2=” 2” %>

          page 指令屬性表:

          ?

          language

          指定文件所用的腳本語言。目前僅 java 為有效值和默認值。該指令作用于整個文檔。當多次使用這一指令時,只有第一次有效。

          <%@ page language=”java”? %>

          method

          指定 Java 程序片段( Scriptlet )所屬的方法的名稱。 Java 程序片段會成為指定方法的主體。默認的方法是 service 方法。當多次使用該指令時,只有第一次是有效的。該屬性的有效值包括 Service doGet doPost 等。

          <%@ page method=”doPost”? %>

          import

          指定導入的 Java 軟件包名或類名列表,該列表用逗號分隔。在 JSP 文件中,可以多次使用該指令來導入不同的軟件包

          <%@ page import=”java.io.*,jav

          a.util.Hashtable”? %>

          content_type

          指定響應結果的 MIME 類型。默認的 MIME 類型是 text/html ,默認字符編碼為 ISO-8859-1 。當多次使用該指令時,只有第一次使用是有效的

          <%@ page content_type=”text/html;

          charset=GB2312” %>

          session=”true/false”

          指定 JSP 頁面是否使用 Session ,默認為 true

          <%@ page session=”true” %>

          errorPage=”error_url

          當發生異常時,客戶請求重新定向到哪個網頁

          <%@ page errorPage=

          ”errorpage.jsp” %>

          isErrorPage=”T/F”

          表示此 JSP 網頁是否為處理異常的網頁

          <%@ page isErrorPage=”true” %>

          include 指令: JSP 可以通過 include 指令來包含其它文件。被包含的文件可以是 JSP 文件、 HTML 文件或文本文件。如果被包含的是 JSP 文件,那么被包含的 JSP 文件中的 Java 程序片段也會被執行。

          include 指令的語法為:

          <%@ include file=”relativeURL” %>

          ?

          7 JSP 隱含對象

          在編寫 JSP 程序時,可以直接使用 Servlet/JSP 容器提供的隱含對象。使用這些對象的引用變量時不需要任何變量聲明。 JSP 中的隱含對象列表:

          隱含對象

          ???

          request

          javax.servlet.HttpServletRequest

          response

          javax.servlet.HttpServletResponse

          pageContext

          javax.servlet.jsp.PageContext

          application

          javax.servlet.ServletContext

          out

          javax.servlet.jsp.JspWriter

          config

          javax.servlet.ServletConfig

          page

          java.lang.Object( 相當于 Java 中的 this 關鍵字 )

          session

          javax.servlet.http.HttpSession

          exception

          java.lang.Exception

          8 、裝載并注冊數據庫驅動程序

          // 裝載 JdbcOdbcDriver class

          Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

          // 裝載并注冊 SQLServer Driver

          Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);

          java.sql.DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());

          // 裝載并注冊 OracleDriver

          Class.forName(“oracle.jdbc.driver.OracleDriver”);

          java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

          // 裝載并注冊 MySQLDriver

          Class.forName(“com.mysql.jdbc.Driver”);

          java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());// 不是必要步驟

          ?

          常用的數據庫的 JDBCURL 形式

          ◆如果通過JDBC-ODBC Driver連接數據庫,形式如下:

          jdbc:odbc:datasource

          ◆對于Oracle數據庫連接,形式如下:

          jdbc:oracle:thin:@localhost:1521:sid

          ◆對于SQL Server數據庫連接,形式如下:

          jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=BookDB

          ◆對于MySQL數據庫連接,形式如下:

          jdbc:mysql://localhost:3306/BookDB

          中文編碼轉換問題

          String dbUrl=”jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=GB2312”

          9 HttpSession 接口

          ?

          ?

          getId()

          返回 session ID

          invalidate()

          使當前的 session 失效, servlet 釋放其占用的資源

          setAttriibute(String name,Object object)

          將一對 name/value 屬性保存在 HttpSession 對象中

          getAttribute(String name)

          根據 name 參數返回保存在 HttpSession 對象中的屬性名

          getAttributeNames()

          以數組的方式返回 HttpSession 對象中所有的屬性名

          isNew

          判斷是否是新建的 session

          setMaxInactiveinterval()

          設定一個 session 可以處于不活動狀態的最大時間間隔,以秒為單位

          getMaxInactiveinterval()

          得到 session 的最大時間間隔

          10 、一個標準的 JavaBean 的特征

          1 JavaBean 是一個公共的 (public) 類;

          2 JavaBean 有一個不帶參數的構造方法;

          3 JavaBean 通過 setXXX 方法設置屬性,通過 getXXX 方法獲取屬性。

          11 JSP 訪問 JavaBean 的語法

          可以通過程序代碼來訪問 JavaBean ,也可以用特定的 JSP 標簽來訪問 JavaBean

          (1) 導入 JavaBean

          如: <%@ page import=”mypack..CounterBean” %>

          (2) 聲明 JavaBean 對象

          <jsp:useBean id=”myBean” class=”mypack.CounterBean” scope=”session”/>

          注: scope 可選值包括 page request session application ,默認為 page

          (3) 訪問 JavaBean 屬性

          JSP 提供了訪問 JavaBean 屬性的標簽,如果要將 JavaBean 的某個屬性輸出到網頁上,可以用 <jsp:getProperty> 標簽,如:

          <jsp:getProperty name=”myBean” property=”count”/>

          如果要給 JavaBean 的某個屬性賦值,可以用 <jsp:setProperty> 標簽,如:

          <jsp:setProperty name=”myBean” property=”count” value=”0”/>

          12 Tomcat 安全域的類型

          ?

          內存域

          MemoryRealm

          在初始化階段,從 XML 文件中讀取安全驗證信息,并把它們以一組對象的形式存放在內存中

          JDBC

          JDBCRealm

          通過 JDBC 驅動程序訪問存放在數據庫中的安全驗證信息

          數據源域

          DataSourceRealm

          通過 JNDI 數據源訪問存放在數據庫中的安全驗證信息

          JNDI

          JNDIRealm

          通過 JNDI provider 訪問存放在基于 LDAP 的目錄服務器中的安全驗證信息

          13 MVC 設計模式

          MVC 模塊

          模型

          代表應用程序狀態和業務邏輯

          視圖

          提供可交互式的客戶界面,向客戶顯示模型數據

          控制器

          響應客戶的請求,根據客戶的請求來操縱模型,并把模型的響應結果經由視圖展現給客戶

          ?

          ?

          JDBC-ODBC 編程的典型步驟

          1 、輸入 java.sql

          在程序的開頭,必須加入下面的代碼:

          Import java.sql.*

          2 、聲明變量

          JDBCDemo.java ,聲明了下面三個變量, stmt 用于 select 語句, pstmt 用于 update 語句, rs 用于 select 的結果集。

          Statement stmt;

          PreparedStatement pstmt;

          ResultSet rs;

          3 、加載 jdbc-odbc 橋驅動程序

          Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

          4 、定義 JDBC URL

          URL 中使用的 JDBCDemo 就是在“控制面板”的“ ODBC 數據源( 32 位)”中設置的 ODBC 數據源 JDBCDemo

          String url=”jdbc:odbc:JDBCDemo”;

          5 、連接數據庫

          Connection con=DriverManager.getConnection(url);

          6 、進行相應的數據操作

          如果需要執行 select 操作,可以使用 Statement 對象或 PreparedStatement 對象,如果需要進行 update 操作,就只能使用 PreparedStatement 對象。

          7 、關閉數據庫連接

          Con.close();

          ?

          源程序: JDBCDemo.java

          /*

          * @(#) JDBCDemo.java

          */

          import java.sql.*;

          ?

          /**

          * 演示 JDBC 操作數據庫的各項功能,包括表的 create drop insert update select

          *@versin 1.00 2004/09/05

          *@author spring

          *since jdk1.3

          */

          ?

          public class JDBCDemo

          {

          ?????? public static void main(String args[])

          ?????? {

          ????????????? try{

          ????????????? Statement stmt;

          ????????????? PreparedStatement pstmt;

          ????????????? ResultSet rs;

          ?????????????

          ????????????? // 加載 jdbc-odbc 橋驅動程序

          ????????????? Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

          ?????????????

          ????????????? // 定義 JDBC URL

          ????????????? String url="jdbc:odbc:JDBCDemo";

          ?????????????

          ????????????? // 得到與數據庫的連接

          ????????????? Connection con=DriverManager.getConnection(url);

          ?????????????

          ????????????? // 顯示 URL 和連接信息

          ????????????? System.out.println("URL:"+url);

          ????????????? System.out.println("Connection:"+con);

          ?????????????

          ????????????? // 得到一個 Statement 對象

          ????????????? stmt=con.createStatement();

          ?????????????

          ????????????? // 如果表 DemoTable 已經存在,則刪除之,否則,拋擲一個異常

          ????????????? System.out.println("If DemoTable Exist,Delete!");

          ????????????? try{

          ????????????? ???? stmt.executeUpdate("DROP TABLE DEMOTable");

          ????????????? ?? }catch(Exception e){

          ????????????? ?? ? System.out.println(e);

          ????????????? ?? ? System.out.println("Not Delete");

          ????????????? }

          ?????????????

          ????????????? // 在數據庫中創建一個表 DemoTable

          ????????????? stmt.executeUpdate("CREATE TABLE DemoTable(id int,val char(15) not null)");

          ????????????? System.out.println("Table DemoTable created!");

          ?????????????

          ????????????? // 在表中插入一些值

          ????????????? stmt.executeUpdate("insert into DemoTable(id,val) values(1,'one')");

          ????????????? stmt.executeUpdate("insert into DemoTable(id,val) values(2,'two')");

          ????????????? stmt.executeUpdate("insert into DemoTable(id,val) values(3,'three')");

          ????????????? stmt.executeUpdate("insert into DemoTable(id,val) values(4,'four')");

          ????????????? stmt.executeUpdate("insert into DemoTable(id,val) values(5,'five')");

          ?????????????

          ????????????? // 得到另一個 Statement 對象

          ????????????? stmt=con.createStatement();

          ?????????????

          ????????????? // 查詢數據庫中的表 DemoTable ,得到以 ID 排序后的所有記錄,并存儲在 RS

          ????????????? rs=stmt.executeQuery("select * from DemoTable order by id");

          ?????????????

          ????????????? // 顯示表 DemoTable 中的所有記錄

          ????????????? System.out.println("Display all results:");

          ????????????? while(rs.next())

          ????????????? {

          ???????????????????? int theInt=rs.getInt("id");

          ???????????????????? String str=rs.getString("val");

          ???????????????????? System.out.println("id=" + theInt + "val=" + str);

          ????????????? }

          ?????? ??????

          ?????????????

          ????????????? // 創建已準備好的語句,更新 DemoTable 表中某條記錄 val 字段

          ????????????? // 已準備好的語句接受兩個參數

          ?????????????

          ????????????? /**********************

          ????????????? pstmt=con.preparedStatement("update DemoTable set val=? where id=?");

          ?????????????

          ????????????? // 更改表 DemoTable 中的第 2 條記錄的 val 字段的值

          ????????????? // 填充 update 語句中的 "?", 并執行 update 語句

          ????????????? pstmt.setString(1,"Hello!");

          ????????????? pstmt.setInt(2,2);

          ????????????? pstmt.executeUpdate();

          ????????????? System.out.println("Update row number 2:ok.");

          ?????????????

          ?????????????

          ????????????? // 顯示表 DemoTable 中更新后的第 2 條記錄

          ????????????? stmt=con.createStatement();

          ????????????? rs=stmt.executeQuery("select * from DemoTable order by id");

          ????????????? System.out.println("Display row 2:");

          ????????????? if(rs.next() && rs.next())

          ????????????? {

          ???????????????????? int theInt=rs.getInt("id");

          ???????????????????? String str=rs.getString("val");

          ???????????????????? System.out.println("id=" + theInt + "val=" + str);

          ????????????? }

          ?????????????

          ????????????? ***************/

          ?????????????

          ?????????????

          ????????????? // 關閉與數據庫的連接

          ????????????? con.close();

          ?????? }catch(Exception e){?? // 異常處理

          ?????? e.printStackTrace();

          }

          }

          }

          ?

          JSP 的中文環境

          常見的處理 JSP 的中文的方法有兩種:

          <%@ page contentType=”text/html;charset=gb2312”%>

          <%

          String Hi=” 您好 ”;

          byte[] tmpbyte=Hi.getBytes(“ISO8859_1”);

          Hi=new String(tmpbyte);

          Out.print(Hi);

          %>

          通過簡單總結,中文處理發生于以下幾個地方:

          1 )在 url 附帶中文參數,可以直接讀取。

          例如: <%=request.getParameter(“showword”)%>

          (2) 與數據庫有關的各種 sql 操作,使用 Access 沒有發生問題。

          ?

          1 JSP 基本語法

          1.1 JSP 語句類型

          JSP 語句主要有以下五種類型:

          編譯器指令 <%@ 指令 %>

          聲明 <%! 預定義內容 %>

          表達式 <%= 表達式 %>

          腳本 Scriptlet<% 代碼 %>

          注解 <%-- 注釋內容 --%>

          示例:

          <%@ page language=”java”%>

          <html>

          <head>

          <title>Hello,JSP</title>

          </head>

          <body bgcolor=red>

          <%! String strHello=”How are you”;%>

          <h1><%=strHello%></h1>

          <%

          out.println(“This is a sample”);

          %>

          <%--This is a sample of jsp--%>

          </body>

          </html>

          1.2 指令語法

          1.2.1 include 指令

          JSP 中包含一個靜態的文件,同時解析這個文件中的 JSP 語句。

          語法: <%@ include file=”relativeURL”%>

          屬性: #file=”relativeURL”

          1.2.2 Page 指令

          定義 JSP 文件中的全局屬性

          語法:

          <%@ page

          [language=”java”]

          [extends=”package.class”]

          [import=”{package.class|package.*},….]

          [session=”true|false”]

          [buffer=”none|8kb|sizekb”]

          [autoFlush=”true|false”]

          [isThreadSafe=”true|false”]

          [info=”text”]

          [errorPage=”relativeURL”]

          [contentType=”mimeType[;charset=characterSet]”|”text/html;charset=ISO-8859-1”]

          [isErrorPage=”true|false”]

          %>

          示例:

          <%@ page import=”java.util.*,java.lang.*”%>

          <%@ page buffer=”5kb” autoFlush=”false”%>

          <%@ page errorPage=”error.jsp”%>

          1.2.3 聲明

          JSP 程序中聲明合法的變量和方法

          語法:

          <%! declaration;[daclaration;]+…%>

          示例:

          <%! int=0;%>

          <%! int a,b,c;%>

          <%! Circle a=new Circle(2,0);%>

          1.2.4 表達式

          包含一個有效的程序段

          語法:

          <% code fragment%>

          1.3 動作語法( Action

          JSP 動作語法應用 XML 語法結構來控制 Servlet 引擎的行為,你可以動態地插入文件、重用 Java Beans 控件、導向另一個頁面或產生 Java Html 插件。可用的動作有:

          jsp:include :在頁面得到請求時包含一個文件;

          jsp:useBean :使用 JavaBean 控件;

          jsp:setProperty :設置 JavaBean 的屬性;

          jsp:getProperty :將 JavaBean 的屬性插入到輸出中;

          jsp:forward :引導請求者進入新的頁面

          jsp:plugin

          1.3.1 jsp:include 動作

          這個動作讓你在頁面生成時插入文件。

          語法:

          <jsp:include page=”relativeURL” flush=”true”/>

          1.3.2 jsp:useBean 動作

          這個動作讓你裝入這個 JSP 頁中要用到的 JavaBean ,它讓你能夠充分應用 java 的重用性。

          語法:

          <jsp:useBean id=”name” class=”package.class”/>

          1.3.3 jsp:setProperty 動作

          jsp:setProperty 設置所要應用的 Bean 的屬性值,你可以在兩種情況下應用此動作。

          1 、用在 jsp:useBean 之后,表示如下:

          <jsp:useBean id=”myName”…/>

          <jsp:setProperty name=”myName” property=someProperty”…/>

          在這種情況下,此 jsp:setProperty 動作不管是新的例示還是原有的 Bean 對象,都會執行。

          2 、用在 jsp:useBean 實體之內,表示如下:

          <jsp:useBean id=”myName”…>

          <jsp:setProperty name=”myName” property=”someProperty”…/>

          </jsp:useBean>

          ?

          ?

          JDBC API 最重要的接口是:

          * java.sql.DriverManager 處理驅動的調入并且對產生新的數據庫連接提供支持。

          * java.sql.Connection 代表對特定數據庫的連接。

          * java.sql.Statement  代表一個特定的容器,來對一個特定的數據庫執行 SQL 語句。

          * java.sql.ResultSet  控制對一個特定語句的行數據的存取。

          其中 java.sql.Statement 又有兩個子類型:

          1. java.sql.PreparedStatement  用于執行預編譯的 SQL 語句。

          2. java.sql.CallableStatement  用于執行對一個數據庫內嵌過程的調用。

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?



          |----------------------------------------------------------------------------------------|
                                     版權聲明  版權所有 @zhyiwww
                      引用請注明來源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2006-05-10 11:04 zhyiwww 閱讀(1522) 評論(3)  編輯  收藏 所屬分類: j2ee

          FeedBack:
          # re: JSP資料整理--培訓資料
          2006-10-31 11:09 | inlife.cn
          頂一個。好詳細啊。  回復  更多評論
            
          # re: JSP資料整理--培訓資料
          2006-12-09 00:56 | batxut
          強,值得收藏,在我的Blog作個鏈接到這里ミ^ō^ミ  回復  更多評論
            
          # re: JSP資料整理--培訓資料
          2006-12-09 00:58 | batxut
          oh,my god!我的主頁Blog填寫錯了,再提交一個!!  回復  更多評論
            
          主站蜘蛛池模板: 凤冈县| 汶川县| 房山区| 金昌市| 密云县| 陇南市| 隆安县| 贡山| 定陶县| 修文县| 樟树市| 上林县| 宣威市| 辽中县| 宁津县| 荥阳市| 岳西县| 大洼县| 湖口县| 宁阳县| 安义县| 阜新市| 鸡泽县| 大化| 马山县| 洮南市| 安多县| 石棉县| 肥东县| 枣强县| 海口市| 平顺县| 遵义市| 九龙城区| 荣昌县| 花莲市| 绩溪县| 淅川县| 盐亭县| 刚察县| 手机|