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 插件??捎玫膭幼饔校?/span>

          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填寫錯了,再提交一個?。?nbsp; 回復  更多評論
            
          主站蜘蛛池模板: 盘锦市| 泰安市| 绍兴县| 黄梅县| 迁安市| 荆州市| 广安市| 聂荣县| 开江县| 武宣县| 神木县| 新巴尔虎左旗| 广州市| 镇原县| 云南省| 那曲县| 沙河市| 嘉峪关市| 新乐市| 依安县| 巴林左旗| 东城区| 霍林郭勒市| 大安市| 栖霞市| 黔江区| 乡宁县| 南华县| 三亚市| 郯城县| 扶余县| 鲁甸县| 滨海县| 浪卡子县| 叙永县| 堆龙德庆县| 通化县| 康定县| 武乡县| 微山县| 武平县|