JSP 讲义 <ul><li>JSP 技术概述 </li></ul><ul><li>JSP 的运行环境 </li></ul><ul><li>JSP 的核心技术 </li></ul><ul><li>JSP 的组件技术 </li></ul><ul>...
<ul><li>为何要学习 Jsp </li></ul><ul><li>JSP 的工作 原理   </li></ul><ul><li>JSP 的页面 形态   </li></ul><ul><li>学好 JSP 的综合 要素 </li></ul>...
Jsp 技术 概述 : 网页技术的演变 <ul><li>网页技术经历的四个阶段 </li></ul><ul><li>Html - >CGI - >PHP 、 ASP - >JSP </li></ul><ul><ul><li>静态网页和 动态 网...
动态网页技术 <ul><li>HTML 只有静态页面显示功能 </li></ul><ul><li>CGI (公共网关接口)早期的动态网页技术 </li></ul><ul><ul><li>实现 web 应用程序由静态到动态的变革   </li><...
动态网页技术 <ul><li>PHP </li></ul><ul><ul><li>简单易学 , 可跨平台 , 安全性好 </li></ul></ul><ul><ul><li>安装复杂 , 没有组件支持 , 缺少配套软件 </li></ul></...
Jsp 技术 概述 : 动态网页技术的比较 较差 较好 好 扩展性 Windows 和  unix windows 绝大部分 运行平台 简单 简单 容易掌握 难易程度 较大 较大 较小 运行耗损 较快 较快 快 运行速度 php asp jsp
动态网页技术的比较 较广 较广 较广 应用程度 不支持 支持 支持 对组件的支持 支持 不支持 支持 对 xml 的支持 较多 较少 多 厂商支持 多 多 多 数据库支持 多 较少 多 函数支持 好 较差 好 安全性 php asp jsp
Jsp 技术 概述 : Jsp 特点 <ul><li>可将页面的显示和页面的逻辑相分离 </li></ul><ul><ul><li>用 Html 或 xml 标识设计页面 </li></ul></ul><ul><ul><li>用  jsp 标识...
JSP 特点 <ul><li>支持绝大部分平台 (可跨平台操作) </li></ul><ul><ul><li>JSP 独特的运行方式决定 </li></ul></ul><ul><ul><li>编译后生成的不是特定机器的可执行码,而是独立于处理器...
Jsp 技术 概述 :为何使用 Jsp 小结 <ul><li>随着 internet 的发展,动态 Web 页面被广泛使用 </li></ul><ul><li>Jsp 是由 servlet 发展起来的,所以具有 servlet 所具有的强大功能...
JSP 的工作原理 <ul><li>执行 HTML 页面请求,输入 URL 地址 ( http://www.netmen9.com/index.html )  </li></ul>客户端 (IE) Web 服务器 http 请求 http 响应...
JSP 的工作原理 <ul><li>HTML 工作原理 </li></ul><ul><li>http://www.netmen9.com/index.html </li></ul><ul><li>客户通过 web 浏览器向 web 服务器发送一...
JSP 工作原理图 <ul><li>执行 JSP 页面请求 ,  输入 URL 地址 http://www.netmen9.com/index.jsp </li></ul>
Jsp 技术 概述 :   JSP 的工作原理 <ul><li>JSP 工作原理 http://www.netmen9.com/index.jsp </li></ul><ul><li>客户端通过 web 浏览器向 web 服务器发送一个 Htt...
Jsp 技术 概述 :   JSP 的页面形态 <ul><li>它的页面结构很类似于 Microsoft 公司推出的 ASP 。 传统的 HTML 文件中加入 JAVA 代码片断, JAVA 代码内嵌在 “ <% %>” 标记符中 </li><...
<ul><li><% @ page language=“java” %> </li></ul><ul><li><html> </li></ul><ul><li><head> </li></ul><ul><li><title> 标题 </titl...
JSP 的页面形态及位置 <ul><li><%@ page language=java %> </li></ul><ul><li><html> </li></ul><ul><li><head> </li></ul><ul><li><title>...
Jsp 技术 概述 : 学好 JSP 的综合要素 <ul><li>掌握 HTML 语言 : 可轻松建立 JSP 的表示页面。 </li></ul><ul><li>熟悉 Java 语言 : 特别是正确使用 Java 的类、接口和方法,可简单实现应...
学好 JSP 的综合要素 <ul><li>掌握 taglib 标签技术 </li></ul><ul><li>了解 MVC 设计模式 </li></ul><ul><li>掌握 Struts 框架技术 </li></ul><ul><li>掌握 JB...
JSP 的运行环境 <ul><li>JAVA 运行环境如:包含 JAVA 编译器、 JAVA 虚拟机、 JDBC-ODBC 桥、 Java 类库等。 </li></ul><ul><li>jdk1.4.1 </li></ul><ul><li>JS...
运行 Web 应用程序要点 <ul><li>设置环境 变量 : 为了能在任何目录下被访问。 </li></ul><ul><li>协议必须是 Http 协议: 因为它是 web 服务器支持的协议。 </li></ul><ul><li>缺省端口号 ...
设置运行 JSP 的环境变量 <ul><li>开始-设置-控制面板-系统-高级-环境变量 </li></ul><ul><li>JAVA_HOME: 表示 java 安装的目录 ( 新建或添加 ) </li></ul><ul><li>CLASSP...
Jsp 在 tomcat 上的运行环境 Jakarta-tomcat5.0.27 conf 目录下 web.xml ( 系统配置文件 ) Jakarta-tomcat5.0.27 conf 目录下 server.xml ( 系统配置文件 ) h...
Jakarta-tomcat5.0.27 webappsROOT 的子目录下 应用程序 .jsp.js .css.html 等程序 Jakarta-tomcat5.0.27 webappsROOTWEB-INF classes 的子目录 ( 包...
开发第一个 jsp 程序 <ul><li><html> </li></ul><ul><li><head> </li></ul><ul><li><title> 第一个 JSP 程序 </title> </li></ul><ul><li></hea...
开发第一个 jsp 程序 <ul><li><% ! String Greeting;%> </li></ul><ul><li><%Greeting=&quot;Hello World !!&quot; ; %> </li></ul><ul><l...
开发第一个 jsp 程序 <ul><li><!— 注释 --> </li></ul><ul><li><!-- Today is <%= new java.util.Date().toLocaleString() %> --> </li></ul...
Jsp 核心技术 <ul><li>Jsp 脚本元素及实例 </li></ul><ul><li>Jsp 指令元素及实例 </li></ul><ul><li>Jsp 动作元素及实例 </li></ul><ul><li>Jsp 内置对象及实例 </l...
事件举例 <ul><li>Submit 提交按钮激活 onsubmit() 事件 </li></ul><ul><li>Button 按钮激活 onclick() 事件 </li></ul><ul><li><form action=&quot;U...
Jsp 核心 技术 :   Jsp 脚本元素及实例 <ul><li>“ 通常的 HTML”+“ <% 程序段 %>”==“JSP” </li></ul><ul><li>扩展名为 .jsp </li></ul><ul><li>JSP 有下面所示的...
Jsp 核心 技术 :  注释 :<%--  注解语 --%> 写在 JSP 程序中,但不会显示在客户的 HTML 源代码中  <%-- comment --%> <%   //  单行注释 /** */  多行注释  %>  隐 藏 注 释 ...
Jsp 核心 技术 :   注释实例 <ul><li>实例 </li></ul><ul><li><!-- 此页面 <%=new java.util.Date()% > 被读取 --> </li></ul><ul><li><!-- Today i...
Jsp 核心 技术 :   声明: <%!  声明  %> <ul><li>声明你将要在 JSP 中用到的类、变量、方法等如下面所示: </li></ul><ul><li><!-- 声明的同时可赋初值 --> </li></ul><ul><li...
Jsp 核心 技术 :  表达式 :<%=  表达式  %> <ul><li>JSP  表达式是一个值, 在运行后被自动转化为字符串 ,然后插入到这个表达式在 JSP 程序中所在的位置中。因这个表达式的值已被转化为字符串,所以 有输出显示 在屏...
Jsp 核心 技术 :  程序段 :<%  代码片段  %> <ul><li><!-- 使用表达式和代码片段,从大到小显示字符串“ Hello”-->  </li></ul><ul><li><h2> 嵌入 JSP 脚本 </h2> </li><...
Jsp 核心 技术 :  程序段 : <%  代码片段 %> <ul><li><!-- 使用表达式和代码片段,从小到大显示字符串“ Hello”-->   </li></ul><ul><li><%  for(int i=6;i>0;i--) <...
Jsp 核心 技术 :  Jsp 指令元素及实例 <ul><li>页面 page 指令 : 定义 JSP 文件的全局属性 </li></ul><ul><li>Include 指令 : 它的执行结果就是将它包含的文件插入到 JSP 文件中放置 i...
Jsp 核心 技术 :  页面 page 指令的属性 language=&quot;java&quot; extends=&quot;package.class&quot; import =&quot;{package.class | pack...
Jsp 核心 技术 :  页面 page 指令的实例 <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; import=“java.util.*,java.sql...
Jsp 核心 技术 :  include 指令实例 <ul><li>格式 <%@ include file= &quot; filename&quot; %>  </li></ul><ul><li>Include 指令的使用 </li></ul...
Jsp 核心 技术 :  include 指令分区实例 尾部 :footer.jsp  版本声明等 页面主体 :body.jsp 功能区 side.jsp 菜单 LOGO  头部 :header.jsp
Jsp 核心 技术 :  Jsp 动作元素及实例 <ul><li><jsp:param> 可传递一个或多个参数 , 一般和其它动作 include 或 forward 共用 </li></ul><ul><li><jsp:include> </l...
Jsp 核心 技术 :  include 动作实例 <ul><li><jsp:include page=&quot;login.jsp&quot; flush=&quot;true&quot;  />  </li></ul><ul><li><j...
Jsp 核心 技术 :  forward 动作实例 <ul><li>作用 : 把当前页面重定向到另一个页面上 </li></ul><ul><li><jsp:forward page=&quot;http://www.sina.com.cn &q...
Include 动作实例( static.html ) <ul><li><html> </li></ul><ul><li><body> </li></ul><ul><li><form method=post action=&quot;jsp_i...
two.jsp <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; language=&quot;java&quot; %> </li></ul><ul><li>...
Jsp_include.jsp <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; language=&quot;java&quot; %> </li></ul>...
forward 动作实例 (login.jsp) <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; %> </li></ul><ul><li><html><bo...
checklogin.jsp <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; %> </li></ul><ul><li><html><body> </li><...
success.jsp <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; %> </li></ul><ul><li>登陆成功 </li></ul><ul><li...
Jsp 核心 技术 :  jsp 内建对象及实例 <ul><li>out 对象  </li></ul><ul><li>request 对象  </li></ul><ul><li>response 对象  </li></ul><ul><li>se...
Jsp 核心 技术 :  out 对象及实例 <ul><li>实例 <!-- 显示字符串 --> </li></ul><ul><li>out.println(“ 学习使用 out 对象” ) ; </li></ul><ul><li>作用 : 可...
Jsp 核心 技术 :  request 对象及实例 <ul><li>实例 <!-- 提取表单数据 --><!-- 显示服务器名称 --> </li></ul><ul><li>request.getParameter(“name&quot;) ...
request <ul><li>getAttribute(String name)  ; </li></ul><ul><li>setAttribute(String name , java.lang.Object obj); </li></ul...
Jsp 核心 技术 :  respone 对象及实例 <ul><li>实例 <!-- 数字钟表  --> 和 <!-- 重定向 --> </li></ul><ul><li><%@page import=“java.util.Date”%> </...
Jsp 核心 技术 :  session 对象及实例 <ul><li>实例 <!-- 存储 --><!-- 调用 --> </li></ul><ul><ul><li>session.setAttribute (&quot;thename&quo...
session <ul><li>setAttribute(String name,Object value); </li></ul><ul><li>getAttribute(String name); </li></ul><ul><li>get...
Jsp 核心 技术 :  application 对象及实例 <ul><li>实例:计数器实例 ( 第四章  Page95) </li></ul><ul><ul><li>Application.jsp </li></ul></ul><ul><u...
Jsp 核心 技术 :  exception 对象及实例 <ul><li>作用:处理异常和错误,只能在错误页面中使用  </li></ul><ul><li>常用方法: </li></ul><ul><ul><li>getMessage() </l...
Jsp 核心 技术 :  page 对象及实例 7 <ul><li>主要方法: </li></ul><ul><li>String toString() </li></ul><ul><li>把对象转换成 String  类 </li></ul>
动态页面和用户会话 <ul><li>创建动态页面的内容 </li></ul><ul><ul><li>根据时间的动态 </li></ul></ul><ul><ul><li>根据用户类型的动态 </li></ul></ul><ul><ul><li>...
用户会话实例 <ul><li>用于实现不同页面之间的数据交换 </li></ul><ul><ul><li><Input type=“ hidden”  name=“name” value=“ 张三” > </li></ul></ul><ul><...
解决中文显示的问题 <ul><li>原因 : </li></ul><ul><li>与 Jdk 版本及 web 服务器、浏览器使用的编码方式不同有关。 </li></ul><ul><li>解决的办法: </li></ul><ul><ul><li>...
中文显示问题 <ul><ul><li>对请求重新编码,添加如下指令 request.setCharacterEncoding(&quot;gb2312&quot;); response.setContentType(“text/html,cha...
JavaBean <ul><li>作用:用来封装事务逻辑、数据库操作 </li></ul><ul><li>组成:由属性和方法(事件)组成 </li></ul><ul><li>特性;使业务逻辑和前台程序分离,可实现代码的重复利用,易编写,易维护 ...
<ul><li><!–  名称: StudentInfo.java--> </li></ul><ul><li>package  Student ; </li></ul><ul><li>public class StudentInfo { </l...
2 <ul><li>  public int getId(){ // 定义方法 </li></ul><ul><li>return  this.id; </li></ul><ul><li>} </li></ul><ul><li>public vo...
<ul><li><!-- 名称: student.jsp 在 jsp 页面中引用 StudentInfo--> </li></ul><ul><li><%@ page contentType=&quot;text/html; </li></ul>...
Hello.java <ul><li>package Hai; </li></ul><ul><li>public class Hello{ </li></ul><ul><li>public String name=&quot;every one...
Hai.jsp <ul><li><jsp:useBean id=&quot;HelloBeans&quot; scope=&quot;session&quot; class=&quot;Hai.Hello&quot; /> </li></ul>...
1 <ul><li><!-- 索引属性实例  程序名: IndexBean.java--> </li></ul><ul><li>package com.jspdev.ch5; </li></ul><ul><li>public class Ind...
2 <ul><li>//setXxx 方法,设置这个属性的值。 </li></ul><ul><li>public void setType(String[ ] type) </li></ul><ul><li>{ this.type=type; ...
3 <ul><li>引用: </li></ul><ul><ul><li>setType(4,”javabean”); </li></ul></ul><ul><ul><li>String type=getType(5); </li></ul></...
<ul><li>创建 JavaBean </li></ul><ul><ul><li><jsp:useBean id=“ 组件名”  scope=“ 范围”  class=“ 类路径和类名”  /> </li></ul></ul><ul><li>...
设置 JavaBean 属性 <ul><li>实例如下 </li></ul><ul><li><jsp:useBean id=“StuBean” scope=“session” class=“Student. StudentInfo” /> </...
在 JSP 中使用 JavaBean 语法 <ul><li>获取 JavaBean 的属性,有显示输出 </li></ul><ul><ul><li><jsp:getProperty name=“ 组件名”  property=“ 属性名”  /...
JavaBean 小结   <ul><li>JavaBean 的常用属性 </li></ul><ul><ul><li>简单型:伴随有 get/set 方法的变量 </li></ul></ul><ul><ul><li>索引型:索引属性表示一个数组...
JavaBean 小结 <ul><li>编写 JavaBean 程序如: aa.java </li></ul><ul><li>编译这个 Java 程序如: javac aa.java </li></ul><ul><li>在 WEB-INFcla...
字符串转化为其它类型的方法举例 <ul><li>从表单中传来的数据类型都是字符串类型, JSP 内在机制会自动转化成 JavaBean 属性对应的类型 </li></ul>方法 属性 Java.lang. Integer.valueOf(Str...
Jsp 的文件操作 <ul><li>使用 java 的 IO 系统   </li></ul><ul><li>实例 </li></ul><ul><ul><li>读取文件内容: </li></ul></ul><ul><ul><ul><li>File...
读取文件内容实例 <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; import=&quot;java.io.*&quot; %>  </li></ul><ul...
<ul><li>file+=temp; </li></ul><ul><li>  }   </li></ul><ul><li>  in.close(); </li></ul><ul><li>  out.println(file); </li></...
写入内容到文件实例 <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; import=&quot;java.io.*&quot;%>  </li></ul><ul...
写入内容到文件实例 <ul><li>writer.write(content); </li></ul><ul><li>writer.close(); </li></ul><ul><li>out.println(&quot; 已经把内容写入到 c...
文件上传实例 <ul><li><!-- 提交要上传的文件 --> </li></ul><ul><li><body><hr><center> </li></ul><ul><li>upload file<br> </li></ul><ul><li>...
<ul><li><!-- 保存上传文件 --> </li></ul><ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; language=&quot;java&q...
<ul><li><body> </li></ul><ul><li><center> 正在上传文件 ... </li></ul><ul><li><% try // 上载附件 </li></ul><ul><li>{ </li></ul><ul><l...
<ul><li>out.println(&quot; 已经成功上传了文件,请查看 <a href=upload/&quot;+fn+&quot;> 这里 </a> ,看文件是否上传成功 &quot;); </li></ul><ul><li>} ...
JavaBean 实例 <ul><li>index.jsp </li></ul><ul><ul><li>title.jsp </li></ul></ul><ul><ul><li>main.jsp </li></ul></ul><ul><ul><...
数据库和 JDBC 技术 <ul><li>JDBC 介绍 </li></ul><ul><ul><li>JDBC 的任务 </li></ul></ul><ul><ul><li>同一个数据库建立连接 </li></ul></ul><ul><ul><...
数据库和 JDBC 技术 <ul><li>JDBC 是一种用于执行 SQL 语句的 API ,它是由一组 JAVA 语言编写的类和接口组成,它使得我们不用为某一个数据库而专门编写一个程序,对 Sybase 、 Oracle 、 INFORMIX...
图
数据库和 JDBC 技术 <ul><li>JSP 连接数据库的主要途径 </li></ul><ul><ul><li>JDBC 连接数据库 </li></ul></ul><ul><ul><li>JDBC-ODBC 桥 </li></ul></ul...
图
JDBC 是如何连接数据库的 (一)装载驱动程序 <ul><li>用  java.lang.Class 类的 forName() 的方法显式地加载驱动程序 </li></ul><ul><li>JDBC-ODBC 桥驱动 </li></ul><u...
(一)装载驱动程序 <ul><li>// 装载 MySQL JDBC 驱动 </li></ul><ul><li>Class.forName (“org.gjf.mm.mysql.Driver”);  </li></ul><ul><li>// 装...
(二)创建与数据库的连接 <ul><li>DriverManager 类 :作用于用户和驱动程序之间,并在数据库和相应驱动程序之间建立连接 </li></ul><ul><li>Connection </li></ul><ul><li>用 Dri...
Connection <ul><ul><li>格式①: </li></ul></ul><ul><ul><li>jdbc :子协议:子名称 ( 如:本地 ODBC 数据源名 ) </li></ul></ul><ul><ul><li>例如: jdb...
Connection <ul><li>主要方法: close() ; rolback(); </li></ul><ul><li>Statement creatStatement(); </li></ul><ul><li>PreparedStat...
(三) 创建 Statement 用于执行 SQL 语句 <ul><li>Statement </li></ul><ul><li>通过 Connection 类的 createStatement() 方法,创建 Statement 实例,用于实...
发布 SQL 语句 <ul><li>PreparedStatement 类 </li></ul><ul><li>是 Statement 类的子类,可以和查询信息一起预编译,然后用不同的输入参数来多次执行编译过的语句,至少包含 1 个?占位符。 ...
发布 SQL 语句 <ul><li>CallableStatement 类 </li></ul><ul><li>是 PreparedStatement  的子类,用于执行对数据库已存储过程的调用,包含 1 个或多个?占位符 </li></ul>...
(四)处理由 SQL 操作返回的结果集 <ul><li>ResultSet 结果集: 用来装载查询 结果, 结果集一般是一个表,包括查询返回的列标题和它的值。 </li></ul><ul><ul><li>ResultSet rs=stmt.ex...
ResultSet <ul><li>注意: ResultSet 维护指向当前数据行的游标,他的初始状态在第一行前,每调用一次 next 方法,游标下移一行,所以第一次调用要将它置于第一行,使它成为当前行,随着每次调用 next 导致游标下移一行...
JDBC 小结 <ul><li>JDBC 是由 java.sql 包实现的,所以连接数据库操作之前要导入  java.sql 这个包 </li></ul><ul><li>SQLServer2000 JDBC 安装 </li></ul><ul><...
常用 SQL 语句 <ul><li>查询(表) </li></ul><ul><ul><li>select *  from user_info; </li></ul></ul><ul><ul><li>select *  from user_inf...
第一个连接数据库实例 <ul><li>建数据库,数据库名 jspdev  ( page249 ) </li></ul><ul><li>建表,表名 book ,字段如下 </li></ul><ul><ul><li>bookId varchar(5...
<ul><li><%  Class.forName(&quot;com.microsoft.jdbc.sqlserver.SQLServerDriver&quot;).newInstance(); </li></ul><ul><li>Conne...
使用 预处理语句 添加数据到数据库实例 <ul><li>建表 contect (参照 page259 ) </li></ul><ul><ul><li>设定用户名为主键 </li></ul></ul><ul><li>编写 insert.jsp 程...
<ul><li><% </li></ul><ul><li>try </li></ul><ul><li>{ </li></ul><ul><li>// 装载驱动程序  Class.forName(&quot;com.microsoft.jdbc.s...
<ul><li>pstmt.setString(1,&quot; 王小华 &quot;); </li></ul><ul><li>pstmt.setInt(2,136234234); </li></ul><ul><li>pstmt.setStri...
<ul><li>// 执行插入数据操作。 </li></ul><ul><li>pstmt.execute(); </li></ul><ul><li>pstmt.close(); </li></ul><ul><li>//== 使用 Stateme...
更新数据库内容实例 <ul><li>编写 update.jsp 程序修改某个字段内容(参照 page263 ) </li></ul><ul><li>运行 query.jsp 确认修改结果的正确性 </li></ul>
<ul><li>// 装载驱动程序 </li></ul><ul><li>Class.forName(&quot;com.microsoft.jdbc.sqlserver.SQLServerDriver&quot;).newInstance();...
删除记录实例 <ul><li>编写 delete.jsp 程序删除条记录 ( </li></ul><ul><li>运行 query.jsp 确认删除结果是否正确 </li></ul>
<ul><li><% </li></ul><ul><li>try </li></ul><ul><li>{ </li></ul><ul><li>Class.forName(&quot;com.microsoft.jdbc.sqlserver.SQ...
JSP 通过 JavaBean 访问数据库实例 <ul><li>小结上面的实例:编程简单,维护性差,代码的重用性得不到满足 </li></ul><ul><li>下例参照 page269) </li></ul><ul><li>编写连接数据库的 C...
在 Servlet 中使用 JDBC 访问数据库实例 <ul><li>下例参照  page 272 </li></ul><ul><li>编写 Servlet 程序 ContactServlet.java </li></ul><ul><ul><l...
连接数据库综合实例 (page276) <ul><li>建表 </li></ul><ul><ul><li>商品分类表 </li></ul></ul><ul><ul><ul><li>表名: category </li></ul></ul></ul...
商品管理 <ul><li>编写连接数据库的 JavaBean </li></ul><ul><ul><li>名称: DataBaseConnection.java </li></ul></ul><ul><ul><li>功能:返回一个数据库的连接 ...
商品管理 <ul><li>编写添加商品界面的 jsp 程序 </li></ul><ul><ul><li>名称: addProduct.jsp </li></ul></ul><ul><li>编写执行添加商品功能的 JSP 程序 </li></ul...
商品管理 <ul><li>编写查看所有商品信息的 JSP 程序 </li></ul><ul><ul><li>名称: viewProduct.jsp </li></ul></ul><ul><li>编写主程序 index.html ,将所有功能整合...
分页显示实例( page310 ) <ul><li>开发一个页面控制的 javabean 程序 </li></ul><ul><ul><li>名称: PageBean.java </li></ul></ul><ul><ul><li>属性: 当前是...
分页显示实例 <ul><li>开发一个与逻辑业务相关的 javabean 程序 </li></ul><ul><ul><li>名称: ContactBean.java </li></ul></ul><ul><ul><li>连接数据库 </li><...
Upcoming SlideShare
Loading in...5
×

Jsp讲义

1,160
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,160
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Jsp讲义

  1. 1. JSP 讲义 <ul><li>JSP 技术概述 </li></ul><ul><li>JSP 的运行环境 </li></ul><ul><li>JSP 的核心技术 </li></ul><ul><li>JSP 的组件技术 </li></ul><ul><li>JSP 的数据库技术 </li></ul><ul><li>Servlet 技术 </li></ul>
  2. 2. <ul><li>为何要学习 Jsp </li></ul><ul><li>JSP 的工作 原理 </li></ul><ul><li>JSP 的页面 形态 </li></ul><ul><li>学好 JSP 的综合 要素 </li></ul>JSP 技术概述
  3. 3. Jsp 技术 概述 : 网页技术的演变 <ul><li>网页技术经历的四个阶段 </li></ul><ul><li>Html - >CGI - >PHP 、 ASP - >JSP </li></ul><ul><ul><li>静态网页和 动态 网页 </li></ul></ul><ul><ul><li>网页内容的自动更新功能及与用户的交互功能 </li></ul></ul><ul><ul><li>数据库技术的产生 </li></ul></ul><ul><li>JSP 介绍 </li></ul><ul><li>动态网页技术的 比较 </li></ul>
  4. 4. 动态网页技术 <ul><li>HTML 只有静态页面显示功能 </li></ul><ul><li>CGI (公共网关接口)早期的动态网页技术 </li></ul><ul><ul><li>实现 web 应用程序由静态到动态的变革 </li></ul></ul><ul><ul><li>可用不同的语言编写 , 脚本程序处理客户请求并做出响应 ,编程难,效率低,修改复杂 </li></ul></ul><ul><li>微软的 ASP </li></ul><ul><ul><li>VB 简单易学 , 安装方便 (IIS), 对机器要求不高 </li></ul></ul><ul><ul><li>传统的即时编译,效率低,安全性、稳定性差 , 仅限于 windows 系列的操作平台 </li></ul></ul>
  5. 5. 动态网页技术 <ul><li>PHP </li></ul><ul><ul><li>简单易学 , 可跨平台 , 安全性好 </li></ul></ul><ul><ul><li>安装复杂 , 没有组件支持 , 缺少配套软件 </li></ul></ul><ul><li>SUN 公司的 JSP </li></ul><ul><li>ASP 、 JSP 的共同点 </li></ul><ul><ul><li>都是 HTML 内嵌式语言 , 内嵌不同的脚本代码 </li></ul></ul><ul><ul><li>脚本程序在服务器端运行 </li></ul></ul><ul><ul><li>将生成的 HTML 页面返回给客户端 </li></ul></ul>
  6. 6. Jsp 技术 概述 : 动态网页技术的比较 较差 较好 好 扩展性 Windows 和 unix windows 绝大部分 运行平台 简单 简单 容易掌握 难易程度 较大 较大 较小 运行耗损 较快 较快 快 运行速度 php asp jsp
  7. 7. 动态网页技术的比较 较广 较广 较广 应用程度 不支持 支持 支持 对组件的支持 支持 不支持 支持 对 xml 的支持 较多 较少 多 厂商支持 多 多 多 数据库支持 多 较少 多 函数支持 好 较差 好 安全性 php asp jsp
  8. 8. Jsp 技术 概述 : Jsp 特点 <ul><li>可将页面的显示和页面的逻辑相分离 </li></ul><ul><ul><li>用 Html 或 xml 标识设计页面 </li></ul></ul><ul><ul><li>用 jsp 标识或 java 脚本程序生成动态内容,并封装在 JavaBean 中 </li></ul></ul><ul><li>生成可复用的组件(效率高 ) </li></ul><ul><ul><li>将复杂的或常用的功能封装在组件中 </li></ul></ul><ul><ul><li>可数据共享,加速开发过程 </li></ul></ul><ul><li>采用标识简化页面的开发 </li></ul><ul><li>一次编写,随处运行 (代码的可移植性) </li></ul><ul><li>一次编译,一直运行 (代码执行效率高) </li></ul>
  9. 9. JSP 特点 <ul><li>支持绝大部分平台 (可跨平台操作) </li></ul><ul><ul><li>JSP 独特的运行方式决定 </li></ul></ul><ul><ul><li>编译后生成的不是特定机器的可执行码,而是独立于处理器结构的字节代码。 </li></ul></ul><ul><li>JSP 通过 JAVA 可以访问几乎所有的数据库 </li></ul><ul><ul><li>因为 Java 连接数据库技术是 JDBC 和 JDBC- ODBC 桥。 </li></ul></ul>
  10. 10. Jsp 技术 概述 :为何使用 Jsp 小结 <ul><li>随着 internet 的发展,动态 Web 页面被广泛使用 </li></ul><ul><li>Jsp 是由 servlet 发展起来的,所以具有 servlet 所具有的强大功能,又因为 JSP 在编写上简单,又不需要手工编译,所以被广泛使用。 </li></ul><ul><li>Jsp 是基于 Java 语言的,所以具有 Java 语言所具有的强大功能,如它的跨平台可操作性,安全性,快速性,以及在网络数据库应用上的优势。 </li></ul><ul><li>B/S 模式比 C/S 模式简单,且更容易维护,被更加广泛的使用。 </li></ul>
  11. 11. JSP 的工作原理 <ul><li>执行 HTML 页面请求,输入 URL 地址 ( http://www.netmen9.com/index.html ) </li></ul>客户端 (IE) Web 服务器 http 请求 http 响应 index.html login … .
  12. 12. JSP 的工作原理 <ul><li>HTML 工作原理 </li></ul><ul><li>http://www.netmen9.com/index.html </li></ul><ul><li>客户通过 web 浏览器向 web 服务器发送一个 Http 请求,即通过 http 协议向运行在域名为 netmen9.com 主机名为 www 的 web 服务器发送一个对 index.html 内容的请求,主机 web 服务器响应后,取出 index.html 文档发送到客户机,然后客户机把文档显示在用户界面上。 </li></ul>
  13. 13. JSP 工作原理图 <ul><li>执行 JSP 页面请求 , 输入 URL 地址 http://www.netmen9.com/index.jsp </li></ul>
  14. 14. Jsp 技术 概述 : JSP 的工作原理 <ul><li>JSP 工作原理 http://www.netmen9.com/index.jsp </li></ul><ul><li>客户端通过 web 浏览器向 web 服务器发送一个 Http 请求, web 服务器判断后 (.jsp 扩展名 ), 由 JSP 引擎把 JSP 页面转换成中间代码 (.java) , JSP 引擎再调用服务器端的 Java 编译器对中间代码 (servlet) 进行编译,将中间代码变成字节代码 (.class), 再由 Java 虚拟机执行此字节代码,最后将结果以 html 页面的形式返回给客户端 。 </li></ul>
  15. 15. Jsp 技术 概述 : JSP 的页面形态 <ul><li>它的页面结构很类似于 Microsoft 公司推出的 ASP 。 传统的 HTML 文件中加入 JAVA 代码片断, JAVA 代码内嵌在 “ <% %>” 标记符中 </li></ul><ul><li>页面组成 </li></ul><ul><li>HTML 标识符 </li></ul><ul><li>JSP 指令标识符 </li></ul><ul><li><% java 代码片断 %> </li></ul>
  16. 16. <ul><li><% @ page language=“java” %> </li></ul><ul><li><html> </li></ul><ul><li><head> </li></ul><ul><li><title> 标题 </title> </li></ul><ul><li></head> </li></ul><ul><li><body> </li></ul><ul><li><% =“ hello world”%> </li></ul><ul><li></body> </li></ul><ul><li></html> </li></ul>Jsp 技术 概述 : JSP 的页面形态
  17. 17. JSP 的页面形态及位置 <ul><li><%@ page language=java %> </li></ul><ul><li><html> </li></ul><ul><li><head> </li></ul><ul><li><title> 标题 </title> </li></ul><ul><li><script> JavaScript 代码 </script> </li></ul><ul><li></head> </li></ul><ul><li><body> </li></ul><ul><li><% Java 代码片断 %> </li></ul><ul><li></body> </li></ul><ul><li></html> </li></ul>
  18. 18. Jsp 技术 概述 : 学好 JSP 的综合要素 <ul><li>掌握 HTML 语言 : 可轻松建立 JSP 的表示页面。 </li></ul><ul><li>熟悉 Java 语言 : 特别是正确使用 Java 的类、接口和方法,可简单实现应用程序的功能 , 使得静态页面动态化,轻松连接数据库。 </li></ul><ul><li>掌握 JavaScript: 可控制浏览器及其页面资料 , 检查用户提交的窗体内容,使页面更规范更生动。 </li></ul><ul><li>掌握 Dreamweaver 页面排版软件 : 创建 显示页面更方便、更快捷。 </li></ul>
  19. 19. 学好 JSP 的综合要素 <ul><li>掌握 taglib 标签技术 </li></ul><ul><li>了解 MVC 设计模式 </li></ul><ul><li>掌握 Struts 框架技术 </li></ul><ul><li>掌握 JBuilder 集成开发工具 </li></ul>
  20. 20. JSP 的运行环境 <ul><li>JAVA 运行环境如:包含 JAVA 编译器、 JAVA 虚拟机、 JDBC-ODBC 桥、 Java 类库等。 </li></ul><ul><li>jdk1.4.1 </li></ul><ul><li>JSP 服务器: </li></ul><ul><li>用于转换 JSP 页面并充当 web 服务器的功能 </li></ul><ul><li>如: jswdk 、 tomcat 、 resin 、 WebLogic </li></ul><ul><li>安装 Jdbc 驱动程序:用于连接数据库 </li></ul><ul><li>JSP 开发编辑工具: </li></ul><ul><li>UltraEdit 、 HomeSet 、 EditPlus 等 </li></ul><ul><li>JBuilder ( 集成开发工具 ) </li></ul><ul><li>安装和配置数据库如: Access 、 SQLServer 、 Oracle 、 Sybase 、 MySQL </li></ul>
  21. 21. 运行 Web 应用程序要点 <ul><li>设置环境 变量 : 为了能在任何目录下被访问。 </li></ul><ul><li>协议必须是 Http 协议: 因为它是 web 服务器支持的协议。 </li></ul><ul><li>缺省端口号 : 8080 (可更改 server.xml 文件) </li></ul><ul><li>缺省主机名 : localhost 或 127.0.0.1 </li></ul><ul><li>默认页面地址 : </li></ul><ul><li>index.jsp 、 index.html 、 index.htm ( 可更改 web.xml 配置文件 ) </li></ul>
  22. 22. 设置运行 JSP 的环境变量 <ul><li>开始-设置-控制面板-系统-高级-环境变量 </li></ul><ul><li>JAVA_HOME: 表示 java 安装的目录 ( 新建或添加 ) </li></ul><ul><li>CLASSPATH: 指向 java 类库(新建或添加 ) </li></ul><ul><li>PATH: 指向可执行程序的路径 ( 添加 ) </li></ul><ul><li>例如下面的设置 : </li></ul><ul><li>JAVA_HOME: C:jdk1.4.1 </li></ul><ul><li>CATALINA_HOME:Cjakarta-tomcat-5.0.27 </li></ul><ul><li>CLASSPATH: C:jdk1.3lib ools.jar;C:jdk1.3libdt.jar;. </li></ul><ul><li>PATH: C:jdk1.3in;. </li></ul>
  23. 23. Jsp 在 tomcat 上的运行环境 Jakarta-tomcat5.0.27 conf 目录下 web.xml ( 系统配置文件 ) Jakarta-tomcat5.0.27 conf 目录下 server.xml ( 系统配置文件 ) httpd : //localhost : 8080 测试 (IE 浏览器 ) omcat5.0/bin shutdown.bat 关闭 服务器 omcat5.0/bin startup.bat 启动服务器 系统默认路径 Windows 2000 OS tomcat Webserver
  24. 24. Jakarta-tomcat5.0.27 webappsROOT 的子目录下 应用程序 .jsp.js .css.html 等程序 Jakarta-tomcat5.0.27 webappsROOTWEB-INF classes 的子目录 ( 包名 ) 下 JavaBean 或 servlet 编译后生成的 .class 文件 Jakarta-tomcat5.0.27 webappsROOTWEB-INF 应用配置文件 web.xml 系统默认位置 重要文件
  25. 25. 开发第一个 jsp 程序 <ul><li><html> </li></ul><ul><li><head> </li></ul><ul><li><title> 第一个 JSP 程序 </title> </li></ul><ul><li></head> </li></ul><ul><li><body> </li></ul><ul><li><font face = &quot; 宋体 &quot;><font size=&quot;+2&quot;> </li></ul><ul><li><center> </li></ul><ul><li>Hello World ! </li></ul><ul><li><p> </li></ul><ul><li></body> </li></ul><ul><li></html> </li></ul>
  26. 26. 开发第一个 jsp 程序 <ul><li><% ! String Greeting;%> </li></ul><ul><li><%Greeting=&quot;Hello World !!&quot; ; %> </li></ul><ul><li><% = Greeting%> </li></ul><ul><li><p> </li></ul><ul><li><% </li></ul><ul><li>String Greeting3=&quot;world !!!&quot;; </li></ul><ul><li>out.println(&quot;hello,&quot;+ Greeting3); </li></ul><ul><li>%> </li></ul><ul><li><p> </li></ul><ul><li><%!String Greeting1=&quot; 你好,世界 !!!!&quot;;%> </li></ul><ul><li><%=Greeting1%> </li></ul><ul><li><p> </li></ul><ul><li><%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=gb2312&quot;%> </li></ul>
  27. 27. 开发第一个 jsp 程序 <ul><li><!— 注释 --> </li></ul><ul><li><!-- Today is <%= new java.util.Date().toLocaleString() %> --> </li></ul><ul><li><%-- This comment will not be visible --%> </li></ul>
  28. 28. Jsp 核心技术 <ul><li>Jsp 脚本元素及实例 </li></ul><ul><li>Jsp 指令元素及实例 </li></ul><ul><li>Jsp 动作元素及实例 </li></ul><ul><li>Jsp 内置对象及实例 </li></ul>
  29. 29. 事件举例 <ul><li>Submit 提交按钮激活 onsubmit() 事件 </li></ul><ul><li>Button 按钮激活 onclick() 事件 </li></ul><ul><li><form action=&quot;User_List.jsp&quot; name=form1 id=form1 onsubmit=&quot;return confirm(' 您确定要删除吗? ')&quot; > </li></ul><ul><li><a href=&quot;http://www.sina.com.cn&quot; </li></ul><ul><ul><li>onMouseOver=&quot;StatusMsg(' 中国最全的新闻网站 '); </li></ul></ul><ul><ul><li>return document.returnValue&quot;> 新浪网 </a> </li></ul></ul><ul><li><input type=&quot;button&quot; id=&quot;reset&quot; name=&quot;reset&quot; value=&quot; 返回 &quot; onclick=&quot;javascript:history.go(-1)&quot; > </li></ul>
  30. 30. Jsp 核心 技术 : Jsp 脚本元素及实例 <ul><li>“ 通常的 HTML”+“ <% 程序段 %>”==“JSP” </li></ul><ul><li>扩展名为 .jsp </li></ul><ul><li>JSP 有下面所示的几种形式。 </li></ul><ul><li>1 、 注释 : <%-- 注解 --%> </li></ul><ul><li>2 、 声明 : <%! 声明 %> </li></ul><ul><li>3 、 表达式 : <%= 表达式 %> </li></ul><ul><li>4 、 程序段 : <% 程序代码段 %> </li></ul>
  31. 31. Jsp 核心 技术 : 注释 :<%-- 注解语 --%> 写在 JSP 程序中,但不会显示在客户的 HTML 源代码中 <%-- comment --%> <% // 单行注释 /** */ 多行注释 %> 隐 藏 注 释 写在 JSP 程序中,并显示在客户端 HTML 源代码中 <!-- comment --> <!-- comment [ <%= expression %> ]--> 显 示 注 释 描述 JSP 语法
  32. 32. Jsp 核心 技术 : 注释实例 <ul><li>实例 </li></ul><ul><li><!-- 此页面 <%=new java.util.Date()% > 被读取 --> </li></ul><ul><li><!-- Today is <%= new java.util.Date().toLocaleString() %> --> </li></ul><ul><li><%-- Today is <%= new java.util.Date().toLocaleString() %> --%> </li></ul><ul><li><%-- This comment will not be visible --%> </li></ul>
  33. 33. Jsp 核心 技术 : 声明: <%! 声明 %> <ul><li>声明你将要在 JSP 中用到的类、变量、方法等如下面所示: </li></ul><ul><li><!-- 声明的同时可赋初值 --> </li></ul><ul><li><HTML> </li></ul><ul><li>…… </li></ul><ul><li><%! int i = 0 ; %> </li></ul><ul><li><%! int a, b, c ; %> </li></ul><ul><li><%! String a =“hello” ; %> </li></ul><ul><li>…… </li></ul><ul><li></HTML> </li></ul>
  34. 34. Jsp 核心 技术 : 表达式 :<%= 表达式 %> <ul><li>JSP 表达式是一个值, 在运行后被自动转化为字符串 ,然后插入到这个表达式在 JSP 程序中所在的位置中。因这个表达式的值已被转化为字符串,所以 有输出显示 在屏幕上 </li></ul><ul><li><%int a=10,b=20; %> </li></ul><ul><li><br>a+b = <%=a+b%> </li></ul><ul><li><br>a*b= <%=a*b%> </li></ul>
  35. 35. Jsp 核心 技术 : 程序段 :<% 代码片段 %> <ul><li><!-- 使用表达式和代码片段,从大到小显示字符串“ Hello”--> </li></ul><ul><li><h2> 嵌入 JSP 脚本 </h2> </li></ul><ul><li><% </li></ul><ul><li>for (int i=1; i<=6; i++) { //java 代码 </li></ul><ul><li>%> </li></ul><ul><li><H <%= i %> >Hello</H <%= i %> > </li></ul><ul><li><% } %> </li></ul>
  36. 36. Jsp 核心 技术 : 程序段 : <% 代码片段 %> <ul><li><!-- 使用表达式和代码片段,从小到大显示字符串“ Hello”--> </li></ul><ul><li><% for(int i=6;i>0;i--) </li></ul><ul><li>{ </li></ul><ul><li>out.print( &quot; <h &quot; + i + &quot;>Hello </h&quot; + i + &quot; > &quot; ); </li></ul><ul><li>} </li></ul><ul><li>%> </li></ul>
  37. 37. Jsp 核心 技术 : Jsp 指令元素及实例 <ul><li>页面 page 指令 : 定义 JSP 文件的全局属性 </li></ul><ul><li>Include 指令 : 它的执行结果就是将它包含的文件插入到 JSP 文件中放置 include 指令的地方 , 包含文件执行完毕后 , 继续执行主 jsp 文件的下一行 ( 和主文件一起编译 , 一旦改变 , 需重新编译主文件 ) </li></ul><ul><li>taglib 指令 : 自定义标签 , 编写标签库配置文件 </li></ul><ul><li>格式如下 : </li></ul><ul><li><% @ page attribute=value attribute-list ……%> </li></ul>
  38. 38. Jsp 核心 技术 : 页面 page 指令的属性 language=&quot;java&quot; extends=&quot;package.class&quot; import =&quot;{package.class | package.*}, ...&quot; session=&quot; true | false&quot; buffer=&quot;none | 8kb | sizekb&quot; autoFlush=&quot; true | false&quot; ] isThreadSafe=&quot; true | false&quot; info=&quot;text&quot; ] errorPage =&quot;relativeURL&quot; contentType =&quot;mimeType [ ;charset=characterSet ]&quot; | &quot;text/html ; charset=ISO-8859-1 &quot; isErrorPage =&quot;true | false &quot;
  39. 39. Jsp 核心 技术 : 页面 page 指令的实例 <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; import=“java.util.*,java.sql.*” errorPage=“error.jsp”%> </li></ul>
  40. 40. Jsp 核心 技术 : include 指令实例 <ul><li>格式 <%@ include file= &quot; filename&quot; %> </li></ul><ul><li>Include 指令的使用 </li></ul><ul><li><%@ page contentType=&quot;text/html;charset=gb2312&quot;%> </li></ul><ul><li><%@ include file=“header.jsp&quot; %> </li></ul><ul><li><%@ include file=“side.jsp&quot; %> </li></ul><ul><li><%@ include file=“footer.jsp&quot; %> </li></ul>
  41. 41. Jsp 核心 技术 : include 指令分区实例 尾部 :footer.jsp 版本声明等 页面主体 :body.jsp 功能区 side.jsp 菜单 LOGO 头部 :header.jsp
  42. 42. Jsp 核心 技术 : Jsp 动作元素及实例 <ul><li><jsp:param> 可传递一个或多个参数 , 一般和其它动作 include 或 forward 共用 </li></ul><ul><li><jsp:include> </li></ul><ul><li><jsp:forward> </li></ul><ul><li>格式如下 : </li></ul><ul><li><prefix:tag attribute=value attribute-list…/> </li></ul><ul><li><jsp:param name=“ 参数名” value=“ 参数值” /> </li></ul>
  43. 43. Jsp 核心 技术 : include 动作实例 <ul><li><jsp:include page=&quot;login.jsp&quot; flush=&quot;true&quot; /> </li></ul><ul><li><jsp:include page=&quot;login.jsp&quot; flush=&quot;true&quot; > </li></ul><ul><li><jsp:param name=“username” value=“ 张三 &quot; /> </li></ul><ul><li></jsp:include> </li></ul><ul><li>和 include 指令不同之处 , 包含的内容可以是动态 </li></ul><ul><li>的 , 在执行时才确定 , 比 include 指令运行效率低 </li></ul>
  44. 44. Jsp 核心 技术 : forward 动作实例 <ul><li>作用 : 把当前页面重定向到另一个页面上 </li></ul><ul><li><jsp:forward page=&quot;http://www.sina.com.cn &quot; /> </li></ul><ul><li><jsp:forward page=&quot;login.jsp&quot;> </li></ul><ul><li><jsp:param name=&quot;userId&quot; value=“001&quot; /> </li></ul><ul><li><jsp:param name=“pasd&quot; value=“xxx&quot; /> </li></ul><ul><li></jsp:forward> </li></ul>
  45. 45. Include 动作实例( static.html ) <ul><li><html> </li></ul><ul><li><body> </li></ul><ul><li><form method=post action=&quot;jsp_include.jsp&quot;> </li></ul><ul><li><table> </li></ul><ul><li><tr><td>please input your name:</td></tr> </li></ul><ul><li><tr><td><input type=text name=name></td></tr> </li></ul><ul><li><tr><td>input you password:</td><td> </li></ul><ul><li><input type=text name=password></td></tr> </li></ul><ul><li><tr><td><input type=submit value=login></td></tr> </li></ul><ul><li></table> </li></ul><ul><li></body> </li></ul><ul><li></html> </li></ul>
  46. 46. two.jsp <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; language=&quot;java&quot; %> </li></ul><ul><li>举例说明 include 的工作原理: </li></ul><ul><li><br> </li></ul><ul><li>this is a1=<%=request.getParameter(&quot;a1&quot;)%> </li></ul><ul><li><br> </li></ul><ul><li>this is a2=<%=request.getParameter(&quot;a2&quot;)%> </li></ul><ul><li><br> </li></ul><ul><li><% out.println(&quot;hello from two.jsp&quot;);%> </li></ul>
  47. 47. Jsp_include.jsp <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; language=&quot;java&quot; %> </li></ul><ul><li><html><body> </li></ul><ul><li><%@ include file=&quot;static.html&quot; %> </li></ul><ul><li><a href=&quot;two.jsp&quot;>goto two--></a><br> </li></ul><ul><li>this examples show include works </li></ul><ul><li><jsp:include page=&quot;two.jsp&quot; flush=&quot;true&quot;> </li></ul><ul><li><jsp:param name=&quot;a1&quot; value=&quot;<%=request.getParameter(&quot;name&quot;)%>&quot; /> </li></ul><ul><li><jsp:param name=&quot;a2&quot; value=&quot;<%=request.getParameter(&quot;password&quot;)%>&quot; /> </li></ul><ul><li></jsp:include> </li></ul><ul><li></body></html> </li></ul>
  48. 48. forward 动作实例 (login.jsp) <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; %> </li></ul><ul><li><html><body> </li></ul><ul><li><form method=get action=checklogin.jsp> </li></ul><ul><li><table> </li></ul><ul><li><tr><td> 输入用户名: </td> </li></ul><ul><li><td><input type=text name=name value=<%=request.getParameter(&quot;name&quot;)%>></td></tr> </li></ul><ul><li><tr><td> 输入密码: </td> </li></ul><ul><li><td><input type=password name=password></td></tr> </li></ul><ul><li><tr colspan=2><td><input type=submit value=login></td></tr> </li></ul><ul><li></table></body></html> </li></ul>
  49. 49. checklogin.jsp <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; %> </li></ul><ul><li><html><body> </li></ul><ul><li><% </li></ul><ul><li>String name=request.getParameter(&quot;name&quot;); </li></ul><ul><li>String password=request.getParameter(&quot;password&quot;); </li></ul><ul><li>if(name.equals(&quot;hellking&quot;)) { %> </li></ul><ul><li><jsp:forward page=&quot;success.jsp&quot;> </li></ul><ul><li><jsp:param name=&quot;user&quot; value=&quot;<%=name%>&quot;/> </li></ul><ul><li></jsp:forward> </li></ul><ul><li><% } else {%> </li></ul><ul><li><jsp:forward page=&quot;login.jsp&quot;> </li></ul><ul><li><jsp:param name=&quot;user&quot; value=&quot;<%=name%>&quot;/> </li></ul><ul><li></jsp:forward> </li></ul><ul><li><% } %> </li></ul><ul><li></body></html> </li></ul>
  50. 50. success.jsp <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; %> </li></ul><ul><li>登陆成功 </li></ul><ul><li><br> </li></ul><ul><li>欢迎你 , </li></ul><ul><li><%=request.getParameter(&quot;name&quot;)%> </li></ul>
  51. 51. Jsp 核心 技术 : jsp 内建对象及实例 <ul><li>out 对象 </li></ul><ul><li>request 对象 </li></ul><ul><li>response 对象 </li></ul><ul><li>session 对象 </li></ul><ul><li>application 内部对象 </li></ul><ul><li>exception 内部对象 </li></ul><ul><li>page 对象 </li></ul><ul><li>pagecontext 对象 </li></ul><ul><li>config 对象 </li></ul>
  52. 52. Jsp 核心 技术 : out 对象及实例 <ul><li>实例 <!-- 显示字符串 --> </li></ul><ul><li>out.println(“ 学习使用 out 对象” ) ; </li></ul><ul><li>作用 : 可向客户端输出任何原始数据类型、对象及以字符构成的数组 </li></ul><ul><li>常用方法 : </li></ul><ul><li>out.print(String) , out.println(String) </li></ul><ul><li>outout.clear() , out.close() </li></ul><ul><li>out 对象被封装在 javax.servlet.jsp.JspWriter </li></ul><ul><li>接口中 </li></ul>
  53. 53. Jsp 核心 技术 : request 对象及实例 <ul><li>实例 <!-- 提取表单数据 --><!-- 显示服务器名称 --> </li></ul><ul><li>request.getParameter(“name&quot;) </li></ul><ul><li><%= request.getServerName()%> </li></ul><ul><li>作用:接受客户端的请求,另外还可获取服务器端及客户端的各种参数 , 如 IP 地址,端口号等。 </li></ul><ul><li>常用方法 </li></ul><ul><li>getParameter(String name) ; // 一般用它读取表单中参数 </li></ul><ul><li>getParameterNames() ; getParameterValues(String name) ; </li></ul><ul><li>// 一般用于 checkbox 、 select 提交的数据,其值是个 String 数组 </li></ul><ul><li>getAttribute(String name) ; </li></ul>
  54. 54. request <ul><li>getAttribute(String name) ; </li></ul><ul><li>setAttribute(String name , java.lang.Object obj); </li></ul><ul><li>removeAttribute(String name) ; </li></ul><ul><li>request 对象被封装在 HttpServletRequest 接口中 ) </li></ul>
  55. 55. Jsp 核心 技术 : respone 对象及实例 <ul><li>实例 <!-- 数字钟表 --> 和 <!-- 重定向 --> </li></ul><ul><li><%@page import=“java.util.Date”%> </li></ul><ul><li><%response.setHeader(&quot;Refresh&quot;,&quot;1&quot;);%> </li></ul><ul><li>现在时间是: <%=new Date()%> </li></ul><ul><li>sendRedirect(“http://www.sina.com.cn”); </li></ul><ul><li>常用方法: </li></ul><ul><li>setContentType ( String contentType ) </li></ul><ul><li>sendRedirect ( String location ) </li></ul><ul><li>setHeader(String name,String value); </li></ul><ul><li>Responset 对象被封装在 HttpServletResponse 接口中 </li></ul>
  56. 56. Jsp 核心 技术 : session 对象及实例 <ul><li>实例 <!-- 存储 --><!-- 调用 --> </li></ul><ul><ul><li>session.setAttribute (&quot;thename&quot;, name); </li></ul></ul><ul><ul><li>String name = (String) session.getAttribute(“thename&quot;); </li></ul></ul><ul><ul><li>session.putValue(&quot;thename&quot;, name); </li></ul></ul><ul><ul><li>String name = (String) session.getValue(&quot;thename&quot;); </li></ul></ul><ul><li>作用:保存用户信息以便跟踪每个用户的操作状态,对于那些希望通过多个页面完成一个事务的应用是非常有用的。 </li></ul><ul><li>主要方法: </li></ul><ul><li>GetId() , Long getLastAccessedTime() </li></ul><ul><li>getCreationTime(); </li></ul><ul><li>String[ ] getValueNames() , invalidate () </li></ul>
  57. 57. session <ul><li>setAttribute(String name,Object value); </li></ul><ul><li>getAttribute(String name); </li></ul><ul><li>getAttributeNames(String name); </li></ul><ul><li>putValue(String name,Object value); </li></ul><ul><li>getValue(String name); </li></ul><ul><li>getValueNames(); </li></ul><ul><li>removeValue(String name) </li></ul><ul><li>setMaxInactiveInterval(Int,interval); </li></ul><ul><li>和 session 对应的是 HttpSession 接口 </li></ul>
  58. 58. Jsp 核心 技术 : application 对象及实例 <ul><li>实例:计数器实例 ( 第四章 Page95) </li></ul><ul><ul><li>Application.jsp </li></ul></ul><ul><ul><li>test_application.jsp </li></ul></ul><ul><li>作用:为多个应用程序保存信息,它在服务器启动时自动创建,一直保持直到服务器关闭为止。 </li></ul><ul><li>主要方法: </li></ul><ul><li>get Attribute(String name) ; setAttribute(String name,Object object) ; </li></ul><ul><li>getAttributeNames( ) ; </li></ul><ul><li>getInitParameter(String name ) ; </li></ul>
  59. 59. Jsp 核心 技术 : exception 对象及实例 <ul><li>作用:处理异常和错误,只能在错误页面中使用 </li></ul><ul><li>常用方法: </li></ul><ul><ul><li>getMessage() </li></ul></ul><ul><ul><li>返回错误信息 ( 返回描述例外的消息 ) </li></ul></ul><ul><ul><li>toString() </li></ul></ul><ul><ul><li>以字符串的形式返回一个对异常的描述 </li></ul></ul><ul><ul><li>printStackTrace() </li></ul></ul><ul><ul><li>输出一个错误和错误的堆栈 </li></ul></ul>
  60. 60. Jsp 核心 技术 : page 对象及实例 7 <ul><li>主要方法: </li></ul><ul><li>String toString() </li></ul><ul><li>把对象转换成 String 类 </li></ul>
  61. 61. 动态页面和用户会话 <ul><li>创建动态页面的内容 </li></ul><ul><ul><li>根据时间的动态 </li></ul></ul><ul><ul><li>根据用户类型的动态 </li></ul></ul><ul><ul><li>根据用户自定义信息的动态 </li></ul></ul><ul><ul><li>根据用户不同区域、不同的语言的动态 </li></ul></ul><ul><ul><li>根据数据库内容的动态 </li></ul></ul><ul><li>常用的用户会话跟踪方法 </li></ul><ul><ul><li>隐藏字段 </li></ul></ul><ul><ul><li>URL 重写 </li></ul></ul><ul><ul><li>session </li></ul></ul>
  62. 62. 用户会话实例 <ul><li>用于实现不同页面之间的数据交换 </li></ul><ul><ul><li><Input type=“ hidden” name=“name” value=“ 张三” > </li></ul></ul><ul><ul><li><a href=modify_passd.jsp ?id=“001” </li></ul></ul><ul><ul><ul><li>&type=“ 一般用户” &city=“ 北京” …… > </li></ul></ul></ul><ul><ul><li>session </li></ul></ul><ul><ul><ul><li>Session.setAttribute(“name”,” 张三” ); </li></ul></ul></ul><ul><ul><ul><li>Session.setAttribute(“type”,” 一般用户” ); </li></ul></ul></ul><ul><ul><ul><li>Session.getAttribute(“name”); </li></ul></ul></ul><ul><ul><ul><li>Session.getAttribute(“type”); </li></ul></ul></ul>
  63. 63. 解决中文显示的问题 <ul><li>原因 : </li></ul><ul><li>与 Jdk 版本及 web 服务器、浏览器使用的编码方式不同有关。 </li></ul><ul><li>解决的办法: </li></ul><ul><ul><li>在浏览器里设置编码为简体中文编码 </li></ul></ul><ul><ul><li>在 Jsp 的页面指令中指定字符集的编码方式为 gb2312 ,即添加如下指令: </li></ul></ul><ul><ul><li><%@ page contentType=&quot;text/html; charset=gb2312 %> </li></ul></ul>
  64. 64. 中文显示问题 <ul><ul><li>对请求重新编码,添加如下指令 request.setCharacterEncoding(&quot;gb2312&quot;); response.setContentType(“text/html,charset=gb2312&quot;); </li></ul></ul>
  65. 65. JavaBean <ul><li>作用:用来封装事务逻辑、数据库操作 </li></ul><ul><li>组成:由属性和方法(事件)组成 </li></ul><ul><li>特性;使业务逻辑和前台程序分离,可实现代码的重复利用,易编写,易维护 </li></ul><ul><li>一个 JavaBean 实例: </li></ul><ul><li>一般包括:包名,类名,构造函数,属性,定义属性的读、写方法, 其它方法 。 </li></ul><ul><li>JavaBean 索引属性实例 </li></ul>
  66. 66. <ul><li><!– 名称: StudentInfo.java--> </li></ul><ul><li>package Student ; </li></ul><ul><li>public class StudentInfo { </li></ul><ul><li>int id; // 定义属性 </li></ul><ul><li>String name; </li></ul><ul><li>public StudentInfo() { // 初始化 </li></ul><ul><li>id=1001; </li></ul><ul><li>name=&quot; 张三 &quot;; </li></ul><ul><li>} </li></ul><ul><li>public void setId(int id){ // 定义方法 </li></ul><ul><li>this.id=id; </li></ul><ul><li>} </li></ul>1
  67. 67. 2 <ul><li> public int getId(){ // 定义方法 </li></ul><ul><li>return this.id; </li></ul><ul><li>} </li></ul><ul><li>public void setName(String name){// 定义方法 </li></ul><ul><li>this.name=name; </li></ul><ul><li>} </li></ul><ul><li>public String getName(){ // 定义方法 return this.name; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>改变 scope 范围为 page , session , application </li></ul><ul><li>体会它们各自不同的生命周期 </li></ul>
  68. 68. <ul><li><!-- 名称: student.jsp 在 jsp 页面中引用 StudentInfo--> </li></ul><ul><li><%@ page contentType=&quot;text/html; </li></ul><ul><li>charset=gb2312&quot;%> </li></ul><ul><li><jsp:useBean id=&quot;StuBean&quot; scope=&quot;application&quot; class=&quot;Student.StudentInfo&quot; /> </li></ul><ul><li>学号 :<%=StuBean.getId() %><br> </li></ul><ul><li>姓名 :<%=StuBean.getName() %>&nbsp; </li></ul><ul><li><jsp:getProperty name=&quot;StuBean&quot; property=“name&quot; /><br> </li></ul><ul><li><% StuBean.setName(&quot; 王五 &quot;); %> </li></ul>
  69. 69. Hello.java <ul><li>package Hai; </li></ul><ul><li>public class Hello{ </li></ul><ul><li>public String name=&quot;every one&quot;;// 定义属性 </li></ul><ul><li>public String output() // 定义方法 </li></ul><ul><li>{ </li></ul><ul><li>return &quot;hello &quot;+name; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  70. 70. Hai.jsp <ul><li><jsp:useBean id=&quot;HelloBeans&quot; scope=&quot;session&quot; class=&quot;Hai.Hello&quot; /> </li></ul><ul><li><%=HelloBeans.output() %> </li></ul><ul><li><br> </li></ul><ul><li><% </li></ul><ul><li>HelloBeans.name=&quot;world&quot;; </li></ul><ul><li>out.print(HelloBeans.output()); </li></ul><ul><li>%> </li></ul>
  71. 71. 1 <ul><li><!-- 索引属性实例 程序名: IndexBean.java--> </li></ul><ul><li>package com.jspdev.ch5; </li></ul><ul><li>public class IndexBean </li></ul><ul><li>{ </li></ul><ul><li>//type 为属性的名字,类型是 String </li></ul><ul><li>private String[ ] type=new String[ ]{&quot;jsp&quot;,&quot;ejb&quot;,&quot;servlet&quot;,&quot;javamail&quot;,&quot;jca&quot;,&quot;jdbc&quot;}; </li></ul><ul><li>//getXxx 方法,返回这个属性的值 </li></ul><ul><li>public String[ ] getType() </li></ul><ul><li>{ </li></ul><ul><li>return this.type; </li></ul><ul><li>} </li></ul>
  72. 72. 2 <ul><li>//setXxx 方法,设置这个属性的值。 </li></ul><ul><li>public void setType(String[ ] type) </li></ul><ul><li>{ this.type=type; } </li></ul><ul><li>// 另外的设置属性和获得属性值的方法。 </li></ul><ul><li>public void setType(int index,String value) </li></ul><ul><li>{ </li></ul><ul><li>type[index]=value; </li></ul><ul><li>} </li></ul><ul><li>public String getType(int index) </li></ul><ul><li>{ </li></ul><ul><li>return type[index]; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  73. 73. 3 <ul><li>引用: </li></ul><ul><ul><li>setType(4,”javabean”); </li></ul></ul><ul><ul><li>String type=getType(5); </li></ul></ul><ul><ul><li>String[ ] s=getType(); </li></ul></ul>
  74. 74. <ul><li>创建 JavaBean </li></ul><ul><ul><li><jsp:useBean id=“ 组件名” scope=“ 范围” class=“ 类路径和类名” /> </li></ul></ul><ul><li>设置 JavaBean 属性 </li></ul><ul><ul><li><jsp:setProperty name=“ 组件名” property=“*” /> </li></ul></ul><ul><ul><li>上面必须和表单中参数名相匹配,快捷方式 </li></ul></ul><ul><ul><li><jsp:setProperty name=“ 组件名” property=“ 属性名” value=“ 属性值” /> </li></ul></ul><ul><ul><li><jsp:setProperty name=“ 组件名” property=“ 属性名” param=“ 参数名” /> </li></ul></ul>在 JSP 中使用 JavaBean 语法
  75. 75. 设置 JavaBean 属性 <ul><li>实例如下 </li></ul><ul><li><jsp:useBean id=“StuBean” scope=“session” class=“Student. StudentInfo” /> </li></ul><ul><li><jsp:setProperty name=“StuBean” property=“*” /> </li></ul><ul><li><jsp:setProperty name=“StuBean 名” property=“name 名” param=“username”/> </li></ul><ul><li><jsp:setProperty name=“StuBean” property=“name” value=“ 李四” /> </li></ul>
  76. 76. 在 JSP 中使用 JavaBean 语法 <ul><li>获取 JavaBean 的属性,有显示输出 </li></ul><ul><ul><li><jsp:getProperty name=“ 组件名” property=“ 属性名” /> </li></ul></ul><ul><li>如: </li></ul><ul><li><jsp:useBean id=“StuBean” scope=“session” class=“ Student. StudentInfo” /> </li></ul><ul><li><jsp:getProperty name=“StuBean” property=“name” /> </li></ul><ul><li>其结果显示姓名 </li></ul>
  77. 77. JavaBean 小结 <ul><li>JavaBean 的常用属性 </li></ul><ul><ul><li>简单型:伴随有 get/set 方法的变量 </li></ul></ul><ul><ul><li>索引型:索引属性表示一个数组值,可以使用 get/set 方法设置或取得数组的值 </li></ul></ul><ul><li>get/set 方法的常规写法 </li></ul><ul><ul><li>变量的第一个字母是大字如: getName() ; </li></ul></ul>
  78. 78. JavaBean 小结 <ul><li>编写 JavaBean 程序如: aa.java </li></ul><ul><li>编译这个 Java 程序如: javac aa.java </li></ul><ul><li>在 WEB-INFclasses 目录下建文件夹及其子文件夹 </li></ul><ul><ul><li>其路径要和包名一致 </li></ul></ul><ul><ul><li>java 文件名要和类名一致 </li></ul></ul><ul><li>编写 jsp 程序, <jsp> 标签调用 JavaBean </li></ul>
  79. 79. 字符串转化为其它类型的方法举例 <ul><li>从表单中传来的数据类型都是字符串类型, JSP 内在机制会自动转化成 JavaBean 属性对应的类型 </li></ul>方法 属性 Java.lang. Integer.valueOf(String) Integer Java.lang. Integer.valueOf(String).IntValue() int Java.lang.Boolean.valueOf(String) Boolean Java.lang.Boolean.valueOf(String).boolean.Value() boolean
  80. 80. Jsp 的文件操作 <ul><li>使用 java 的 IO 系统 </li></ul><ul><li>实例 </li></ul><ul><ul><li>读取文件内容: </li></ul></ul><ul><ul><ul><li>FileReader 类或 FieldInputStream 类 </li></ul></ul></ul><ul><ul><li>写入内容到某个文件: </li></ul></ul><ul><ul><ul><li>FileWriter 类或 FieldOutputStream 类 </li></ul></ul></ul><ul><ul><li>文件上传 </li></ul></ul><ul><ul><ul><li>使用 SmartUpload 上传工具 </li></ul></ul></ul><ul><ul><li>文件下载 </li></ul></ul>
  81. 81. 读取文件内容实例 <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; import=&quot;java.io.*&quot; %> </li></ul><ul><li><% </li></ul><ul><li>try </li></ul><ul><li>{ </li></ul><ul><li>BufferedReader in=new BufferedReader(new FileReader(&quot;c:serSession.java&quot;)); </li></ul><ul><li>String file=&quot;&quot;; </li></ul><ul><li>String temp=&quot;&quot;; </li></ul><ul><li>while((temp=in.readLine())!=null) </li></ul><ul><li>{ </li></ul>
  82. 82. <ul><li>file+=temp; </li></ul><ul><li> } </li></ul><ul><li> in.close(); </li></ul><ul><li> out.println(file); </li></ul><ul><li> out.flush(); </li></ul><ul><li>} </li></ul><ul><li>catch(Exception e) </li></ul><ul><li>{ </li></ul><ul><li>out.println(e); </li></ul><ul><li>e.printStackTrace(); </li></ul><ul><li>} </li></ul><ul><li>%> </li></ul>读取文件内容实例
  83. 83. 写入内容到文件实例 <ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; import=&quot;java.io.*&quot;%> </li></ul><ul><li><html><body> </li></ul><ul><li><% </li></ul><ul><li>request.setCharacterEncoding(&quot;gb2312&quot;); </li></ul><ul><li>String content=request.getParameter(&quot;content&quot;); </li></ul><ul><li>%> </li></ul><ul><li><% </li></ul><ul><li>try </li></ul><ul><li>{ </li></ul><ul><li>PrintWriter writer= new PrintWriter(new BufferedWriter(new FileWriter(&quot;c:oo.out&quot;, true ))); </li></ul>
  84. 84. 写入内容到文件实例 <ul><li>writer.write(content); </li></ul><ul><li>writer.close(); </li></ul><ul><li>out.println(&quot; 已经把内容写入到 c:oo.java&quot;); </li></ul><ul><li>} </li></ul><ul><li>catch(Exception e) </li></ul><ul><li>{ </li></ul><ul><li>out.println(e); </li></ul><ul><li>e.printStackTrace(); </li></ul><ul><li>} </li></ul><ul><li>%> </li></ul><ul><li><form action=&quot;writeFile.jsp&quot; method=post> </li></ul><ul><li><textarea name=content cols=20 rows=5></textarea><br> </li></ul><ul><li><input type=submit value= 提交 > </li></ul><ul><li></form> </li></ul>
  85. 85. 文件上传实例 <ul><li><!-- 提交要上传的文件 --> </li></ul><ul><li><body><hr><center> </li></ul><ul><li>upload file<br> </li></ul><ul><li><form action=&quot;upload.jsp&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot; > </li></ul><ul><li><table><tr><td>name: </li></ul><ul><li><input type=&quot;file&quot; name=&quot;file2&quot; size=&quot;20&quot;></td></tr> </li></ul><ul><li><tr><td><input type=&quot;submit&quot; value=&quot; 上传 &quot;></td></tr> </li></ul><ul><li></table> </li></ul><ul><li></form> </li></ul><ul><li></center> </li></ul><ul><li></body> </li></ul>
  86. 86. <ul><li><!-- 保存上传文件 --> </li></ul><ul><li><%@ page contentType=&quot;text/html; charset=gb2312&quot; language=&quot;java&quot; import=&quot;java.sql.*&quot; errorPage=&quot;&quot; %> </li></ul><ul><li><%@ page import=&quot;com.jspsmart.upload.*&quot;%> </li></ul><ul><li><jsp:useBean id=&quot;mySmartUpload&quot; scope=&quot;page&quot; class=&quot;com.jspsmart.upload.SmartUpload&quot; /> </li></ul><ul><li><html> </li></ul><ul><li><head> </li></ul><ul><li><meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;> </li></ul><ul><li></head> </li></ul>文件上传实例
  87. 87. <ul><li><body> </li></ul><ul><li><center> 正在上传文件 ... </li></ul><ul><li><% try // 上载附件 </li></ul><ul><li>{ </li></ul><ul><li>mySmartUpload.initialize(pageContext); </li></ul><ul><li>mySmartUpload.service(request,response); </li></ul><ul><li>mySmartUpload.upload(); </li></ul><ul><li>String fn=fn=mySmartUpload.getFiles().getFile(0). </li></ul><ul><li>getFileName(); </li></ul><ul><li>mySmartUpload.save(&quot; upload/ &quot;);// 文件保存目录 </li></ul>文件上传实例
  88. 88. <ul><li>out.println(&quot; 已经成功上传了文件,请查看 <a href=upload/&quot;+fn+&quot;> 这里 </a> ,看文件是否上传成功 &quot;); </li></ul><ul><li>} </li></ul><ul><li>catch(Exception e) </li></ul><ul><li>{ </li></ul><ul><li>e.printStackTrace(); </li></ul><ul><li>} </li></ul><ul><li>%> </li></ul><ul><li><a href=FileUpload.html> 重新上传 </a> </li></ul><ul><li></body> </li></ul><ul><li></html> </li></ul>文件上传实例
  89. 89. JavaBean 实例 <ul><li>index.jsp </li></ul><ul><ul><li>title.jsp </li></ul></ul><ul><ul><li>main.jsp </li></ul></ul><ul><ul><li>menu.jsp </li></ul></ul><ul><ul><ul><li>register.jsp (点击用户注册) </li></ul></ul></ul><ul><ul><ul><ul><li>include.inc (功能:连数据库) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>newuser.jsp (点击确定按钮) </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>UserInfo.java </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>UserRegist.java </li></ul></ul></ul></ul></ul>
  90. 90. 数据库和 JDBC 技术 <ul><li>JDBC 介绍 </li></ul><ul><ul><li>JDBC 的任务 </li></ul></ul><ul><ul><li>同一个数据库建立连接 </li></ul></ul><ul><ul><li>向数据库发送 SQL 语句 </li></ul></ul><ul><ul><li>处理数据库返回的结果 </li></ul></ul><ul><ul><li>JDBC 连接数据库的模型 </li></ul></ul><ul><ul><li>JDBC 连接数据库的两层模型 </li></ul></ul><ul><ul><li>JDBC 连接数据库的三层模型 </li></ul></ul><ul><ul><li>JDBC API </li></ul></ul>
  91. 91. 数据库和 JDBC 技术 <ul><li>JDBC 是一种用于执行 SQL 语句的 API ,它是由一组 JAVA 语言编写的类和接口组成,它使得我们不用为某一个数据库而专门编写一个程序,对 Sybase 、 Oracle 、 INFORMIX 、 SQLServer… 等数据库均通用。因为它是用纯 JAVA 语言写的 , 所以可跨平台操作 </li></ul>
  92. 92.
  93. 93. 数据库和 JDBC 技术 <ul><li>JSP 连接数据库的主要途径 </li></ul><ul><ul><li>JDBC 连接数据库 </li></ul></ul><ul><ul><li>JDBC-ODBC 桥 </li></ul></ul><ul><ul><ul><li>将 JDBC 调用映射为 ODBC 调用 </li></ul></ul></ul><ul><ul><ul><li>使 JDBC 能够访问 ODBC 数据源, </li></ul></ul></ul><ul><ul><ul><li>效率相对低下( JDBC 初期时使用) </li></ul></ul></ul>
  94. 94.
  95. 95. JDBC 是如何连接数据库的 (一)装载驱动程序 <ul><li>用 java.lang.Class 类的 forName() 的方法显式地加载驱动程序 </li></ul><ul><li>JDBC-ODBC 桥驱动 </li></ul><ul><li>Class.forName (“ sun . jdbc . odbc . JdbcOdbcDriver” ); </li></ul><ul><li>JDBC 驱动 </li></ul><ul><li>Class.forName (“ jdbc 驱动程序类名”); </li></ul><ul><li>实例 </li></ul><ul><li>// 装载 MS SQLServer JDBC 驱动 </li></ul><ul><li>Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver”); </li></ul>
  96. 96. (一)装载驱动程序 <ul><li>// 装载 MySQL JDBC 驱动 </li></ul><ul><li>Class.forName (“org.gjf.mm.mysql.Driver”); </li></ul><ul><li>// 装载 Oracle JDBC 驱动 </li></ul><ul><li>Class.forName(”oracle.jdbc.driver.OraclDriver”) ; </li></ul>
  97. 97. (二)创建与数据库的连接 <ul><li>DriverManager 类 :作用于用户和驱动程序之间,并在数据库和相应驱动程序之间建立连接 </li></ul><ul><li>Connection </li></ul><ul><li>用 DriverManager 类的 getConnection 方法创建一个特定的连接,这个连接就是 Connection 类的有关数据库的实例. </li></ul><ul><li>Connection con= </li></ul><ul><li>DriverManager.getConnection (url , user name , password) ; </li></ul><ul><ul><li>url :对不同的数据库驱动程序有所不同,有两种格式: </li></ul></ul>
  98. 98. Connection <ul><ul><li>格式①: </li></ul></ul><ul><ul><li>jdbc :子协议:子名称 ( 如:本地 ODBC 数据源名 ) </li></ul></ul><ul><ul><li>例如: jdbc : odbc : SQLshopping </li></ul></ul><ul><ul><li>格式②: </li></ul></ul><ul><ul><li>jdbc :子协议: // 主机名:端口号 / 数据库名 </li></ul></ul><ul><ul><li>例如: //MySQL </li></ul></ul><ul><ul><li>jdbc : mysql : //localhost : 3306/DBjsp </li></ul></ul><ul><li>//MS SQLServer </li></ul><ul><li>jdbc:microsoft:sqlserver://127.0.0.1:1433; </li></ul><ul><li>DatabaseName=jspdev,”sa”,”” </li></ul>
  99. 99. Connection <ul><li>主要方法: close() ; rolback(); </li></ul><ul><li>Statement creatStatement(); </li></ul><ul><li>PreparedStatement prepareStatement (String sql); </li></ul>
  100. 100. (三) 创建 Statement 用于执行 SQL 语句 <ul><li>Statement </li></ul><ul><li>通过 Connection 类的 createStatement() 方法,创建 Statement 实例,用于实现对数据库的具体操作,如:查询、修改、删除等 </li></ul><ul><ul><li>Statement stmt=con.createStatement(); </li></ul></ul><ul><ul><li>ResultSet rs=stmt.executeQuery(“select * from user_info”); </li></ul></ul><ul><li>主要方法 </li></ul><ul><ul><li>executeQuery() // 运行查询语句,返回 ResultSet 对象 </li></ul></ul><ul><ul><li>executeUpdate() // 运行更新操作,返回更新的行数 </li></ul></ul><ul><ul><li>execute() // 运行语句,返回是否有结果集 </li></ul></ul>
  101. 101. 发布 SQL 语句 <ul><li>PreparedStatement 类 </li></ul><ul><li>是 Statement 类的子类,可以和查询信息一起预编译,然后用不同的输入参数来多次执行编译过的语句,至少包含 1 个?占位符。 </li></ul><ul><li>PreparedStatement pstmt= </li></ul><ul><ul><li>con.prepareStatement(“insert user_info values(?,?,?,?,?,?,?)”); </li></ul></ul><ul><li>pstmt.setString(1,”hellking’); </li></ul><ul><li>pstmt.setInt(2,20); </li></ul><ul><li>…… </li></ul><ul><li>pstmt.executeUpdate(); </li></ul>
  102. 102. 发布 SQL 语句 <ul><li>CallableStatement 类 </li></ul><ul><li>是 PreparedStatement 的子类,用于执行对数据库已存储过程的调用,包含 1 个或多个?占位符 </li></ul><ul><li>strSQL=“{call demo_account(?,?,?,?)}”; </li></ul><ul><li>CallableStatement sqlStmt= </li></ul><ul><li>con.prepareCall(strSQL); </li></ul><ul><li>sqlStmt.setString(1,”userid_3”); </li></ul><ul><li>sqlStmt.setString(2,”userid_1”); </li></ul><ul><li>…… </li></ul><ul><li>Int i=sqlStmt.executeUpude(); </li></ul>
  103. 103. (四)处理由 SQL 操作返回的结果集 <ul><li>ResultSet 结果集: 用来装载查询 结果, 结果集一般是一个表,包括查询返回的列标题和它的值。 </li></ul><ul><ul><li>ResultSet rs=stmt.executeQuery(“select * from table1”) ; </li></ul></ul><ul><li>主要方法: </li></ul><ul><ul><li>String getString() ; </li></ul></ul><ul><ul><li>// 获取字符串对象,来自于指定的字段 </li></ul></ul><ul><ul><li>Date getDate() ; // 获取 Date 类型的对象,同上 </li></ul></ul><ul><ul><li>Blob getBlob() ; // 获取二进制大对象(图片) </li></ul></ul><ul><ul><li>Boolean next() ; // 向下移动一行,得到下一条查询结果 </li></ul></ul><ul><ul><li>First() ; // 指向第一条记录 </li></ul></ul><ul><ul><li>Last() ; // 指向最后一条记录 </li></ul></ul><ul><ul><li>void close() ; // 关闭同数据库的连接释放所占有的 JDBC 资源 </li></ul></ul>
  104. 104. ResultSet <ul><li>注意: ResultSet 维护指向当前数据行的游标,他的初始状态在第一行前,每调用一次 next 方法,游标下移一行,所以第一次调用要将它置于第一行,使它成为当前行,随着每次调用 next 导致游标下移一行。 </li></ul>
  105. 105. JDBC 小结 <ul><li>JDBC 是由 java.sql 包实现的,所以连接数据库操作之前要导入 java.sql 这个包 </li></ul><ul><li>SQLServer2000 JDBC 安装 </li></ul><ul><li>默认安装路径为: D:Program FilesMicrosoft SQL Server 2000 Driver for JDBC, JDBC 驱动 的核心程序是安装目录 lib 下的三个 jar 文件 mssqlserver.jar , msbase.jar , msutil.jar </li></ul><ul><ul><li>将这三个 jar 文件拷贝到 d:j2sdk1.4.1jrelibext 目录下 </li></ul></ul><ul><ul><li>将这三个 jar 文件拷贝到 d:jakarta_tomcatROOTWEB-INFlib 目录下 </li></ul></ul>
  106. 106. 常用 SQL 语句 <ul><li>查询(表) </li></ul><ul><ul><li>select * from user_info; </li></ul></ul><ul><ul><li>select * from user_info where userid<10; </li></ul></ul><ul><li>添加 ( 一条记录 ) </li></ul><ul><ul><li>insert into user_info (userid,username) values(1,” 张三” ); </li></ul></ul><ul><li>删除 ( 一条记录 ) </li></ul><ul><ul><li>delete from user_info where userid=3; </li></ul></ul><ul><li>修改 ( 字段 ) </li></ul><ul><ul><li>update user_info set username =“李四” where userid=1; </li></ul></ul>
  107. 107. 第一个连接数据库实例 <ul><li>建数据库,数据库名 jspdev ( page249 ) </li></ul><ul><li>建表,表名 book ,字段如下 </li></ul><ul><ul><li>bookId varchar(50) </li></ul></ul><ul><ul><li>bookname varchar(50) </li></ul></ul><ul><ul><li>publisher varchar(100) </li></ul></ul><ul><ul><li>price float </li></ul></ul><ul><li>添加数据到 book 表中(手工添加或 sql 脚本) </li></ul><ul><li>编写 testMssql.jsp 程序 , 显示表头及内容(参照 page254 ) </li></ul><ul><li>在 IE 中运行这个程序 </li></ul>
  108. 108. <ul><li><% Class.forName(&quot;com.microsoft.jdbc.sqlserver.SQLServerDriver&quot;).newInstance(); </li></ul><ul><li>Connection con= java.sql.DriverManager.getConnection(&quot;jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev&quot;,&quot;sa&quot;,&quot;&quot;); </li></ul><ul><li>Statement stmt=con.createStatement(); </li></ul><ul><li>ResultSet rst=stmt.executeQuery(&quot;select * from book;&quot;); </li></ul><ul><li>while(rst.next()) </li></ul><ul><li>{ </li></ul><ul><li> out.println(&quot;<tr>&quot;); </li></ul><ul><li>out.println(&quot;<td>&quot;+rst.getString(&quot;bookId&quot;)+&quot;</td>&quot;); </li></ul><ul><li>out.println(&quot;<td>&quot;+rst.getString(&quot;bookName&quot;)+&quot;</td>&quot;); </li></ul><ul><li>out.println(&quot;<td>&quot;+rst.getString(&quot;publisher&quot;)+&quot;</td>&quot;); </li></ul><ul><li>out.println(&quot;<td>&quot;+rst.getFloat(&quot;price&quot;)+&quot;</td>&quot;); </li></ul><ul><li>out.println(&quot;</tr>&quot;); </li></ul><ul><li>} </li></ul>
  109. 109. 使用 预处理语句 添加数据到数据库实例 <ul><li>建表 contect (参照 page259 ) </li></ul><ul><ul><li>设定用户名为主键 </li></ul></ul><ul><li>编写 insert.jsp 程序,使用 预处理语句 添加多条记录到 contect 表中 ( 参照 page260) </li></ul><ul><li>在浏览器中运行这个程序 </li></ul><ul><li>到 SQLServer2000 企业管理界面查看添加的结果是否正确 </li></ul>
  110. 110. <ul><li><% </li></ul><ul><li>try </li></ul><ul><li>{ </li></ul><ul><li>// 装载驱动程序 Class.forName(&quot;com.microsoft.jdbc.sqlserver.SQLServerDriver&quot;).newInstance(); </li></ul><ul><li>// 创建连接 </li></ul><ul><li>Connection con=java.sql.DriverManager. getConnection (&quot;jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev&quot;,&quot;sa&quot;,&quot;&quot;); </li></ul><ul><li>// 创建执行语句使用 PreparedStatement======// </li></ul><ul><li>PreparedStatement pstmt= con.prepareStatement(&quot;insert into contact values(?,?,?,?,?,?)&quot;); </li></ul>
  111. 111. <ul><li>pstmt.setString(1,&quot; 王小华 &quot;); </li></ul><ul><li>pstmt.setInt(2,136234234); </li></ul><ul><li>pstmt.setString(3,&quot;010455554&quot;); </li></ul><ul><li>pstmt.setString(4,&quot;lxh@some.com&quot;); </li></ul><ul><li>pstmt.setDate(5,new java.sql.Date(new java.util.Date().getTime())); </li></ul><ul><li>pstmt.setString(6,&quot; 很久没有联系了 &quot;); </li></ul><ul><li>pstmt.execute(); </li></ul><ul><li>//=======================// </li></ul><ul><li>pstmt.setString(1,&quot; 李小华 &quot;); </li></ul><ul><li>pstmt.setInt(2,136234234); </li></ul><ul><li>pstmt.setString(3,&quot;010455554&quot;); </li></ul><ul><li>pstmt.setString(4,&quot;lxh@some.com&quot;); </li></ul><ul><li>pstmt.setDate(5,new java.sql.Date(new java.util.Date().getTime())); </li></ul><ul><li>pstmt.setString(6,&quot; 很久没有联系了 &quot;); </li></ul>
  112. 112. <ul><li>// 执行插入数据操作。 </li></ul><ul><li>pstmt.execute(); </li></ul><ul><li>pstmt.close(); </li></ul><ul><li>//== 使用 Statement========// </li></ul><ul><li>Statement stmt=con.createStatement(); </li></ul><ul><li>// 一次添加一行数据 </li></ul><ul><li>stmt.execute(&quot;insert into contact(userName,mobile) values(' 陈军 ',136555555)&quot;); </li></ul><ul><li>out.println(&quot; 添加数据成功 &quot;); </li></ul><ul><li>// 关闭连接、释放资源 </li></ul><ul><li>stmt.close(); </li></ul><ul><li>con.close(); </li></ul><ul><li>} </li></ul><ul><li>catch(Exception e) </li></ul><ul><li>{ e.printStackTrace(); } </li></ul><ul><li>%> </li></ul>
  113. 113. 更新数据库内容实例 <ul><li>编写 update.jsp 程序修改某个字段内容(参照 page263 ) </li></ul><ul><li>运行 query.jsp 确认修改结果的正确性 </li></ul>
  114. 114. <ul><li>// 装载驱动程序 </li></ul><ul><li>Class.forName(&quot;com.microsoft.jdbc.sqlserver.SQLServerDriver&quot;).newInstance(); </li></ul><ul><li>// 创建连接 </li></ul><ul><li>Connection con= java.sql.DriverManager.getConnection(&quot;jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev&quot;,&quot;sa&quot;,&quot;&quot;); </li></ul><ul><li>Statement stmt=con.createStatement(); </li></ul><ul><li>int col=stmt.executeUpdate(&quot;update contact set mem=' 他下个月来北京 ' where userName=' 陈军 '&quot;); </li></ul><ul><li>out.println(&quot; 成功更新 &quot;+col+&quot; 条数据 &quot;); </li></ul><ul><li>// 关闭连接、释放资源 </li></ul><ul><li>stmt.close(); </li></ul><ul><li>con.close(); </li></ul>
  115. 115. 删除记录实例 <ul><li>编写 delete.jsp 程序删除条记录 ( </li></ul><ul><li>运行 query.jsp 确认删除结果是否正确 </li></ul>
  116. 116. <ul><li><% </li></ul><ul><li>try </li></ul><ul><li>{ </li></ul><ul><li>Class.forName(&quot;com.microsoft.jdbc.sqlserver.SQLServerDriver&quot;).newInstance(); </li></ul><ul><li>Connection con= java.sql.DriverManager.getConnection(&quot;jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev&quot;,&quot;bn&quot;,&quot;bn&quot;); </li></ul><ul><li>Statement stmt=con.createStatement(); </li></ul><ul><li>boolean col=stmt.execute(&quot;delete from contact where phone=null and mail=null and mobile=null&quot;); </li></ul><ul><li>stmt.close(); </li></ul><ul><li>con.close(); </li></ul><ul><li>} </li></ul><ul><li>catch(Exception e) </li></ul><ul><li>{ e.printStackTrace(); } </li></ul><ul><li>%> </li></ul>
  117. 117. JSP 通过 JavaBean 访问数据库实例 <ul><li>小结上面的实例:编程简单,维护性差,代码的重用性得不到满足 </li></ul><ul><li>下例参照 page269) </li></ul><ul><li>编写连接数据库的 ContactBean.java 程序 </li></ul><ul><ul><li>初始化连接 </li></ul></ul><ul><ul><li>定义在数据库中添加信息的 addContact(); 方法 </li></ul></ul><ul><ul><li>定义查询数据库的 getContact(); 方法 </li></ul></ul><ul><li>编写 jsp 程序 useBean.jsp 调用这个连接数据库的 Java 程序,页面容易维护,代码可重用。 </li></ul>
  118. 118. 在 Servlet 中使用 JDBC 访问数据库实例 <ul><li>下例参照 page 272 </li></ul><ul><li>编写 Servlet 程序 ContactServlet.java </li></ul><ul><ul><li>初始化连接 </li></ul></ul><ul><ul><li>定义删除信息的 deleteContact() 方法 </li></ul></ul><ul><ul><li>定义查询数据库的 getContact() 方法 </li></ul></ul><ul><li>编写 contact_sevlet_test.html 程序 </li></ul><ul><ul><li>提交用户名 </li></ul></ul><ul><ul><li>设置删除操作按扭 </li></ul></ul><ul><ul><li>设置显示操作按扭 </li></ul></ul><ul><li>修改 web.xml 配置文件添加 servlet 映射等 </li></ul>
  119. 119. 连接数据库综合实例 (page276) <ul><li>建表 </li></ul><ul><ul><li>商品分类表 </li></ul></ul><ul><ul><ul><li>表名: category </li></ul></ul></ul><ul><ul><ul><li>字段: catid,name,descn </li></ul></ul></ul><ul><ul><li>商品信息表 </li></ul></ul><ul><ul><ul><li>表名: product </li></ul></ul></ul><ul><ul><ul><li>字段: productid,category,name,producer,price,descn </li></ul></ul></ul><ul><ul><li>手工添加一些数据到这两个表中 </li></ul></ul><ul><li>编写这两个表的 JavaBean, </li></ul><ul><ul><li>名称: Category.java 和 Product.java </li></ul></ul><ul><ul><li>作用:把每个数据表都做成一个值对象的类,在 JavaBean 和 JSP 之间传递数据时可通过值对象来进行 </li></ul></ul>
  120. 120. 商品管理 <ul><li>编写连接数据库的 JavaBean </li></ul><ul><ul><li>名称: DataBaseConnection.java </li></ul></ul><ul><ul><li>功能:返回一个数据库的连接 </li></ul></ul><ul><li>编写查看商品分类的 JavaBean </li></ul><ul><ul><li>名称: ViewCategory.java </li></ul></ul><ul><ul><li>功能:返回商品的所有分类 </li></ul></ul><ul><ul><li>定义了 getAllCategory() 方法 </li></ul></ul><ul><li>编写与商品操作相关的 JavaBean </li></ul><ul><ul><li>名称: ProductBean.java </li></ul></ul><ul><ul><li>封装的业务逻辑有: </li></ul></ul><ul><ul><li>添加一个商品,删除一个商品,更改商品的信息,搜索所有的商品信息, 按照商品的类别查找商品,返回给定商品的信息等 </li></ul></ul>
  121. 121. 商品管理 <ul><li>编写添加商品界面的 jsp 程序 </li></ul><ul><ul><li>名称: addProduct.jsp </li></ul></ul><ul><li>编写执行添加商品功能的 JSP 程序 </li></ul><ul><ul><li>名称: addProduct_do.jsp </li></ul></ul><ul><li>编写删除商品界面的 JSP 程序 </li></ul><ul><ul><li>名称: deleteProduct.jsp </li></ul></ul><ul><li>编写执行删除商品功能的 JSP 程序 </li></ul><ul><ul><li>名称: deleteProduct_do.jsp </li></ul></ul><ul><li>编写更改商品信息界面的 JSP 程序 </li></ul><ul><ul><li>名称: modifyProduct.jsp </li></ul></ul><ul><li>编写执行更改商品功能的 JSP 程序 </li></ul><ul><ul><li>名称: modifyProduct_do.jsp </li></ul></ul>
  122. 122. 商品管理 <ul><li>编写查看所有商品信息的 JSP 程序 </li></ul><ul><ul><li>名称: viewProduct.jsp </li></ul></ul><ul><li>编写主程序 index.html ,将所有功能整合在一个页面上。 </li></ul><ul><li>添加商品 </li></ul><ul><li>删除商品 </li></ul><ul><li>更改商品信息 </li></ul><ul><li>查看所有商品 </li></ul><ul><li>查看所有商品类型 </li></ul>
  123. 123. 分页显示实例( page310 ) <ul><li>开发一个页面控制的 javabean 程序 </li></ul><ul><ul><li>名称: PageBean.java </li></ul></ul><ul><ul><li>属性: 当前是第几页,总页数,总行数,每页行数,本页中要显示的内容 </li></ul></ul><ul><ul><li>其中:总页数的计算如下: </li></ul></ul><ul><ul><li>if( 总行数 % 每页行数 )==0 </li></ul></ul><ul><ul><li>总页数 = 总行数 / 每页行数 </li></ul></ul><ul><ul><li>else </li></ul></ul><ul><ul><li>总页数 = 总行数 / 每页行数 +1 </li></ul></ul>
  124. 124. 分页显示实例 <ul><li>开发一个与逻辑业务相关的 javabean 程序 </li></ul><ul><ul><li>名称: ContactBean.java </li></ul></ul><ul><ul><li>连接数据库 </li></ul></ul><ul><ul><li>定义一个返回查询总记录数的方法 </li></ul></ul><ul><ul><li>定义获取指定页面数据的方法,结果返回 </li></ul></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×