posts - 189,comments - 115,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  用于执行对一个数据库内嵌过程的调用。

 

 

 

 

 

 

posted on 2006-07-23 10:50 MEYE 阅读(497) 评论(0)  编辑  收藏 所属分类: JAVA

只有注册用户登录后才能发表评论。


网站导航: