1、基于Java EE的Web开发技术,苗锡奎 Tel :8355085 Email: QQ:250750068,课程内容,俯瞰Java EE Java EE实战(结合一个小项目),俯瞰Java EE,Java EE的整体把握 Java EE软件的架构,Java EE实战,Eclipse工具的使用 MyEclipse的使用 Dreamweaver的使用(美工工具) Tomcat,Mysql的使用 Java EE软件开发的一般过程,Java EE概览(Java 2平台已成为历史),Java ME概览 Java Platform Micro Edition,Java平台微型版。 Java SE概览Ja
2、va Platform Standard Edition,Java 平台标准版。 Java EE概览(重点讲) Java Platform Enterprise Edition,Java 平台企业版。Java1.0版终于在1996年年初正式发表,Java EE概览,Java EE核心是一组技术规范与指南。Java EE是建立在Java 平台上的企业级应用开发的解决方案。Java EE技术的基础便是Java 平台,不但具有Java SE平台的所有功能,同时还提供了对EJB,Servlet,JSP,XML等技术的全面支持。,Java EE概览,Java EE技术的基础就是Java SE。 Java
3、 EE已经成为企业级开发的工业标准和首选平台。 其最终目标是成为一个支持企业级应用开发的体系结构,简化企业级开发,部署和管理等复杂问题。,Java EE都包含什么?,企业应用的复杂性导致Java EE包含内容的复杂性。 Java EE包括JSP,JavaBean, JDBC,Servlet JNDI,RMI, EJB,JMS,JavaMail,JMX, JTA(API),JCA,JAF等13种核心技术。 学习前4项技术,要学明白就够用了。你就可以称得上一个Java EE WEB的程序员了。 为了这个目的下面就努力学习吧!,Java EE软件的架构,2-层体系架构 3-层体系架构 N-层体系架构
4、 Java EE各项技术工作在哪个层上,2-层体系架构- jsp+javabeans,Model1(最简单,最原始的开发模式) 结合业务逻辑(JavaBean)和JSP技术来实现业务逻辑和流程控制,来完成应用开发(优缺点),MVC - jsp+javabeans+servlets,MVC是ModelViewController的简写。“Model” 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), “View” 是应用的表示页面(由JSP页面产生),“Controller” 是对业务流程的控制(一般是一个Servlet),通过这种设计模式把-应用逻辑,处理过程和显示页面分成不同
5、的组件实现。这些组件可以进行交互和重用。(优缺点),MVC - jsp+javabeans+servlets,模型(Model)部分负责 业务逻辑 javabeans 视图(view)部分负责 显示界面jsp 控制器(controller)负责与用户进行交互作用:接受用户的请求,调用Model操作数据库,选择相应的视图展现给用户servlet Action,MVC关系图,模型(Model) 封装程序内部的数据状态 封装业务处理方法 内部状态改变时通知视图,视图(view) 显示模型中的数据 接受模型的数据 将用请求作传递给控制器,Controller(控制器) 接受用户操作 调用模型的业务处理
6、方法 选择相应用户造作的视图,数据状态查询,调用模型,获取数据,选择视图,截获用户请求,3-层体系架构- jsp+javabeans+servlets,Model 2,基于Java EE企业级WEB应用的体系结构,分层的思想引入到软件领域 分层的优势与劣势,数据层,DB,Web 服务器,业务层,表示层,N-层体系架构(n=4)(俯看),21天学通Java EE -人民邮电出版社 Jsp基础教程,精通Struts基于MVC的Java.Web设计与开发。 最重要的是官网上的帮助文档 ,系统的架构,浏 览 器,视图 JSP,控制器,模型,Hibernate,DB,选择,实例化,请求,响应,
7、struts-config.xml,hibernate-config.xml,映射文件,第一层,第二层,第三层,第四层,目标 -学习前4项技术,JDBC, JSP,JavaBean , Servlet 准备工作,容器-充当中间件的角色,WEB容器:也可以叫WEB服务器,给处于其中的应用程序组件(JSP,Servlet等)提供一个运行环境,我们只与容器打交道,容器管理我们写好的jsp,servlet等文件,我们不需要了解容器如何管理的。tomcat 一个例子去钟表厂买个钟表,我们当需要看时间的时候只要会读数即可,钟表是如何工作的我们去关系它,是钟表这个容器自己管理自己的各个零件。,JDK,JDK
8、(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有编译,调试和运行Java语言写的applet和应用程序所需的工具组成。 包括了Java运行环境(Java Runtime Envirnment),Java工具和Java基础的类库,不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握 JDK是学好Java的第一步。,JDK的安装,JDK的下载可以到SUN公司的官方站进行下载.当前最新版是jdk6,网址为: http:/ JDK的安装十分简单,一路下一步,直到完
9、成安装。 配置环境变量 右键:我的电脑属性高级环境变量在 (为你自己当前使用的账户) “用户 变量”或是“系统变量”中都可以点击,新建建立三个环境变量:1)变量名:path 变量值: D:Javajdk1.5.0_06bin 2)变量名:java_home 变量值: D:Java Javajdk1.5.0_06 3)变量名:classpath 变量值: .;D:Javajdk1.5.0_06libtools.jar;D:Javajdk1.5.0 06libdt.jar;D:Javajdk1.5.0_06jrelibrt.jar;,工欲善其事,必先利其器-IDE,Integrated Devel
10、op Environment-集成开发环境 Eclipse MyEclipse (推荐) NetBeans(要求机器配制高) JBuilder,Eclipse的下载、安装、配置,下载地址:http:/www.eclipse.org/downloads/ Eclipse的安装将下载的压缩包解压,然后将整个目录移动到你想要的位置。,MyEclipse的下载、安装、配置,MyEclipse插件是什么 简单而言,MyEclipse是Eclipse的插件,也是一款功能强大的Java EE集成开发环境,支持代码编写、配置、测试以及除错。 MyEclipse是一个专门为Eclipse设计的商业插件和开源插件
11、的完美集合。MyEclipse为Eclipse提供了一个大量私有和开源的Java工具的集合,很大程度上解决了各种开源工具的不一致和缺点问题,并大大提高了Java和JSP应用开发的效率。 MyEclipse的实际价值来自其发布的大量的可视化开发工具和实用组件。如CCS/JS/HTML/XML的编辑器,帮助创建EJB和Struts项目的向导并产生项目的所有主要的组件如Action/Session Bean/Form等,此外还包含编辑Hibernate配置文件和执行SQL语句的工具。,数据库方面,推荐使用Mysql和Oracle 不推荐使用sqlServer系列,开发与运行环境,选择开源优势 编码与
12、设计工具: Eclipse3.2.1 开源 Java EE辅助工具MyEclipse 非开源 数据库服务器: Mysql 5.0.21 开源 web应用服务器: Tomcat 6.0 开源,安装顺序,JDK TOMCAT Eclipse MyEclipse Mysql,目标之一:JDBC之旅,What is JDBC ?JDBC(Java DataBase Connectivity,中文意为Java数据库连接)是在Java中用面向对象的方法来连接数据库的技术。,JDBC的主要类包,java.sql包,提供在Java中访问和处理存储于客户端数据源中数据的API。 javax.sql包,提供在Ja
13、va中访问和处理存储于服务器端数据源进行的API。,JDBC可访问的数据源,关系型数据库,如:Oracle,DB2,SQL Server,My SQL,Access等。Excel等。 DBase,Foxpro,Paradox等。,JDBC的驱动程序,要想与特定的数据库产品打交道,如mysql就必须要提供连接该数据库的驱动文件(.jar) Mysql :mysql-connection.jar Oracle :classes12.jar,JDBC连接数据库的方法,Java 程序连接数据库的方法实际上有下面4种。,JDBC连接数据库的方法,JDBC-ODBC桥和ODBC驱动程序。 本机代码和Jav
14、a驱动程序。(经常使用) JDBC网络的纯Java驱动程序。 本机协议纯Java驱动程序。,本机代码和驱动程序连接数据库的步骤,加载要使用的数据库驱动类,该工作由Class类的静态方法forName完成,它加载相应的驱动程序类,并创建该类的一个实例。如下语句: Class.forName(“org.gjt.mm.mysql.Driver“);,本机代码和驱动程序连接数据库的步骤,声明一个Connection接口的对象。如:Connection conn; 并使用DriverManager类的静态方法getConnection建立数据库连接,该方法主要有两种重载形式: Connection ge
15、tConnection(String url) Connection getConnection(String url,String user,String password) conn = DriverManager.getConnection(“jdbc:mysql:/localhost:3306/test“, “root“, “root“);,java.sql包中与数据库操作有关的接口,Connection Statement ResultSet PreparedStatement CallableStatement,设置可滚动的ResultSet类型,一般在创建结果集的通常使用如下方式
16、: Statement st = conn.CreateStatement() ResultSet rs = Statement.excuteQuery(sql); 由于这种结果集不支持滚动的读去功能所以如果获得这样一个结果集,只能使用它里面的next()方法,逐个的读去数据。在使用的时候非常的不便。那么怎么样才能使结果集可以支持前后滚动的效果呢? 要实现可以滚动的ResultSet在创建Statement时用如下的方法。,设置可滚动的ResultSet类型,Statement st = conn.createStatement(int resultSetType, int resultSet
17、Concurrency) ResultSet rs = st.executeQuery(sqlStr) 其中两个参数的意义是: resultSetType是设置ResultSet对象的类型可滚动,或者是不可滚动。取值如下: ResultSet.TYPE_FORWARD_ONLY只能向前滚动 ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个方法都能够实现 任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。 resultSetConcurency是设置R
18、esultSet对象能够修改的,取值如下: ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。 ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。 所以如果只是想要可以滚动的类型的Result只要把Statement如下赋值就行了。,设置可滚动的ResultSet类型,Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = st.excuteQuery(sqlStr);
19、这时得到的就是可滚动的ResultSet。 这个类型支持前后滚动取得纪录next()、previous(),回到第一行first(),移到最后一行last()等操作。,目标之二:JSP之旅,目标之二: JSP之旅,What is JSP?Java Server Pages,JSP是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag)。 JSP跨平台。编译后运行,运行效率高。 缺点: 开发运行环境较ASP、PHP等复杂一些。,JSP没有什么深奥的东西 就是在HTML中嵌
20、入Java代码和一些JSP标签构成。, JSP 页面 ,JSP,JSP,脚本元素,指令元素,标准动作,html,嵌入java代码的标记-脚本元素,JSP 指令元素,JSP 指令,page,include,taglib,JSP 指令元素,page 指令用于设置 JSP 页面的属性include 指令用于在jsp页面中静态包含一个文件,该文件可以是jsp页面,HTML页面.taglib指令可以让JSP页面使用特定的标签,JSP 标准动作,动作语法包括,和, 。,总结,JSP 页面的组成,即静态HTML、脚本元素和 JSP 指令、 JSP 标准动作。 JSP 表达式包括在 内; Scriptlet
21、包含在内;声明包含在内 JSP 指令共有三种类型,即 page、include 和 taglib。JSP 指令包括在 内 page 指令用于设置 JSP 页面的属性;include 指令用于在 JSP 页面嵌入其他文件 ;taglib 指令用于在JSP页面中使用标签,JSP 页面元素,静态内容,指 令,表达式,Scriptlet,JSP 页面,HTML静态文本,以“ ” 结束。比如: ,声 明,动作,以“ ” 结束 比如:,注释,JSP内置对象,JSP 有以下九种内置对象,包括: request,请求对象 response,响应对象 pageContext,页面上下文对象 session,会话
22、对象 application,应用程序对象 out,输出对象 config,配置对象 page,页面对象 exception,例外对象,内置对象,输入输出对象,内置对象,request,请求对象 response,响应对象 session,会话对象 application,应用程序对象,request 对象,表示客户端对网页的请求 实现 HttpServletRequest接口 使用 HTTP 协议处理客户端的请求,客户端,表示并存储客户端的请求,服务器,request对象常用方法,1:String getParameter(String name)根据页面表单组件名称获取请求页面提交数2:S
23、tring getParameterValues (String name)获取页面请求中一个表单组件对应多个值时的用户的请求数据,request对象常用方法,1:request.setAttribute(key,value);2:request.getAttribute(key,value);,response对象常用方法,处理 JSP 生成的响应 将响应发送给客户端 实现javax.servlet.http.HttpServletResponse 接口 使用 HTTP 协议将响应发送给客户端,客户端,存储信息,以在响应客户端 请求时发送此信息,服务器,response对象常用方法,1:vo
24、id setContentType (String name)设置作为响应生成的内容的类型和字符编码2:void sendRedirect (String name)发送一个响应给浏览器,指示其应请求另一个URL,session,application对象常用方法,session,application对象常用方法与request对象常用方法相同。,目标之三:JavaBean之旅,JavaBean是使用Java语言编写的组件。组件是组成一个大的系统的一部份。组件能够完成特定的功能,并且这些功能主要是共享的。 JavaBean是一种特殊的Java类。特殊在:通常要提供无参数的构造方法;外界不需要
25、知道它的具体实现,通常属性是私有的,需要提供公有的对属性进行操作的方法;应该有一些业务方法。,JavaBean 是可重用组件,可重用组件,可在多个应用程序中使用,可以跨平台,JavaBean 的优点,JavaBean的存放目录,WEB-INF/classes/javabean.class JavaBean特性 它是一个公开的public类 它有一个默认的构造方法,也就是不带参数的构造方法(在实例化JavaBean对象时,需要调用默认的构造方法) 它提供setXXX()方法和getXXX()方法来让外部程序设置和获取JavaBean的属性。 例子: 一个String 类型的name属性对应的方法
26、: public String getName() public void setName(String name)符合上述条件的类就可以看成是JavaBean组件,在JSP中如何调用JavaBean,创建对象(在jsp中一定要先导入JavaBean类)作用:实例化JavaBean的对象,或者查找到JavaBean的对象。 id属性表示创建的对象的名字,class是JavaBean的完整类名,scope属性指出创建的变量的作用范围。 例:,scope作用范围,scope的作用范围有4个:page request session application page表示当前页面,实际上是当前的JSP
27、文件对应的Java类的对象; request表示一次请求,从我们发送出去请求开始到系统对我们进行相应,这之间就是一次请求。如果一次请求只涉及一个JSP页面,page和request的效果是相同的。 session,表示会话。对于Web应用的每个客户端来说都对应一个对象,这个对象就是session,在客户端的整个访问过程中都有效。 application,表示应用。如果把JavaBean对象的作用范围设置为application,这个应用的所有的用户在所有的界面都可以访问这个对象。,在JSP中如何调用JavaBean,对属性赋值name指出JavaBean对象的名字,property指出属性的名
28、字,value要赋的值。 例:,在JSP中如何调用JavaBean,嵌入Java代码调用方法获取JavaBean属性 ,设置JavaBean的属性,动作和一起使用,使用Bean中的setXXX()方法设置JavaBean的属性,设置JavaBean的属性,通过http表单的参数来值来设置bean的相应的属性的值,这要求表单的名字与bean的属性名字相同 ,取出JavaBean的属性,动作和一起使用来获取JavaBean的属性,目标之四:Servlet之旅,Servlet (java服务器端程序)是一个用 Java 编写的程序,此程序在服务器上运行以处理客户端请求。是按照Servlet规范编写的
29、java类。Servlet是JSP的基础。,目标之四:Servlet之旅,请求,客户端,响应,Servlet 运行于服务器上,Servlet 体系结构,Servlet API,Servlet的框架是由两个java包组成:javax.servlet和javax.servlet.http javax.servlet包中定义了所有的servlet类都必须实现的接口和类。 javax.servlet.http包中定义了采用HTTP协议通信的HttpServlet类 Servlet的框架的核心是:javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口.,javax.ser
30、vlet 包 javax.servlet 包的接口,ServletConfig 接口,在初始化的过程中由 Servlet容器使用,ServletContext 接口,定义 Servlet 用于获取来自 其容器的信息的方法,ServletRequest 接口,向服务器请求信息,ServletResponse 接口,响应客户端请求,javax.servlet 包 javax.servlet 包的接口,ServletInputStream 类,用于从客户端读取 二进制数据,ServletOutputStream 类,用于将二进制数据 发送到客户端,javax.servlet.http 包 javax
31、.servlet.http 包的接口,HttpServletRequest 接口,提供 HTTP 请求信息,HttpServletResponse 接口,提供 HTTP 响应,HTTP Servlet 基础知识,HttpServlet 类提供一个抽象类以创建 HTTP Servlet,public void doGet(HttpServletRequest req,HttpServletResponse res),doGet() 方法处理客户端作出的 GET 请求。,public void doPost(HttpServletRequest req,HttpServletResponse re
32、s),doPost() 方法处理客户端作出的 POST 请求。,HTTP Servlet 基础知识,有两个参数:req和res,这两个类实现了HttpServletRequest接口和HttpServletResponse接口 HttpServletRequest接口中封装了客户请求信息.如客户请求方式,HTTP头信息,参数名,参数值,客户端正在使用的协议,以及发出客户请求的远程主机信息等 HttpServletResponse接口为Servlet提供了返回相应结果的方法,Servlet 的生命周期,Servlet 容器创建 Servlet 的一个实例 Servlet 的生命周期就是指创建 S
33、ervlet 实例之后其存在的时间以及消失的时间。 生命周期的 3个方法为:,init(),service(),destroy(),Servlet 的生命周期,生命周期的各个阶段为:,实例化,Servlet 容器创建 Servlet 的实例,初始化,该容器调用 init() 方法,服 务,如果请求 Servlet,则容器调用 service() 方法,销毁实例之前调用 destroy() 方法,销 毁,Servlet实现:Servlet接口,service方法: 客户请求和响应调用该方法,释放内存、关闭Web服务器调用destroy方法,Servlet实现GenericServlet和Http
34、Servlet,我们自己编写的servlet要继承HttpServlet,一般要覆盖doPost或者doGet方法。HttpServlet类的doGet方法用于接收Get请求,doPost方法用于接收Post请求。,Servlet实现: GenericServlet和HttpServlet,servlet收到一个请求,调用public的service()方法,把参数分别转换为HttpServletRequest和HttpServletResponse,这个public的service()方法调用protected的service()方法,根据HTTP请求方法的类型,protected的serv
35、ice()调用doXXX()方法之一,一般重写doXxx()方法的原因,每当服务接收到对Servlet的请求时,服务器就会产生一个新线程,并调用Service。service方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并相应地调用doGet、doPost、doPut、doDelete等,小项目练习:用Servlet模拟用户登陆的功能,public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException String uname =
36、 req.getParameter(“uname“); String psw = req.getParameter(“userName“); String target = “; HttpSession session = req.getSession(); if(uname.equals(“jenny“) ,Struts简介,Struts简介,Struts是一个基于Sun J2EE平台的MVC框架,是MVC模式的一种实现。 Struts继承了MVC的各项特性,并根据Java EE的特点,做了相应的变化与扩展。 Struts能充分满足应用开发的需求,简单易用,敏捷迅速,颇受关注。,Struts
37、的结构,业务逻辑 业务逻辑更新模型的状态,并帮助控制应用程序的流程。就 Struts 而言,业务逻辑是由 Action 类完成的。 Action 类封装了具体的处理过程,调用业务逻辑模块,并将响应提交给合适的视图组件以产生响应。,Struts的结构,View(视图)jsp和ActionForm 视图就是一个 JSP 文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息只有标记。标记是使 Struts 有别于其他框架(如 Velocity)的因素之一。,Struts的结构,ActionForm 从以前我们所认识的ActionForm的用处来看,它似乎应该被视为应用的Model,然而事实上他们应当
38、被当作应用中controller的一部分。ActionForm bean中显示了model的属性,但它们不包含任何持续性逻辑或者业务逻辑。ActionForm只是用来在Model、View之间传递Model信息。 因此ActionForm属于controller中的一部分。 但是我认为把ActionForm归到View更合适,Struts 框架的组成,控制类的基本功能 (1)将客户请求映射到相应的Action类,如果该类第一次收到请求,服务器将实例化该类。 (2)调用Action实例的exectue()方法。 (3) exectue()方法返回一个result code说明执行结果的Strin
39、g。 result code 并非一定对应一个将被执行的result(如JSP页面、Servlet或另一个Action),尽管通常如此。,Struts-快速入门,我们结合实例来讲解Struts的应用: 下载Struts,将其相关jar包引用到Web项目 在web项目的web.xml中配置Action影射,将相应请求动作交给Struts提供的ActionServlet类进行统一控制 在web.xm配置所需要用到的的Struts标签文件 建立ActionForm、Action 建立视图文件 注意这里没有建立Model的任何信息,原因是Struts没有明确规定model的具体实现细节。,Struts
40、-ActionFrom,ActionFrom是用来传输表单数据的对象,通过配置文件可以关联到对应的Action, 在实现view层与业务层之间的数据传输。 实现机制:Struts提供了一个org.apache.struts.action.ActionForm类,里面实现了将请求表单中的元素赋值给其具体的 实现类属性。因此自定义ActionForm类时,只需继承该类即可。在自定义ActionForm类时请保证其属性名称与所对应 表单名称一致。,Struts-ActionFrom,当触发Action时,通过配置文件匹配到对应ActionFrom实例,以参数形式传入。 ActionForm的实现虽然
41、简单,但是随着界面的增加,ActionForm类也会增加,造成代码膨胀。在Struts1.1以上版本提供了 ActionForm的另一个实现类,org.apache.struts.action.DynaActionForm,该类充当所有ActionForm的代理类,只需在配置ActionFrom时指定用该类实现即可,Struts-Action,Action充当了控制器的角色,每个请求都会触发到Action类,我们在这里处理逻辑业务,分发数据,链接转向。 其实现机制: 在web.xml配置影射规则,符合其影射条件的请求都会交给org.apache.struts.action.ActionServlet类处理, 在该类中将会实现org.apache.struts.action.Action类中的相应方法。在自定义Action类时只需继承该类, 实现execute方法, 即可让自定义的Action得到触发。 execute()方法中 ActionMapping、ActionForm实例通过读取配置文件获得。,实例的主要功能,登陆到系统的用户才能留言,否则只能浏览 登陆到系统需要注册 登陆后可以留言,并且可以自己的留言编辑和删除 管理员管理功能,结束,Thank You !,