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.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2006-05-10 11:04 zhyiwww 阅读(1592) 评论(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填写错了,再提交一个!!  回复  更多评论