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
類。
?
5
、
Tomcat
服務器初次執行
JSP
的過程
?
由 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
|----------------------------------------------------------------------------------------|