1、第一章,动态网站开发基础,课程地位,相关课程回顾,为什么说HTML是静态网页技术?为什么说JavaScript是一种客户端脚本语言?什么是多态?多态带给我们的好处是什么?,本门课程技能结构图,预习检查,大家已经学会了HTML,为什么要学习JSP?B/S程序与C/S程序对比的优势有哪些?举例说明什么是URL?,本章任务,完成一个新闻发布系统的静态网页原型,包括如下功能: 后台管理模块(标题录入;文件上传) 新闻前台显示模块(各级标题下的新闻显示) 能够在Eclipse中部署运行该静态新闻发布系统,掌握B/S开发的基本概念 动态网页 pk 静态网页 B/S程序 pk C/S程序 B/S开发涉及的技
2、术内容开发JSP动态网站的基本步骤 掌握Web系统的工作目录 创建Web工程与HTML、JavaScript文件 实现Web工程的部署与运行 进行Web系统的调试与排错,本章目标,为什么需要动态网页,静态网站有哪些局限性?,要完成这一切,我们需要使用动态网页,1、无法实现搜索、登录、购买等交互功能,2、无法对静态页面的内容在线更新,什么是动态网页,生活中的动态网页,可以根据不同的输入,返回不同的网页,这就是动态网页,怎样实现动态网页,Google如何保存业务数据?Google如何实现业务数据的动态展示?,要掌握这一切,我们首先需要了解B/S技术,为什么学习B/S技术,C/S的局限性,中心局域网
3、 特定用户群中资源共享,B/S带给我们的全新体验,数据库服务器,学生机1,学生机2,学生机n,需要安装客户端软件,Google服务器,Internet 全球用户群中资源共享,美国用户,中国用户,数据库 服务器,无需安装客户端软件,什么是B/S技术,B/S是浏览器端/服务器端,程序完全放在服务器上,不用在浏览器上安装任何文件,它是基于Internet的产物,应用 服务器,数据库 服务器,IE,Netscape,IE,Internet,在应用服务器中布署运行程序,B/S技术特点,B/S中浏览器端与服务器端采用请求/响应模式进行交互,应用 服务器,数据库 服务器,IE,IE,解释执行 HTML文件,
4、从服务器端检索到的信息,返回响应,客户端的请求信息,发送请求,运行JSP等服务器端脚本程序,1,用户输入,2,3,4,B/S开发涉及的技术内容,HTML,JavaScript,使用Java语言理解程序逻辑,B/S开发将涉及S1、S2、Y2所学的诸多课程,数据库,第一学期,第二学期,开发基于Struts/Spring/Hibernate/Ajax的网上信息发布平台,开发基于JSP/Servlet/JavaBean的网上交易系统,第二学年,使用JSP开发Web应用系统,使用Java实现面向对象编程,小结1,静态网页与动态网页的主要区别? 是否可以这样说:动态网页是静态网页的替代品? B/S程序与C
5、/S程序相比,有哪些优势和劣势?,开发JSP动态网站的步骤,1、创建一个Web项目 2、设计Web项目的目录结构 3、编写Web项目的代码 4、部署Web项目 5、运行Web项目,创建一个Web项目,1,在菜单栏选择:文件 新建 项目,2,在弹出的窗口中选择:MyEclipse J2EE Projects Web Project,3,输入Web项目名称(设置为news),以及其余相关信息,演示:创建一个Web项目,设计Web项目的目录结构,WEB-INF:该目录中内容不能对外发布,web.xml:Web应用的初始化配置文件,lib文件夹:存放以jar/zip形式表现的库文件,META-INF:
6、系统自动生成,存放系统描述信息,WebRoot:Web应用的根目录,src文件夹:存放Java源文件,静态文件(包括图片、样式表、HTML等)存放在Web应用的根目录下,一般按功能以文件夹形式分类,编写 Web 项目的代码,右键点击WebRoot 新建 HTML :创建一个新的HTML文件,在弹出的窗口中,选择文件路径、输入文件名称,填充HTML文件内容,演示:编写Web项目的代码,1,2,3,部署 Web 项目,窗口 首选项 MyEclipse Application Server Tomcat 5:配置Tomcat,点击部署图标 为Web项目添加web服务器 选择Tomcat 5 部署完成
7、,演示:部署Web项目,1,2,运行 Web 项目,点击运行图标 运行 Tomcat 5,Tomcat 5 启动服务,在控制台输出启动信息,开启IE窗口 输入正确的URL观看运行结果,演示:运行Web项目,1,2,3,什么是URL,URL:Uniform Resource Locator 即统一资源定位系统,就是我们通常所说的网址 URL是惟一能够识别Internet上具体的计算机、目录或文件位置的命名约定 URL的组成:,http:/localhost:8080/news/index.html,协议,主机IP地址 (有时包括端口号),主机资源的具体地址,存放HTML文件的实际物理目录,在运行
8、环境中,该路径对应WebRoot文件夹,小结2,请说明在Eclipse环境中,开发JSP动态网站的具体步骤 在index.html中有这样一行代码:点击该超链后可进入welcome.html网页中 请问:/sports/welcome.html是URL吗?并说明原因,奥运展播,Web程序的调试与排错,在运行Web程序时,我们常犯的一些错误有: 未启动Tomcat服务,或者没有在预期的端口中启动Tomcat服务 未部署Web应用,就试图运行Web程序 运行时,URL输入错误 存放文件的目录无法对外引用,如:文件放入了WEB-INF、META-INF等文件夹,错误1:未启动Tomcat,排除错误:
9、 启动Tomcat服务 如果在控制台上显示Tomcat服务已启动,观察端口号是否与预期端口号一致,按照实际端口号重新运行,错误现象,排错方法: 检查Tomcat服务能否正确运行,1,2,3,错误2:未部署Web应用,排除错误: 部署Web应用,排错方法:检查Web应用是否正确部署,尚未部署,错误现象,1,2,3,错误3:URL输入错误,排除错误:使用正确的URL,错误现象,排错方法: 检查URL,http:/localhost:8080/news/index.html,文件名称与路径要写对,查看菜单:项目属性MyEclipseWebWeb Context-root,协议,主机IP地址,1,2,
10、3,错误4:目录不能被引用,排除错误:把index.html文件拖至WebRoot文件夹下,错误现象,排错方法: 检查文件的存放位置,META-INF,WEB-INF文件夹下的内容无法对外发布,1,2,3,小结3,运行你的web程序时,如果浏览器提示404错误,可能的原因有哪些? 判断tomcat是否启动,或者是否在你预期的端口启动,最简单的方法是什么?,总结,在开发Web应用程序时,静态文件一般存放在什么位置? 以下哪些是正确的URL? 1、http:/ 2、file:/ 3、 4、 5、http:/:80 6、/news/welcome.html,Thank you,第二章,用集合存储对象
11、,回顾,什么是异常?Java中,如何进行异常处理?请说明throw 与 throws的区别与联系?,预习检查,List、Map是否都继承自Collection接口 ?请说明集合类ArrayList与 HashMap的区别?,本章任务,开发一套小型的新闻管理系统,完成如下功能: 使用集合类存储新闻标题 可以对新闻标题进行增、删、改、查使用英文名称关联不同的Accp学员,并实现对学员的增、删、改、查操作,掌握Java集合框架的常用接口 掌握常用集合类:ArrayList、LinkedList、HashMap,本章目标,为什么需要集合框架,如何存储每天的新闻信息?,如何存储ACCP课程的代码与课程信
12、息,能够通过代码方便地获得课程信息?,如果写程序时并不知道程序运行时会需要多少对象,或者,需要更复杂的方式存储对象那么,可以使用Java集合框架,来解决这类问题,一维数组,一一对应,每天的新闻总数不确定,显然无法再使用数组保存,存储一个班的学员信息,假定一个班容纳20名学员,Java集合框架包含的内容,1,接口,Collection,List,Map,2,具体类,List,ArrayList,LinkedList,Map,HashMap,3,算法,Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了 Ja
13、va集合框架位于java.util包中,Collections,提供了对集合进行排序、遍历等多种算法实现,采用键-值对的存储方式,长度可动态改变,采用线性列表的存储方式,长度可动态改变,List接口和ArrayList类 5-1,开发一套小型的新闻管理系统,要求如下: 可以存储各类新闻标题(包含ID、名称、创建者、创建时间) 可以获取新闻标题的总数 可以逐条打印每条新闻标题的名称,存储方式如何选择?,元素个数不确定,使用集合类,需要遍历元素,存储对象如何确定?,类型:新闻标题,属性:ID、名称、创建者、创建时间,List接口和ArrayList类 5-2,第一步,确定存储方式 1、ArrayL
14、ist类是List接口的一个具体实现类 2、ArrayList 对象实现了可变大小的数组 3、随机访问和遍历元素时,它提供更好的性能,当元素个数增加为11个,创建了一个新的数组,把原数组中元素复制进来,根据下标位置访问元素,List接口和ArrayList类 5-3,第二步:确定存储对象 1、创建类型:新闻标题 2、包含属性: ID、名称、创建者、创建时间,public class FirstLevelTitle private int id; /ID private String titleName; /名称 private String creater; /创建者 private Date
15、 createTime; /创建时间public FirstLevelTitle(int id, String titleName, String creater,Date createTime) this.id = id; this.titleName = titleName; this.creater = creater; this.createTime = createTime; public String getTitleName() return titleName; public void setTitleName(String titleName) this.titleName
16、= titleName; ,List接口和ArrayList类 5-4,第三步:具体实现 1、按照顺序依次添加各类新闻标题 2、获取新闻标题的总数 3、根据位置获取相应新闻标题 4、逐条打印每条新闻标题的名称,public class FirstLevelTitleDB1 public static void main(String args) FirstLevelTitle car = new FirstLevelTitle(1, “汽车“, “管理员“, new Date(); FirstLevelTitle test = new FirstLevelTitle(2, “高考“, “管理员
17、“, new Date(); List newsTitleList = new ArrayList(); newsTitleList.add(car); newsTitleList.add(test); System.out.println(“新闻标题数目为:“ + newsTitleList.size() + “条“); print(newsTitleList); public static void print(List newsList) for (int i = 0; i newsList.size(); i+) FirstLevelTitle title = (FirstLevelT
18、itle) newsList.get(i); System.out.println(i + 1 + “:“ + title.getTitleName(); ,1,2,3,顺序添加,位置从0开始,新闻标题数目为:2条 1:汽车 2:高考,控制台输出,4,从集合中取出后为Object类型,需要进行强制类型转换,List接口和ArrayList类 5-5,第三步:具体实现 1、在指定的位置添加新闻标题 2、判断是否已经存储了某条新闻标题 3、删除指定位置处的某一新闻标题,public class FirstLevelTitleDB2 public static void main(String ar
19、gs) FirstLevelTitle car = new FirstLevelTitle(1, “汽车“, “网站管理员“, new Date(); FirstLevelTitle test = new FirstLevelTitle(2, “高考“, “网站管理员“, new Date(); FirstLevelTitle house = new FirstLevelTitle(3, “房产“, “网站管理员“, new Date(); List newsTitleList = new ArrayList(); newsTitleList.add(car); newsTitleList.a
20、dd(test); newsTitleList.add(2,house); if(newsTitleList.contains(test)System.out.println(“有高考的新闻“); elseSystem.out.println(“没有高考的新闻“); newsTitleList.remove(1); System.out.println(“新闻标题数目为:“ + newsTitleList.size() + “条“); ,1,2,3,在指定的位置添加元素,有高考的新闻 新闻标题数目为:2条,控制台输出,小结1,创建一个类Cat 包含属性name,在构造方法中进行初始化 添加一个
21、方法show(),用以打印name属性的值 创建一个类CatTest,添加main方法,实现 创建一个ArrayList,向其中添加几个Cat对象 遍历该集合,并且对每个Cat对象调用show()方法,完整代码实现,List接口和LinkedList类 3-1,升级这套小型的新闻管理系统,要求如下: 可以添加头条新闻标题 可以删除末条新闻标题,存储方式如何选择?,元素个数不确定,使用集合类,需要在列表的头或尾添加、删除元素,List接口和LinkedList类 3-2,第一步,确定存储方式 1、LinkedList类是List接口的一个具体实现类 2、LinkedList 类用于创建链表数据结
22、构 3、插入或者删除元素时,它提供更好的性能,List接口和LinkedList类 3-3,第二步:具体实现 1、添加头条、以及最末条新闻标题 2、获取头条、以及最末条新闻标题 3、删除头条、以及最末条新闻标题,public class FirstLevelTitleDB3 public static void main(String args) FirstLevelTitle car = new FirstLevelTitle(1, “汽车“, “管理员“, new Date(); FirstLevelTitle medical = new FirstLevelTitle(2, “医学“,
23、“管理员“,new Date();LinkedList newsTitleList = new LinkedList(); newsTitleList.addFirst(car); newsTitleList.addLast(medical);FirstLevelTitle first = (FirstLevelTitle) newsTitleList.getFirst(); System.out.println(“头条的新闻标题为:“ + first.getTitleName(); FirstLevelTitle last = (FirstLevelTitle) newsTitleList.
24、getLast(); System.out.println(“排在最后的新闻标题为:“ + last.getTitleName();newsTitleList.removeFirst(); newsTitleList.removeLast(); ,1,2,3,小结2,创建一个类Stack,代表堆栈(其特点为:后进先出),添加方法add(Object obj)、以及get(),添加main方法进行验证,要求: 使用LinkedList实现堆栈 在向LinkedList中添加时,使用addLast方法 在从LinkedList中取出时,使用removeLast方法,完整代码实现,Map接口和Has
25、hMap类 4-1,Accp学员应聘至外企工作,每个学员都会有一个英文名称,对应该学员对象,Jack,西苑中心毕业的李明,Rose,西苑中心毕业的刘丽,现在希望通过英文名称,获得该学员对象的详细信息,如何实现?,存储方式如何选择?,元素个数不确定,使用集合类,通过key(英文名称)获得value(学员对象),存储对象如何确定?,类型:Accp学员,属性:中心名称、姓名,Map接口和HashMap类 4-2,第一步,确定存储方式 1、Map接口用于维护“键-值对”的关联性,可以通过键查找值 2、HashMap是Map接口的一个具体实现类,Map接口和HashMap类 4-3,第二步:确定存储对象
26、 1、创建类型:Accp学员 2、包含属性:中心名称、姓名,public class AccpStudent private String name; / 学员姓名 private String school; / 中心名称public AccpStudent(String name, String school) this.name = name; this.school = school; public String toString() return school+“毕业的“+name; ,重写Object的toString()方法,用于输出调试和描述信息,Map接口和HashMap类
27、4-4,第三步:具体实现 1、把英文名称与学员对象按照“键-值对”的方式存储在HashMap中 2、分别打印键集、值集、以及键-值对集合 3、判断是否存在某个键,如果是,则根据键获取相应的值 4、根据键、删除某条记录,public class MapTest public static void main(String args) AccpStudent student1 = new AccpStudent(“李明“, “北京中心“);AccpStudent student2 = new AccpStudent(“刘丽“, “天津中心“);Map students = new HashMap(
28、);students.put(“Jack“, student1);students.put(“Rose“, student2);System.out.println(“键集:“+students.keySet();System.out.println(“值集:“+students.values();System.out.println(“键-值对集合:“+students);String key = “Jack“;if(students.containsKey(key)System.out.println(students.get(key);students.remove(key);Syste
29、m.out.println(“键-值对集合:“+students); ,1,2,3,键集:Jack, Rose 值集: 北京中心毕业的李明, 天津中心毕业的刘丽 键-值对集合:Jack=北京中心毕业的李明, Rose=天津中心毕业的刘丽北京中心毕业的李明 键-值对集合:Rose=天津中心毕业的刘丽,控制台输出,4,小结3,创建一个类Book 包含属性:title(标题),使用构造方法进行初始化 重写toString()方法,用以返回Title属性的值 创建一个类BookTest,添加main方法,要求: 使用HashMap进行存储,键为Book对象的编号,值为Book对象 通过某一个编号获取B
30、ook对象,并打印该Book对象的标题,完整代码实现,使用集合框架注意事项,Object,Object,Object,加入集合,从集合中取出,(Rabbit) object,(Car) object,(Student) object,Rabbit,Car,Student,Rabbit,Car,Student,任何对象加入集合类后,自动转变为Object类型;取出时,需要进行强制类型转换,恢复为特定的类型,总结 2-1,请给出下面Java代码的运行结果,import Java.util.*; public class TestMap public static void main(String
31、args) AccpStudent student1 = new AccpStudent(“李明“, “西苑中心“);AccpStudent student2 = new AccpStudent(“刘丽“, “西苑中心“);AccpStudent student3 = new AccpStudent(“张娜“, “马甸中心“);AccpStudent student4 = student1;Map students = new HashMap();students.put(“Jack“, student1);students.put(“Rose“, student2);students.put
32、(“Mary“, student3);students.put(“Rose“, student4);System.out.println(“键集:“+students.keySet();System.out.println(“值集:“+students.values(); ,键集:Jack, Mary, Rose 值集: 西苑中心毕业的李明, 马甸中心毕业的张娜, 西苑中心毕业的李明,总结 2-2,public class FirstLevelTitleDB public static void main(String args) FirstLevelTitle car = new First
33、LevelTitle(1, “汽车“, “管理员“, new Date(); FirstLevelTitle test = new FirstLevelTitle(2, “高考“, “管理员“, new Date();List newsTitleList = new ArrayList(); newsTitleList.put(car); newsTitleList.put(test); print(newsTitleList); public static void print(ArrayList newsList) for (int i = 0; i newsList.size(); i+
34、) FirstLevelTitle title = (FirstLevelTitle)newsList.get(i); System.out.println(i + 1 + “:“ + title.getTitleName(); ,应使用add方法向ArrayList中添加元素,无法接收List类型的参数。采用面向接口编程的思想,此处改为List,请指出下面Java代码中的错误,Thank you,访问数据库,第三章,回顾,List、Map是否都继承自Collection接口 ?请说明集合类ArrayList与 HashMap的区别?,预习检查,JDBC的英文全称是什么?JDBC的主要作用是什
35、么 ?PreparedStatement与Statement相比,具有什么优势?,本章任务,开发一套新闻管理系统,完成如下功能: 把新闻一级标题存储在数据库中 对新闻一级标题进行增、删、改、查,掌握JDBC的工作原理 掌握如何获取数据库连接 掌握如何对数据进行增、删、改、查,本章目标,为什么需要JDBC,JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力,Java应用程序,JDBC,JDBC,JSP/Servlet,客户端,数据库服务器,应用服务器,数据库服务器,客户端,JDBC程序的工作原理,JDBC API 提供者:sun公司 内容:供程序员调用的接口与类,集成在java
36、.sql和javax.sql包中,如: DriverManager类 Connection接口 Statement接口 ResultSet接口 DriverManager 提供者:sun公司 作用:载入各种不同的JDBC驱动 JDBC 驱动 提供者:数据库厂商 作用:负责连接各种不同的数据库,Sql Server,Oracle,JDBC API,JDBC Driver Manager,JDBC 驱动,JDBC 驱动,Java 应用程序,JDBC API,JDBC API可做三件事:与数据库建立连接、执行SQL 语句、处理结果,Connection,DriverManager,Statement,ResultSet,DriverManager :依据数据库的不同,管理JDBC驱动Connection :负责连接数据库并担任传送数据的任务 Statement :由 Connection 产生、负责执行SQL语句ResultSet:负责保存Statement执行后所产生的查询结果,客户端,数据库服务器,1,2,3,4,