1
、
Tomcat
的目錄結(jié)構(gòu)
目錄
|
描述
|
/bin
|
存放
Windows
平臺(tái)及
Linux
平臺(tái)啟動(dòng)和關(guān)閉
Tomcat
的腳本文件
|
/conf
|
存放
Tomcat
服務(wù)器的各種配置文件,其中最重要的配置文件是
server.xml
|
/server
|
包括
3
個(gè)子目錄:
Class
、
Lib
、
Webapps
|
/server/lib
|
存放
Tomcat
服務(wù)器所需的各種
JAR
文件
(
只有
Tomcat
可以訪問
)
|
/server/webapps
|
存放
Tomcat
自帶的兩個(gè)
Web
應(yīng)用:
admin
和
manager
|
/common/lib
|
存放
Tomcat
服務(wù)器以及所有
Web
應(yīng)用都可以訪問的
JAR
文件
|
/share/lib
|
存放所有
web
應(yīng)用都可以訪問的
JAR
文件
(Tomcat
不能訪問
)
|
/logs
|
存放
Tomcat
的日志文件
|
/webapps
|
當(dāng)發(fā)布
web
應(yīng)用時(shí),默認(rèn)情況下把
web
應(yīng)用文件放于此目錄下
|
/work
|
Tomcat
把
JSP
生成的
Servlet
放于此目錄下
|
注:
lib
目錄下都只能接受
JAR
文件,如果類壓縮文件為
ZIP
文件,應(yīng)該將它展開,重新打包為
JAR
文件再拷貝到
lib
目錄下。
2
、把開放目錄結(jié)構(gòu)的
Web
應(yīng)用打包成
war
文件的方法
(
1
)進(jìn)入
helloapp
應(yīng)用的根目錄
<CATALINA_HOME>/webapps/helloapp
;
(
2
)把整個(gè)
web
應(yīng)用打包為
helloapp.war
文件,命令如下:
jar cvf helloapp.war *.*
;(展開:
jar xvf helloapp.war
);
3
、
Servlet
的功能
(
1
)創(chuàng)建并返回基于客戶請(qǐng)求的動(dòng)態(tài)
html
頁面
(
2
)創(chuàng)建可嵌入到現(xiàn)有
html
頁面中的部分
html
頁面(
html
片段)
(
3
)與其他服務(wù)器資源(如數(shù)據(jù)庫或基于
Java
的應(yīng)用程序)進(jìn)行通訊
(
4
)接收多個(gè)客戶機(jī)的輸入,并將結(jié)果廣播到多個(gè)客戶機(jī)上
(
5
)根據(jù)客戶請(qǐng)求采用特定的
MIME(Multipurpose Internet Mail Extensions)
類型對(duì)數(shù)據(jù)過濾,例如進(jìn)行圖象格式轉(zhuǎn)換
4
、
Servlet API
類框圖
Servlet
的框圖是由兩個(gè)
Java
包組成的:
javax.servlet
和
javax.servlet.http
。在
javax.servlet
包中定義了所有的
Servlet
類都必須實(shí)現(xiàn)或擴(kuò)展的通用接口和類。在
javax.servlet.http
包中定義了采用
http
協(xié)議通信的
HttpServlet
類。
?
5
、
Tomcat
服務(wù)器初次執(zhí)行
JSP
的過程
?
由
JSP
生成的
Servlet
類實(shí)現(xiàn)了
javax.servlet.jsp.JspPage
接口,該接口擴(kuò)展了
javax.servlet.Servlet
接口。在
javax.servlet.JspPage
接口中定義了代表
JSP
生命周期的方法
JspInit()
和
JspDestory()
,類似
Servlet
的
Init()
和
Destory()
方法。
6
、
JSP
指令:
page
、
include
、
taglib
page
指令:
可以指定所使用的腳本語言、
JSP
代表的
Servlet
實(shí)現(xiàn)的接口、
Servlet
擴(kuò)展的類以及導(dǎo)入的軟件包。語法:
<%@ page
屬性
1=”
值
1”
屬性
2=”
值
2” %>
page
指令屬性表:
屬
性
|
描
?
述
|
舉
例
|
language
|
指定文件所用的腳本語言。目前僅
java
為有效值和默認(rèn)值。該指令作用于整個(gè)文檔。當(dāng)多次使用這一指令時(shí),只有第一次有效。
|
<%@ page language=”java”? %>
|
method
|
指定
Java
程序片段(
Scriptlet
)所屬的方法的名稱。
Java
程序片段會(huì)成為指定方法的主體。默認(rèn)的方法是
service
方法。當(dāng)多次使用該指令時(shí),只有第一次是有效的。該屬性的有效值包括
Service
、
doGet
、
doPost
等。
|
<%@ page method=”doPost”? %>
|
import
|
指定導(dǎo)入的
Java
軟件包名或類名列表,該列表用逗號(hào)分隔。在
JSP
文件中,可以多次使用該指令來導(dǎo)入不同的軟件包
|
<%@ page import=”java.io.*,jav
a.util.Hashtable”? %>
|
content_type
|
指定響應(yīng)結(jié)果的
MIME
類型。默認(rèn)的
MIME
類型是
text/html
,默認(rèn)字符編碼為
ISO-8859-1
。當(dāng)多次使用該指令時(shí),只有第一次使用是有效的
|
<%@ page content_type=”text/html;
charset=GB2312” %>
|
session=”true/false”
|
指定
JSP
頁面是否使用
Session
,默認(rèn)為
true
|
<%@ page session=”true” %>
|
errorPage=”error_url
|
當(dāng)發(fā)生異常時(shí),客戶請(qǐng)求重新定向到哪個(gè)網(wǎng)頁
|
<%@ page errorPage=
”errorpage.jsp” %>
|
isErrorPage=”T/F”
|
表示此
JSP
網(wǎng)頁是否為處理異常的網(wǎng)頁
|
<%@ page isErrorPage=”true” %>
|
include
指令:
JSP
可以通過
include
指令來包含其它文件。被包含的文件可以是
JSP
文件、
HTML
文件或文本文件。如果被包含的是
JSP
文件,那么被包含的
JSP
文件中的
Java
程序片段也會(huì)被執(zhí)行。
include
指令的語法為:
<%@ include file=”relativeURL” %>
?
7
、
JSP
隱含對(duì)象
在編寫
JSP
程序時(shí),可以直接使用
Servlet/JSP
容器提供的隱含對(duì)象。使用這些對(duì)象的引用變量時(shí)不需要任何變量聲明。
JSP
中的隱含對(duì)象列表:
隱含對(duì)象
|
類
???
型
|
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(
相當(dāng)于
Java
中的
this
關(guān)鍵字
)
|
session
|
javax.servlet.http.HttpSession
|
exception
|
java.lang.Exception
|
8
、裝載并注冊(cè)數(shù)據(jù)庫驅(qū)動(dòng)程序
//
裝載
JdbcOdbcDriver class
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
//
裝載并注冊(cè)
SQLServer Driver
Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);
java.sql.DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());
//
裝載并注冊(cè)
OracleDriver
Class.forName(“oracle.jdbc.driver.OracleDriver”);
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//
裝載并注冊(cè)
MySQLDriver
Class.forName(“com.mysql.jdbc.Driver”);
java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());//
不是必要步驟
?
常用的數(shù)據(jù)庫的
JDBCURL
形式
◆如果通過JDBC-ODBC Driver連接數(shù)據(jù)庫,形式如下:
jdbc:odbc:datasource
◆對(duì)于Oracle數(shù)據(jù)庫連接,形式如下:
jdbc:oracle:thin:@localhost:1521:sid
◆對(duì)于SQL Server數(shù)據(jù)庫連接,形式如下:
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=BookDB
◆對(duì)于MySQL數(shù)據(jù)庫連接,形式如下:
jdbc:mysql://localhost:3306/BookDB
中文編碼轉(zhuǎn)換問題
:
String dbUrl=”jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=GB2312”
9
、
HttpSession
接口
方
?
法
|
描
?
述
|
getId()
|
返回
session
的
ID
|
invalidate()
|
使當(dāng)前的
session
失效,
servlet
釋放其占用的資源
|
setAttriibute(String name,Object object)
|
將一對(duì)
name/value
屬性保存在
HttpSession
對(duì)象中
|
getAttribute(String name)
|
根據(jù)
name
參數(shù)返回保存在
HttpSession
對(duì)象中的屬性名
|
getAttributeNames()
|
以數(shù)組的方式返回
HttpSession
對(duì)象中所有的屬性名
|
isNew
|
判斷是否是新建的
session
|
setMaxInactiveinterval()
|
設(shè)定一個(gè)
session
可以處于不活動(dòng)狀態(tài)的最大時(shí)間間隔,以秒為單位
|
getMaxInactiveinterval()
|
得到
session
的最大時(shí)間間隔
|
10
、一個(gè)標(biāo)準(zhǔn)的
JavaBean
的特征
(
1
)
JavaBean
是一個(gè)公共的
(public)
類;
(
2
)
JavaBean
有一個(gè)不帶參數(shù)的構(gòu)造方法;
(
3
)
JavaBean
通過
setXXX
方法設(shè)置屬性,通過
getXXX
方法獲取屬性。
11
、
JSP
訪問
JavaBean
的語法
可以通過程序代碼來訪問
JavaBean
,也可以用特定的
JSP
標(biāo)簽來訪問
JavaBean
(1)
導(dǎo)入
JavaBean
類
如:
<%@ page import=”mypack..CounterBean” %>
(2)
聲明
JavaBean
對(duì)象
<jsp:useBean id=”myBean” class=”mypack.CounterBean” scope=”session”/>
注:
scope
可選值包括
page
、
request
、
session
、
application
,默認(rèn)為
page
。
(3)
訪問
JavaBean
屬性
JSP
提供了訪問
JavaBean
屬性的標(biāo)簽,如果要將
JavaBean
的某個(gè)屬性輸出到網(wǎng)頁上,可以用
<jsp:getProperty>
標(biāo)簽,如:
<jsp:getProperty name=”myBean” property=”count”/>
如果要給
JavaBean
的某個(gè)屬性賦值,可以用
<jsp:setProperty>
標(biāo)簽,如:
<jsp:setProperty name=”myBean” property=”count” value=”0”/>
12
、
Tomcat
安全域的類型
類
型
|
類
名
|
描
?
述
|
內(nèi)存域
|
MemoryRealm
|
在初始化階段,從
XML
文件中讀取安全驗(yàn)證信息,并把它們以一組對(duì)象的形式存放在內(nèi)存中
|
JDBC
域
|
JDBCRealm
|
通過
JDBC
驅(qū)動(dòng)程序訪問存放在數(shù)據(jù)庫中的安全驗(yàn)證信息
|
數(shù)據(jù)源域
|
DataSourceRealm
|
通過
JNDI
數(shù)據(jù)源訪問存放在數(shù)據(jù)庫中的安全驗(yàn)證信息
|
JNDI
域
|
JNDIRealm
|
通過
JNDI provider
訪問存放在基于
LDAP
的目錄服務(wù)器中的安全驗(yàn)證信息
|
13
、
MVC
設(shè)計(jì)模式
MVC
模塊
|
描
述
|
模型
|
代表應(yīng)用程序狀態(tài)和業(yè)務(wù)邏輯
|
視圖
|
提供可交互式的客戶界面,向客戶顯示模型數(shù)據(jù)
|
控制器
|
響應(yīng)客戶的請(qǐng)求,根據(jù)客戶的請(qǐng)求來操縱模型,并把模型的響應(yīng)結(jié)果經(jīng)由視圖展現(xiàn)給客戶
|
?
?
JDBC-ODBC
編程的典型步驟
1
、輸入
java.sql
包
在程序的開頭,必須加入下面的代碼:
Import java.sql.*
2
、聲明變量
在
JDBCDemo.java
,聲明了下面三個(gè)變量,
stmt
用于
select
語句,
pstmt
用于
update
語句,
rs
用于
select
的結(jié)果集。
Statement stmt;
PreparedStatement pstmt;
ResultSet rs;
3
、加載
jdbc-odbc
橋驅(qū)動(dòng)程序
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
4
、定義
JDBC URL
URL
中使用的
JDBCDemo
就是在“控制面板”的“
ODBC
數(shù)據(jù)源(
32
位)”中設(shè)置的
ODBC
數(shù)據(jù)源
JDBCDemo
。
String url=”jdbc:odbc:JDBCDemo”;
5
、連接數(shù)據(jù)庫
Connection con=DriverManager.getConnection(url);
6
、進(jìn)行相應(yīng)的數(shù)據(jù)操作
如果需要執(zhí)行
select
操作,可以使用
Statement
對(duì)象或
PreparedStatement
對(duì)象,如果需要進(jìn)行
update
操作,就只能使用
PreparedStatement
對(duì)象。
7
、關(guān)閉數(shù)據(jù)庫連接
Con.close();
?
源程序:
JDBCDemo.java
/*
* @(#) JDBCDemo.java
*/
import java.sql.*;
?
/**
*
演示
JDBC
操作數(shù)據(jù)庫的各項(xiàng)功能,包括表的
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
橋驅(qū)動(dòng)程序
????????????? Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
?????????????
????????????? //
定義
JDBC URL
????????????? String url="jdbc:odbc:JDBCDemo";
?????????????
????????????? //
得到與數(shù)據(jù)庫的連接
????????????? Connection con=DriverManager.getConnection(url);
?????????????
????????????? //
顯示
URL
和連接信息
????????????? System.out.println("URL:"+url);
????????????? System.out.println("Connection:"+con);
?????????????
????????????? //
得到一個(gè)
Statement
對(duì)象
????????????? stmt=con.createStatement();
?????????????
????????????? //
如果表
DemoTable
已經(jīng)存在,則刪除之,否則,拋擲一個(gè)異常
????????????? 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");
????????????? }
?????????????
????????????? //
在數(shù)據(jù)庫中創(chuàng)建一個(gè)表
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')");
?????????????
????????????? //
得到另一個(gè)
Statement
對(duì)象
????????????? stmt=con.createStatement();
?????????????
????????????? //
查詢數(shù)據(jù)庫中的表
DemoTable
,得到以
ID
排序后的所有記錄,并存儲(chǔ)在
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);
????????????? }
??????
??????
?????????????
????????????? //
創(chuàng)建已準(zhǔn)備好的語句,更新
DemoTable
表中某條記錄
val
字段
????????????? //
已準(zhǔn)備好的語句接受兩個(gè)參數(shù)
?????????????
????????????? /**********************
????????????? pstmt=con.preparedStatement("update DemoTable set val=? where id=?");
?????????????
????????????? //
更改表
DemoTable
中的第
2
條記錄的
val
字段的值
????????????? //
填充
update
語句中的
"?",
并執(zhí)行
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);
????????????? }
?????????????
????????????? ***************/
?????????????
?????????????
????????????? //
關(guān)閉與數(shù)據(jù)庫的連接
????????????? con.close();
?????? }catch(Exception e){?? //
異常處理
?????? e.printStackTrace();
}
}
}
|
?
JSP
的中文環(huán)境
常見的處理
JSP
的中文的方法有兩種:
<%@ page contentType=”text/html;charset=gb2312”%>
<%
String Hi=”
您好
”;
byte[] tmpbyte=Hi.getBytes(“ISO8859_1”);
Hi=new String(tmpbyte);
Out.print(Hi);
%>
通過簡(jiǎn)單總結(jié),中文處理發(fā)生于以下幾個(gè)地方:
(
1
)在
url
附帶中文參數(shù),可以直接讀取。
例如:
<%=request.getParameter(“showword”)%>
(2)
與數(shù)據(jù)庫有關(guān)的各種
sql
操作,使用
Access
沒有發(fā)生問題。
?
1 JSP
基本語法
1.1 JSP
語句類型
JSP
語句主要有以下五種類型:
編譯器指令
<%@
指令
%>
聲明
<%!
預(yù)定義內(nèi)容
%>
表達(dá)式
<%=
表達(dá)式
%>
腳本
Scriptlet<%
代碼
%>
注解
<%--
注釋內(nèi)容
--%>
示例:
<%@ 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
中包含一個(gè)靜態(tài)的文件,同時(shí)解析這個(gè)文件中的
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
表達(dá)式
包含一個(gè)有效的程序段
語法:
<% code fragment%>
1.3
動(dòng)作語法(
Action
)
JSP
動(dòng)作語法應(yīng)用
XML
語法結(jié)構(gòu)來控制
Servlet
引擎的行為,你可以動(dòng)態(tài)地插入文件、重用
Java Beans
控件、導(dǎo)向另一個(gè)頁面或產(chǎn)生
Java Html
插件。可用的動(dòng)作有:
jsp:include
:在頁面得到請(qǐng)求時(shí)包含一個(gè)文件;
jsp:useBean
:使用
JavaBean
控件;
jsp:setProperty
:設(shè)置
JavaBean
的屬性;
jsp:getProperty
:將
JavaBean
的屬性插入到輸出中;
jsp:forward
:引導(dǎo)請(qǐng)求者進(jìn)入新的頁面
jsp:plugin
1.3.1 jsp:include
動(dòng)作
這個(gè)動(dòng)作讓你在頁面生成時(shí)插入文件。
語法:
<jsp:include page=”relativeURL” flush=”true”/>
1.3.2 jsp:useBean
動(dòng)作
這個(gè)動(dòng)作讓你裝入這個(gè)
JSP
頁中要用到的
JavaBean
,它讓你能夠充分應(yīng)用
java
的重用性。
語法:
<jsp:useBean id=”name” class=”package.class”/>
1.3.3 jsp:setProperty
動(dòng)作
jsp:setProperty
設(shè)置所要應(yīng)用的
Bean
的屬性值,你可以在兩種情況下應(yīng)用此動(dòng)作。
1
、用在
jsp:useBean
之后,表示如下:
<jsp:useBean id=”myName”…/>
…
<jsp:setProperty name=”myName” property=someProperty”…/>
在這種情況下,此
jsp:setProperty
動(dòng)作不管是新的例示還是原有的
Bean
對(duì)象,都會(huì)執(zhí)行。
2
、用在
jsp:useBean
實(shí)體之內(nèi),表示如下:
<jsp:useBean id=”myName”…>
…
<jsp:setProperty name=”myName” property=”someProperty”…/>
</jsp:useBean>
?
?
JDBC API
最重要的接口是:
* java.sql.DriverManager
處理驅(qū)動(dòng)的調(diào)入并且對(duì)產(chǎn)生新的數(shù)據(jù)庫連接提供支持。
* java.sql.Connection
代表對(duì)特定數(shù)據(jù)庫的連接。
* java.sql.Statement
代表一個(gè)特定的容器,來對(duì)一個(gè)特定的數(shù)據(jù)庫執(zhí)行
SQL
語句。
* java.sql.ResultSet
控制對(duì)一個(gè)特定語句的行數(shù)據(jù)的存取。
其中
java.sql.Statement
又有兩個(gè)子類型:
1. java.sql.PreparedStatement
用于執(zhí)行預(yù)編譯的
SQL
語句。
2. java.sql.CallableStatement
用于執(zhí)行對(duì)一個(gè)數(shù)據(jù)庫內(nèi)嵌過程的調(diào)用。
?
?
?
?
?
?
?
?
|----------------------------------------------------------------------------------------|
版權(quán)聲明 版權(quán)所有 @zhyiwww
引用請(qǐng)注明來源 http://www.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2006-05-10 11:04
zhyiwww 閱讀(1519)
評(píng)論(3) 編輯 收藏 所屬分類:
j2ee