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 插件。可用的动作有:
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
|----------------------------------------------------------------------------------------|