韩顺平老师的Struts框架图(自己一点点画的)

合集下载

韩顺平轻松搞定网页设计(html.css.js)(完整版)

韩顺平轻松搞定网页设计(html.css.js)(完整版)

韩顺平轻松搞定网页设计(html.css.js)(完整版)LT轻松搞定网页设计html+css+javascript内容介绍该教程用循序渐进的手法和项目驱动的案例,由浅入深的讲解网页设计的基础部分和高级部分,包括以下内容:1、html详解;2、css(块级元素、行内元素、标准流盒子模型、浮动定位);3、div+css网页布局(盒子模型经典案例、仿sohu首页面布局);4、javascript深入讲解(js基本语法、数组、js面向对象编程,js系统函数、事件、js dom 编程详解、正则表达式)做web开发的程序员都知道,网页设计是web开发的重要部分,不管你是php web开发,还是java web、.net web都需要网页设计,说白了就是你的web程序的界面,以前的程序员可能不大注重界面,但是一个布局合理,设计优雅,简洁易用的网站界面无疑会给我们的项目增光添彩,这就好比一个你去推销一个产品,如果这个产品的包装非常精美漂亮,显然就会受到客户的欢迎。

我们这个视频专题就是详细深入的讲解如何做出符合商业要求的网页。

html是什么HTML(HyperText Mark-up Language)即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。

HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。

HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。

html可以做什么1、HTML可以编写静态网页;2、远程访问运行;[helloworld.html]示例:<html><head><title>第一个网页</title></head><body><font style="font-size:150px" size=7 color=red>hello,world</font></body></html>html的基本结构不管html文件有多复杂,它的基本结构如下: <元素属性='属性值'...>内容</元素>如果没有内容,可以这样写<元素属性='属性值'.../>--注:<>中的都是标记,标记是要成对出现如:<html>内容</html>元素也叫标记<p>段落标记</p><font size="">字体标记</font> <!--取值1到7--><h#>标题字体</h#> #=1,2,3,4,5,6<b>字体加粗</b>[html001.html]字体案例<html><!--(!----)为注释--><!--head是文件头部分--><head><!--title标题--><title>字体及颜色案例</title> </head><!--body是文件体--><body><!--我们html内容是放在body体中--> <p>第一行文字</p><!--p为段落标记--><p><b>第二行文字粗体</b></p><p><font color=#0269FE>第三行文字蓝色字</font></p><p><font size=7>第四行文字变大</font></p><font size=3>第五行字变小</font><br/><!--br为换行--></body></html>HTML符号实体--介绍在网页上显示一些特殊的符号,我们需要使用html的符号实体,有些人把它称为字符实体。

学习韩顺平之hibernate笔记

学习韩顺平之hibernate笔记

第一讲:Hibernate是什么?1、它是一个框架2、是一个orm框架(其它的apache ojb,ibatis,toplink)a)Orm(object relation mapping)对象关系映射框架b)O object-->业务层c)R relation-->关系数据库d)M mapping-->对象关系映射文件3、处于我们项目的持久层位置4、对JDBC的轻量级封装Hibernate的原理:1、相当于是一个翻译,业务逻辑层--->持久层-->数据库,所以业务逻辑层就不用关心用的是什么数据库,而直接和持久层打交道,持久层将从业务逻辑层得到的语句(并进行一系列优化)翻译成数据库的语句,实现一些功能。

这样当数据库变更时,我们就不用改动业务逻辑的一些sql语句。

2、每一层的耦合性减小,业务层和数据库层没有关系,可以达到轻松改变3、Hibernate可以用在j2se中4、Struts是web框架为什么有hibernate:以前我们换数据库需要重写SQL语句,和一些其它的语句,麻烦,第二讲:1、开发时一般先开发DB,在用工具生成mapping和domain2、Domain对象的名称首字母要大写3、Pojo (plain ordinary java object) 简单的JA V A对象和一张表对应(应该有一个键属性,有GET,SET方法,有一个无参的构造函数)4、对象关系映射文件:作用是用于指定domain对象和表的映射关系,取名:domain 对象。

Hbm.xml。

一般我们放在和domain对象同一个文件夹下(一个包下)5、创建一个sequencei.Create sequence emp_seqStart with 1Increment by 1Minvalue 1NomaxvalueNocycleNocache6、<hibernate-mapping><class name="Employee" table="employee" ><id name="id" column="id" type="ng.Integer"><!-- 该元素用于指定主健值生成策略hilo native increment sequence uuid --><generator class="sequence"><!-- 指定是哪一个sequence --><param name="sequence">emp_seq</param></generator></id><!-- 定义的属性--><property name="name" type="ng.String"><column name="name" not-null="false"></column></property><property name="email" type="ng.String"><column name="email" not-null="false"></column></property><property name="hiredate" type="java.util.date"><column name="hiredate" not-null="false"></column></property></class></hibernate-mapping>7、创建hibernate.cfg.xml并且配置<hibernate-configuration><session-factory><propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</p roperty><property name="ername">scott</property><property name="connection.password">tiger</property> <propertyname="connection.utl">jdbc:oracle:thin:@localhost:1521:orcl</prop erty><!-- 明确告诉hibernate连接的是哪类数据库 --><propertyname="dialect">org.hibernate.dialect.OracleDialect</property> <!-- 用于加载映射文件 --><mapping resource="com/yxl/domain/Employee.hbm.xml"/> </session-factory></hibernate-configuration>8、运用hibernatea)创建cfg对象,用于读取hibernate.cfg.xml的内容i.Configuration cfg = new Configuration.configure();b)创建sessionFactory这是一个会话工厂,是一个重量级的对象i.SessionFactory sf = configuration.buildSessionFactory();c)创建Session 相当于jdbci.Session session = sf.openSession();d)创建transactioni.Transaction transaction = session....();第四讲:一个数据库对应一个SessionFactory,它是单例的Pojo应该序列化,目的是唯一标识该对象,同时可以在网络上传输Hibernate 把对象分成三个状态:瞬时态,持久态,第五讲:<property name="show_sql">true</property>这是打印SQl语句<property name="hbm2ddl.auto">create</property>这是自动创建表的配置(如果有表则删除后重新创建一个表),也可以有update 这是更新表(如果以前的表没有改变结构,则更新值,如果没有表则创建)Mysql中没有sequence 用increment代替第六讲:编程格式:Try {......mit();} catch(Exception e) {e.printStackTrace();If(transaction!=null) {Transation.rollback();}} finally{If(session!=null&&session.isopen()) {Session.close();}}如果要自己定义主键号,则hbm.xml中的generator的策略用assigned第七讲:当configuration.configure(configNume) 这里的confignume有包名的话要写"com/yxl/config/hibernate.cfg.xml"1、Configuration 类A:读取hibernate.cfg.xmlB:管理对象关系映射文件C:加载hibernamte的驱动,url,用户D:管理hibernate配置信息注意事项:当配置时cfg.xml有包,则得把包名写在configure方法里2、..hbm.xml是一个表和对象的映射文件,一般和对象放在一个包下第八讲:1、SessionFactory :会话工厂:是一个interface作用:A:可以缓存sql语句和数据(称为session缓存)B:是一个重量级的类,比较吃内存,所以一个数据库对应一个SessionfacC:重点:用SessionFactory得到session的两个方法:1.openSession():是获取一个新的Session();2.getcurrentSession() 获取和当前线程绑定的session,就是在同一个线程获得的session是同一个。

最新韩顺平__jsp和selverlt原完整版课件_笔记_.doc

最新韩顺平__jsp和selverlt原完整版课件_笔记_.doc

最新韩顺平__jsp和selverlt原完整版课件_笔记_.doc◆背景知识介绍J2EE的13种技术java->servlet->jsp [技术总是有⼀个演变过程]zip粘贴到word设置◆回顾⼀下我们现有的技术java 基础(⾯向对象,集合,界⾯,线程,⽂件,⽹络)jdbc (java 的数据库编程)oracle / mysql / sqlserverhtml css javascript (web 开发) ->⽹页设计xmlserlvet+jsp ->java web开发[使⽤java技术做web开发]◆java ee 体系的介绍◆servlet项⽬演⽰◆web 开发介绍①静态页⾯(html)②动态页⾯1.⽤户可以输⼊数据,和页⾯交互(注册,购物,发帖⼦,付款...)2.不同时间打开页⾯,内容是变化.3.⽬前⽐较流⾏的左动态页⾯的技术( servlet/jsp , php , /doc/b83fffd680eb6294dd886c36.html , asp, cgi )◆动态⽹页技术的⽐较(了解)◆bs 和cs的⽐较(1)BS:browser server 浏览器服务器(2)cs client server 客户服务为什么需要的web服务器/web究竟是⼲什么的?模拟⼀个web服务器MyWebServer.javaimport java.io.*;import /doc/b83fffd680eb6294dd886c36.html .*;public class MyWebServer{public static void main(String []args) throws Exception{ServerSocket ss=new ServerSocket(80);Socket s=ss.accept();//提⽰⼀句话System.out.println("在9999 上等待连接...");OutputStream os=s.getOutputStream();BufferedReader br=new BufferedReader(new FileReader("d:\\hello.html"));String buf="";while((buf=br.readLine())!=null){os.write(buf.getBytes());}//关闭流br.close();os.close();s.close();}}◆通过tomcat来讲解BS结构◆安装tomcat服务器(1)解压即可(2)配置①在环境变量中添加JA V A_HOME= 指向你的jdk的主⽬录(并不是bin⽂件⽬录)②在不配置JA V AHOME的前提下启动tomcat 在startup.bat的第25⾏中添加set JA V A_HOME=JKD路劲(3)启动tomcat服务器到tomcat 主⽬录下bin/startup.bat(4)验证是否安装成功http://localhost:8080(8080是默认端⼝如果该端⼝已经被占⽤需要修改端⼝)◆tomcat安装后问题解决(1)tomcat⽆法正常启动的原因分析1.JA V A_HOME 配置错误,或者没有配置2.如果你的机器已经占有了8080 端⼝,则⽆法启动,解决⽅法(1) 你可以8080 先关闭netstat –annetstat –anb 来查看谁占⽤该8080(2) 主动改变tomcat的端⼝.到conf/server.xml ⽂件中修改server.xml的端⼝号)protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>(3) 能够正常启动,但是会导航到另外⼀个页⾯.去修改⼯具->管理加载项,把默认的导航给禁⽤即可.(4) 在访问tomcat时候,⼀定保证tomcat 服务器是启动◆tomcat的⽬录结构⽂件bin: 启动和关闭tomcat的bat⽂件conf: 配置⽂件-->server.xml: 该⽂件⽤于配置和server 相关的信息, ⽐如tomcat启动端⼝后,配置Host, 配置Context 即web应⽤-->web.xml : 该⽂件配置与web应⽤(web应⽤就相当于是⼀个web站点)-->tomcat-users.xml: 该⽂件⽤户配置tomcat 的⽤户密码和权限lib⽬录: 该⽬录放置运⾏tomcat 运⾏需要的jar包logs⽬录:存放⽇志, 当我们需要去查看⽇志的时候,很有⽤!,当我们启动tomcat错误时候,可以查询信息.webapps⽬录: 该⽬录下,放置我们的web应⽤(web 站点), ⽐如:建⽴web1 ⽬录下⾯放置我们的html ⽂件jsp ⽂件..图⽚... 则web1就被当做⼀个web应⽤管理起来(?特别说明tomcat 6.0 以后⽀持tomcat 5 版本还有别的设置)work: ⼯作⽬录: 该⽬录⽤于存放jsp被访问后⽣成的对应的server⽂件和.class⽂件如何去访问⼀个web 应⽤的某个⽂件◆⾸页⾯设置及⽬录规范结构现在我们要求:把hello.html⽂件设置成该web应⽤的⾸页,则需要把web应⽤的⽬录格式做的更加规范:①在web⽂件夹下配置WEB-INF⽂件夹②在web.xml ⽂件中添加配置的代码:hello1.html③通过http://localhost:8088/web1来访问hello1.htmlweb-inf⽬录下的classes⽬录将来是存放class⽂件lib ⽬录将来时存放jar⽂件web.xml 配置当前这个web应⽤的信息.◆tomcat如何去管理虚拟⽬录需求: 当我们把web 应⽤放到webapps⽬录,tomcat会⾃动管理,如果我们希望tomcat 可以管理其它⽬录下的web应⽤?->虚拟⽬录配置我在d 盘有⼀个web应⽤.◆虚拟⽬录配置步骤:①找到server.xml⽂件②编辑host节点添加Context path在server.xml中添加:myweb2:是访问时输⼊的web名,实际取出的是web2中的资源"d:\web2":绝对路径下web2中存放资源如:hello2.html实际访问时输⼊的地址:http://localhost:8088/myweb2/hello2.html绝对路径:从根分区找某个⽂件相对路径:从该⽂件位置去找另⼀个⽂件③需要重启tomcat,才能⽣效.(因为是采⽤的dom技术讲信息加载到内存中)◆context 的⼏个属性的说明path:docbase:reloadable;如果设为ture ,表⽰tomcat 会⾃动更新web应⽤,这个开销⼤,建议在开发过程中,可以设为true, 但是⼀旦真的发布了,则应当设为false;upackW AR: 如果设为ture ,则⾃动解压,否则不⾃动解压.①:打war包cd:d/web2 然后jar –cvf web2.war *②:浏览打好的war包Deploy发布后会在webapps中⾃动⽣存改⽂件◆配置域名我们看和⼀个如何配置⾃⼰的主机名:我们在实际访问⽹站的过程中,不可能使⽤http://localhost:8080/web应⽤/资源名的⽅式去访问⽹站,实际上使⽤类似/doc/b83fffd680eb6294dd886c36.html 或者/doc/b83fffd680eb6294dd886c36.html 的⽅式去访问⽹站,这个⼜是怎么实现的呢?看看ie浏览器访问⼀个web站点的流程.实现的步骤如下:(1) 在C:\WINDOWS\system32\drivers\etc 下的host⽂件添加127.0.0.1/doc/b83fffd680eb6294dd886c36.html(2) 在tomcat 的server.xml⽂件添加主机名(3) 在d:\web3 加⼊了⼀个/WEB-INF/web.xml 把hello2.html设为⾸页⾯如果连端⼝都不希望带,则可以吧tomcat的启动端⼝设为80即可.(4) 重启⽣效◆tomcat体系的再说明图:如何配置默认主机:在tomcat/conf/server.xml ⽂件◆为什么需要servlet技术?⽐如需求:我们希望⽤户可以贴,⽤户还可以回复....这样⼀些和⽤户可以交互的功能,⽤普通的java技术就完成不了, sun 就开发了servlet技术供程序员使⽤.◆servlet的介绍①servlet 其实就是java程序(java类)②该java 程序(java 类)要遵循servlet开发规范③serlvet是运⾏在服务端④serlvet 功能强⼤,⼏乎可以完成⽹站的所有功能⑤是学习jsp基础◆tomcat 和servlet 在⽹络中的位置servlet的⽣命周期是怎样的/servlet究竟是怎样⼯作的UML 时序图帮助⼤家理解参看execel⾯试题: 请简述servlet的⽣命周期(⼯作流程)答:标准版本:①WEB服务器⾸先会检查是否已经装载并创建了该servlet实例对象。

传智播客 韩顺平 zend framework

传智播客 韩顺平 zend framework
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
mvc框架mvc框架-zend framework 框架
讲师: 讲师:韩顺平
email:h77
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
zend framework 简介
主讲 韩顺平
目前流行的php 框架:
1. zend framework 2. thinkphp 3. kohana 4 cakephp 5 yii 6. qeephp 7. phpdevshell
Zend Framework ( (简写ZF)是由 Zend 公司支持 ZF) 开发的基于 PHP5 的php开发框架(开源),可用于 开发 Web 程序和服务,ZF采用 MVC(Model– View-Controller) 架构模式来分离应用程序中不同 的部分方便程序的开发和维护。
项目/applicaton 就 当用户直接访问 http://localhost/zf项目 项目 会提示
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
版数据采集系统zf 版数据采集系统-投票系统
主讲 韩顺平
Votesys.zip
Sql.zip
完成功能描述: 完成功能描述 用户可以每天对喜欢的商品投一次票. ① 用户可以每天对喜欢的商品投一次票 ② 后台程序可以增加新的投票选项 后台程序可以增加过滤某些ip 即不让某些ip投票 投票) ③ 后台程序可以增加过滤某些 (即不让某些 投票)
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Zend_Db_Table详解(2) Zend_Db_Table详解(2) 详解

最新韩顺平java笔记整理幻灯片课件

最新韩顺平java笔记整理幻灯片课件

servlet/jsp开发工具
普通的文本编辑器notepad,uedit32 集成开发工具jcreator,jbuilder,eclipse,editplus,netbean
servlet/jsp运行环境
Tomcat是一个免费的开源的servlet容器,它是Apache基金会的 Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司 及个人共同开发而成。
java.io.OutputStream
javax.servlet.ServletOutput
ng.Throwable
javax.servlet.UnavailableException
ng.Exception javax.servlet.ServletException
servlet中操作数据库
servlet操作数据库注意事项 需要将连接数据库的jar包,拷贝到tomcat服务器 具体有两种方法: 1)将jar包拷贝到tomcat目录下的lib文件夹里 2)在webapps目录的WEB-INF文件下建立一个lib文件夹,然后将 jar包拷贝到该文件夹下
4.因为session的各个属性要占用服务器的内存,因此软件公司都 是在迫不得已的情况下才使用
cookie vs session
1.存在的位置 cookie保存在客户端,session保存在服务器端 2.安全性 比较而言,cookie的安全性比session要弱 3.网络传输量 cookie通过网络在客户端与服务器端传输,而session保存在服务 器端,不需要传输
2.开发servlet(引入Tomcat文件夹下lib文件夹里的servlet-api.jar )
3.部署你的servlet(servlet开发流程)

J2EE项目实训Struts框架技术——第1 章 Struts框架技术(第2部分)

J2EE项目实训Struts框架技术——第1 章 Struts框架技术(第2部分)

第1 章Struts框架技术(第2/3部分)1.1.1Strust框架系统核心组件Struts的体系结构实现了MVC设计模式的概念,因此分别在模型(M)、视图(V)和控制器(C)三个方面提供了对应的技术支持组件,从而构成Strust框架系统中的核心功能组件。

1、Struts框架中与MVC设计模式相关的各个层组件1)Struts框架中各个层组件下图1.11所示为Struts框架所对应的MVC各个层中组件类之间的关系图,是对Web MVC 系统架构模式的标准实现。

从上图1.11中可以了解到Struts框架中的表示层中主要有下面的各个组件类——JSP 页面(包含表单)、表单数据的包装ActionForm组件和响应结果的JSP页面组件类;而在控制层中有前端控制器ActionServlet组件、ActionMapping组件、ActionForward组件和业务调度Action组件等;在模型层中没有提供基础性的功能组件,完全由开发者自己开发实现。

2)Strust框架的系统工作原理Struts框架的工作流程充分地体现了MVC系统的表示层和业务处理相互分离的特点,下图1.12所示为完成某个特定的请求处理的顺序图。

各逻辑层中的各个功能组件各司其职、但互相配合,并通过struts-config.xml文件中的各个配置项目来降低系统中的各个逻辑层之间的耦合性。

某个操作者用户在Web页面中假如发出/showInfo.do的Http表单请求,该请求将被前端控制器ActionServlet组件所接收;而ActionServlet组件将表单中的各个请求参数首先包装到ActionForm组件中,然后再根据在struts-config.xml文件中的<action-mapping>标签中所定义的Action 类的配置获得目标Action组件,并对该目标Action组件中的execute方法进行调用。

目标Action组件再从ActionForm组件中获得请求的参数、检查数据的合法性,并对具体业务功能组件中的业务方法进行调用,由业务功能方法完成特定的业务功能;业务方法返回执行后的结果,目标Action组件根据业务方法返回的结果再创建出包装目标页面的ActionForward组件,并将该ActionForward组件返回给前端控制器ActionServlet组件。

第3章 Struts框架结构

第3章 Struts框架结构
ActionMapping ,ActionMappings和Action以及 和 以及 ActionServlet之间的关系如图所示: 之间的关系如图所示: 之间的关系如图所示
基于Struts进行开发 进行开发 基于
现在的软件系统通常都会采用多层的体系结构。 现在的软件系统通常都会采用多层的体系结构。 如图
Struts工作流程 工作流程
Actit类 类
Struts的控制器将事件(通常是HTTP的POST、GET等 的控制器将事件(通常是 的控制器将事件 的 、 等 请求)映射到一个Serlvet类。 请求)映射到一个 类 控制器通过读取配置文件以使用户不必对这些值进行硬 编码。 编码。
Action类 类
Action类的用途 类的用途
将HttpServletRequest转换为业务逻辑。要使用Action 转换为业务逻辑。要使用 转换为业务逻辑 必须创建它的子类并且覆盖其process()方法。 方法。 类,必须创建它的子类并且覆盖其 方法
ActionForm类 类
ActionForm类 类
模型( 模型(Model) )
模型表示应用程序的状态, 模型表示应用程序的状态,业务对象更新应用程序 的状态。 的状态。
ActionForm Bean在与用户的会话范围或者请求范围内 在与用户的会话范围或者请求范围内 表示模型的状态,而不是在系统的持久层。 表示模型的状态,而不是在系统的持久层。JSP文件使 文件使 标记读取来自ActionForm Bean的信息。 的信息。 用JSP标记读取来自 标记读取来自 的信息
JSP开发模式 -1 开发模式
JSP开发模式 -2 开发模式
Struts结构 结构
控制器( 控制器(Controller) )

Struts2的架构和运行流程

Struts2的架构和运行流程

《研磨struts2》第三章Struts2的架构和运行流程3.1 Struts2的系统架构3.1.1 Struts2的系统架构在上一章通过HelloWorld示范了Struts2的基本开发过程,这还远远不够,因为我们都知道,在使用一个框架的时候,除了要掌握如何使用框架进行开发外,最好还要知道框架做了些什么,以及基本的运行流程,这对以后的学习是很有帮助的。

那么接下来就来看看Struts2的系统架构和内部运行流程。

Struts2的官方文档里附带了Struts2的架构图,在这张图上展示了Struts2的内部模块,以及它们的运行流程。

图3.1 Struts2架构图这张图上分了好多块,彼此之间相互联系,先浏览一下各块的名字,再留心一下运行图最下面的图例,分为四种颜色。

∙橙色是Servlet Filters,过滤器链,所有的请求都要经过Filter链的处理。

∙浅蓝色是Struts Core,Struts2的核心部分,Struts2中已经做好的功能,在实际开发中不需要动它们。

∙浅绿色是Interceptors,Struts2的拦截器。

Struts2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;当然,也可以自定义拦截器,用来实现具体业务需要的功能。

∙浅黄色是User Created,由开发人员创建的,包括struts.xml、Action、Temp late,这些其实就是在前面HelloWorld应用里面折腾的那些东西,是每个使用St ruts2来进行开发的人员都必须会的。

3.1.2 各模块说明架构图上有好多东西,不要着急,接下来逐个击破。

首先看看它们各自是做什么的,跟着图上的箭头一个一个来看:∙FilterDispatcher是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。

韩顺平Spring笔记之图解

韩顺平Spring笔记之图解
习各个配置.
习各个配置.
税务,证券, 石油, 财务,政务系 ,编程粒度变大( 汇编 指令,c 语句 组件)
icationConTexte.xml
Context ac=new lApplicationContext("com/hsp/ioc/beans.xml");
反射
beans.xml/applicationcontext.xml
配置bean ,
ApplicationContext ac=new ClassPathXmlApplicationContext
applicationContext上下文容器 创建 student
bean工厂.
bean工厂.
我们理解 BeanPostProcessor ,有点类似我们的web filter
Employee.java
EmployeeServiceInt er
实现
@Transactional EmployeeService.j va[业务操作
hibernate
事情管理器
sessionfactory
struts-config.xml <action path="/login" parameter="fla type="com.hsp.web.action.LoginAction
☞ 学习框架,最重要的就是学习各个配置.
☞ 学习框架,最重要的就是学习各个配置.
bean bean bean
大的项目(税务,证券, 统,oa,erp,。。),编程粒度变大 java对象,spring,组件
applicationConTexte.xml 自己bean <bean>

韩顺平struts笔记

韩顺平struts笔记

!Struts视频笔记:Struts是一个开源的web框架,框架提高了程序的规范的同时也约束了程序员的自由为什么会有struts:因为我们队mvc理解的不同,可能造成不同公司写程序的时候,规范不统一,这样不利于程序的维护和扩展,所以我们有必要用一个统一的规范来开发项目(struts)Struts 的好处: 程序更加规范化,开发效率提高了,可读性增加了,程序的可维护性增加了^运行原理:一个请求从浏览器发送给web服务器,,web服务器首先解析主机然后解析web应用的名称在解析出资源名转发给总司令ActionServlet(该类由struts框架提供给我们的无需编写,只需配置)ActionServlet有一个文件,该文件配置了表单actionForm(军火库),还配置了action,以及他们之间的对应关系,当ActionServlet拿到命令后它会查询文件去填充数据,把用户的数据填充到表单里边,下个动作就是去调用指定的action(小队长),action去从表单中读取数据,调用某个model(士兵,如service)完成任务,完成任务把结果返回给ActionServlet总司令(返回一个执行的结果),-->总司令又去查询文件,决定跳转到哪个jsp页面,返回一个执行结果(形成静态html文件)直接返回给web服务器服务器再把静态页面以http响应给浏览器,登录小项目过程步骤: 新建web工程导入struts包编写编写actionForm和action配置编写和配置测试中的<action>中的scope指的是actionform的生命周期范围 struts中<action>的scope默认是session@配置过滤器public class MyFilter extends HttpServlet implements Filter {@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {("gb2312");("gb2312");~(arg0, arg1);}配置<filter><filter-name>MyFilter</filter-name><filter-class> </filter><filter-mapping><filter-name>MyFilter</filter-name>…<url-pattern>/*</url-pattern></filter-mapping>上面这次比较浪费资源每次都要去实例化但是下面这种过滤器不太彻底,往数据库里插入数据时还是会经常出现乱码public class MyFilter extends HttpServlet implements Filter {private String encoding;public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {ction</url-pattern>*</servlet-mapping>写一个关于安全性的过滤器,用于过滤一些用户注册使用的关键字private String keywords[];public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {String username=("username");"this is safe filter !");if(username!=null){;for(String key:keywords){if(username)){("err", username+"被第二个管理安全的过滤器拦截了");("/WEB-INF/").forward(arg0, arg1);return ;}}}—(arg0, arg1);}public void init(FilterConfig arg0) throws ServletException {keywords=("keywords").split(";");}然后在配置过滤器还有设置要过滤的关键字<init-param><param-name>keywords</param-name>><param-value>xiaomao;xiaoxiao</param-value></init-param>每个action是单态的,包括actionserver,对网站并发性有影响若要证明的话在***中声明一个静态变量,每次访问自加什么是单态: 单态是指在整个运行过程中,始终是一个对象;默认放在WEB-INF目录下,也可以放到其他地方,只需要在中的<init-param>?<param-name>config</param-name><param-value>/WEB-INF/</param-value></init-param>有多个只需用","号隔开java 中插入数据库的语句需要注意标点("insert into user(username,password) values("+"'"+()+"'"+","+"'"+()+"'"+")");jstl(jsp startand tag liblary) jsp标准标签库: 可以提高开发速度,代码简洁升级jsp 页面<!DOCTYPE HTML PUBLIC"-oString();escapeXml表示是否安装html样式显示默认是true:表示以文本显示;如何输出request,session,application, pageContext域对象的数据<%("hello","request你好!");("hello","session你好!");("hello","application你好");("hello","pageContext你们<a href=''>百度</a>");%>这里有个优先级的问题,pageContext>request>session>application |<c:out value="${hello}" default="没有值" escapeXml="false" >如果是在同一个页面,那么这段代码输出pageContext你们好百度<%User u=new User();("admin");("admin");("user",u);%>,<c:out value="${}"></c:out> | |<c:out value="${}"></c:out>相当于(User) ("user").getUsername();<c:set>:<c:set var="abc"value="中国,北京"scope="request"></c:set><c:out value="${abc}"/><c:remove var="abc"/> 移除之后中国北京将不再显示<c:catch>:<c:catch var="err">#<%int i=3/0; %></c:catch><c:out value="${}"></c:out><c:if test="${2<30true:false}">ok</c:if><c:if>:<%("a","hello");("age","22"); %>"判断字符串:<c:if test="${a=='hello'}">hello</c:if>判断数值<c:if test="${age>12 and age<30 or age==22}">年龄大于12 小于30 ${age }</c:if> <%】ArrayList<User> al=new ArrayList<User>();User u1=new User();("陈超");("tiger");User u2=new User();("system");("manager");(u1); (u2);)("alluser",al);%><c:forEach items="${alluser}" var="u">${}${} <br/></c:forEach>第一种迭代<c:forEach var="i" begin="1" end="10">${i}&nbsp;&nbsp;</c:forEach> ]<br/>第二种迭代<c:forEach var="i" begin="1" end="10" step="3">${i}&nbsp;&nbsp;</c:forEach><br />用于分隔字符:<c:forTokens items="11;33;44;52;" delims=";" var="temp">${temp}</c:forTokens>什么时候用$符,什么时候不用$如果是从某个域对象中取出值,取的是一个变量就要用$ ,取的是一个固定的值就不要$第一种:(); 这种方式比较慢第二种:应用名/goManagerpageNow=”+pageNow*<c:if test="${pageNow>1}">前一页:<a href=”/web应用名/goManagerpageNow=${pageNow-1}”></c:if>当前页:<c:forEach><a href="/web应用名/gotoManagepageNow=${i}">[${i }]</a></c:forEach><c:if test="${pageNow<pageCount}">后一页:<a href=”/web应用名/goManagerpageNow=${pageNow+1}”></c:if>当前页${pageNow } /总页数 ${pageCount } 跳转到<input type="button" id="pageNow" name="pageNow" value="跳"/><%Map map=new HashMap();nvalidate(); etServletContext().getRealPath("file");)打印路径os=new FileOutputStream(keepFilePath+"\\"+fileName);;String uuid= newFileName=uuid+(beginIndex, ());int fileSize=();"uuid:"+uuid);"文件名称:"+fileName);"新文件名称:"+newFileName);"文件大小:"+fileSize);<InputStream is=null;OutputStream os=null;try {etServletContext().getRealPath("file");打印路径os=new FileOutputStream(keepFilePath+"\\"+newFileName);//读取文件并写出到服务器fileint len=0;//缓存byte []bytes=new byte[1024];//循环处理)while((len=(bytes))>0){(bytes,0,len);//读一点写一点return ("loginok");}} catch (FileNotFoundException e) {();} catch (IOException e) {[();}finally{try {();} catch (IOException e) {();}}>return ("loginerr");}}注意事项:如果文件名是中文怎么办做一个过滤器("UTF-8");("UTF-8");(arg0, arg1);—案例: 保存到数据库中Create database userdb2;Use userdb2;Create table t_users(username varchar(30) unique not null,myphoto varchar(128) not null,##保存新的文件名myphoto2 varchar(128) not null ##保存旧的文件名);?Q:37文件下载如果下载的文件时中文名那么我们需要在action中对其进行处理String filterFilkename="GB2312");思考: 如何控制文件的大小如何控制文件上传类型可以从D:\Program Files\Tomcat \conf目录下的中可以查看文件的类型*如何防止用户名重复`。

韩顺平Spring笔记说课材料

韩顺平Spring笔记说课材料

◆spring的快速入门案例①spring是什么?struts 是web 框架(jsp/action/actionfrom)hibernate 是orm框架,处于持久层.spring 是容器框架,用于配置bean,并维护bean之间关系的框架☞spring中有一个非常概念: bean (是java中的任何一种对象javabean/service/action/数据源./dao, ioc(控制反转inverse of control) di( dependency injection 依赖注入)☞画一个框架图◆快速入门开发一个spring项目.1.引入spring的开发包(最小配置spring.jar 该包把常用的jar都包括, 还要写日志包common-logging.jar2.创建spring的一个核心文件applicationContext.xml, [hibernate有核心hibernate.cfg.xmlstruts核心文件struts-config.xml], 该文件一般放在src目录下,该文件中引入xsd文件:可以从给出的案例中拷贝一份.3.配置bean<!-- 在容器文件中配置bean(service/dao/domain/action/数据源) --><!-- bean元素的作用是,当我们的spring框架加载时候,spring就会自动的创建一个bean 对象,并放入内存UserService userSerivce=new UserService();userSerivce.setName("韩顺平");--><bean id="userService" class="erService"><!-- 这里就体现出注入的概念. --><property name="name"><value>韩顺平</value></property></bean>4.在Test.java中,我们怎么使用//我们现在使用spring来完成上面的任务//1.得到spring 的applicationContext对象(容器对象)ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");UserService us=(UserService) ac.getBean("userService");us.sayHello();5.细节讨论?传统的方法和使用spring的方法5.1使用spring ,没有new 对象,我们把创建对象的任务交给spring框架5.2spring的运行原理图:5.3我们再看spring对上面案例总结:spring实际上是一个容器框架,可以配置各种bean(action/service/domain/dao),并且可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可.ioc是什么?答:ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护.DI是什么?答: di(dependency injection) 依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di 更准确表示spring核心技术☞学习框架,最重要的就是学习各个配置.把Applicationcontext做成一个单例的.上机练习: 把我写的代码走一遍.spring开发提倡接口编程,配合di技术可以层与层的解耦举例说明:现在我们体验一下spring的di配合接口编程的,完成一个字母大小写转换的案例:思路:1.创建一个接口ChangeLetter2.两个类实现接口3.把对象配置到spring容器中4.使用通过上面的案例,我们可以初步体会到di配合接口编程,的确可以减少层(web层) 和业务层的耦合度.思考题:接口ValidateUser有一个方法:check(??)有两个类CheckUser1 implements ValidateUser{check// 安装xml验证}CheckUser2 implements VallidateUser{check()// 到数据库去验证}◆从ApplicationContex 应用上下文容器中获取bean和从bean工厂容器中获取bean具体案例://从ApplicationContext中取beanApplicationContext ac=newClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");//当我们去实例化beans.xml,该文件中配置的bean被实例(该bean scope是singleton)从bean中取出student//如果我们使用beanfactory去获取bean,当你只是实例化该容器,那么//容器的bean不被实例化,只有当你去使用getBean某个bean时,才会实时的创建.BeanFactory factory = new XmlBeanFactory(new ClassPathResource("com/hsp/ioc/beans.xml"));factory.getBean("student");结论:1.如果使用ApplicationContext ,则配置的bean如果是singlton不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存)2.如果是BeanFactory ,则当你获取beanfacotry时候,配置的bean不会被马上实例化,当你使用的时候,才被实例(好处节约内存,缺点就是速度)3.规定: 一般没有特殊要求,应当使用ApplicatioContext完成(90%)◆bean 的scope的细节入门案例://获取两个studentStudent s1=(Student) ac.getBean("student");Student s2=(Student) ac.getBean("student");System.out.println(s1+" "+s2);●request●session●global-session是在web开发中才有意义.◆三种获取ApplicationContext 对象引用的方法1.ClassPathXmlApplicationContext -> 通过类路径2.FileSystemXmlApplicationContext -> 通过文件路径举例:ApplicationContext ac=new FileSystemXmlApplicationContext("文件路径beans.xml / applicationContext.xml");3.XmlWebApplicationContext◆bean的生命周期为什么总是一个生命周期当做一个重点?Servlet -> servlet生命周期init() destory()java对象生命周期.往往笔试,面试总喜欢问生命周期的问题①实例化(当我们的程序加载beans.xml文件),把我们的bean(前提是scope=singleton)实例化到内存②调用set方法设置属性③如果你实现了bean名字关注接口(BeanNameAware) 则,可以通过setBeanName获取id号④如果你实现了bean工厂关注接口,(BeanFactoryAware),则可以获取BeanFactory⑤如果你实现了ApplicationContextAware接口,则调用方法//该方法传递ApplicationContextpublic void setApplicationContext(ApplicationContext arg0)throws BeansException {// TODO Auto-generated method stubSystem.out.println("setApplicationContext"+arg0);}⑥如果bean 和一个后置处理器关联,则会自动去调用ObjectpostProcessBeforeInitialization方法⑦如果你实现InitializingBean 接口,则会调用afterPropertiesSet⑧如果自己在<bean init-method=”init” /> 则可以在bean定义自己的初始化方法.⑨如果bean 和一个后置处理器关联,则会自动去调用Object postProcessAfterInitialization方法⑩使用我们的bean11. 容器关闭12. 可以通过实现DisposableBean 接口来调用方法destory13. 可以在<bean destory-method=”fun1”/> 调用定制的销毁方法小结: 我们实际开发中往往,没有用的这么的过程,常见的是:1->2->6->10->9->11上机练习: 把使用每个 bean的时间记录到一个recoder.txt文件,内容是xxbean. 使用时间是: 1999-11-11 11:11:11问题:通过BeanFactory来获取bean对象,bean的生命周期是否和Applicationcontext 是一样吗?不是一样的,bean是工厂中创建的生命周期会简单一些:配置bean的细节①scope 的说明:☞尽量使用scope=”singleton” ,不要使用prototype,因为这样对我们的性能影响较大.②如何给集合类型注入值.java中主要的集合有几种: map set list / 数组Department类:package com.hsp.collection;import java.util.List;import java.util.Map;import java.util.Set;public class Department {private String name;private String [] empName;private List<Employee> empList;private Set<Employee> empsets;private Map<String,Employee> empMaps;public Set<Employee> getEmpsets() {return empsets;}public void setEmpsets(Set<Employee> empsets) {this.empsets = empsets;}public String[] getEmpName() {return empName;}public void setEmpName(String[] empName) {this.empName = empName;}public String getName() {return name;}public void setName(String name) { = name;}public List<Employee> getEmpList() {return empList;}public void setEmpList(List<Employee> empList) {this.empList = empList;}public Map<String, Employee> getEmpMaps() {return empMaps;}public void setEmpMaps(Map<String, Employee> empMaps) { this.empMaps = empMaps;}}//Employeel类package com.hsp.collection;public class Employee {private String name;private int id;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}}beans.xml配置文件:<?xml version="1.0" encoding="utf-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:tx="/schema/tx"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd/schema/tx/schema/tx/spring-tx-2.5.xsd"><bean id="department" class="com.hsp.collection.Department"><property name="name" value="财务部"/><!-- 给数组注入值--><property name="empName"><list><value>小明</value><value>小明小明</value><value>小明小明小明小明</value></list></property><!-- 给list注入值list 中可以有相当的对象--><property name="empList"><list><ref bean="emp2" /><ref bean="emp1"/><ref bean="emp1"/><ref bean="emp1"/><ref bean="emp1"/><ref bean="emp1"/><ref bean="emp1"/></list></property><!-- 给set注入值set不能有相同的对象--><property name="empsets"><set><ref bean="emp1" /><ref bean="emp2"/><ref bean="emp2"/><ref bean="emp2"/><ref bean="emp2"/></set></property><!-- 给map注入值map只有key不一样,就可以装配value --> <property name="empMaps"><map><entry key="11" value-ref="emp1" /><entry key="22" value-ref="emp2"/><entry key="33" value-ref="emp1"/></map></property><!-- 给属性集合配置-->【点http协议referer】<property name="pp"><props><prop key="pp1">abcd</prop><prop key="pp2">hello</prop></props></property></bean><bean id="emp1" class="com.hsp.collection.Employee"><property name="name" value="北京"/><property name="id" value="1"/></bean><bean id="emp2" class="com.hsp.collection.Employee"><property name="name" value="天津"/><property name="id" value="2"/></bean></beans>③内部bean<bean id=”foo” class=”....Foo”><property name=”属性”><!—第一方法引用--><ref bean=’bean对象名’/><!—内部bean--><bean><properyt></property></bean></property></bean>④继承配置public class Studentpublic class Gradate extends Student在beans.xml文件中体现配置<!-- 配置一个学生对象--><bean id="student" class="com.hsp.inherit.Student"><property name="name" value="顺平" /><property name="age" value="30"/></bean><!-- 配置Grdate对象--><bean id="grdate" parent="student" class="com.hsp.inherit.Gradate"><!-- 如果自己配置属性name,age,则会替换从父对象继承的数据--><property name="name" value="小明"/><property name="degree" value="学士"/></bean>思考: 目前我们都是通过set方式给bean注入值,spring还提供其它的方式注入值,比如通过构造函数注入值!◆通过构造函数注入值beans.xml 关键代码:<!-- 配置一个雇员对象--><bean id="employee" class="com.hsp.constructor.Employee"><!-- 通过构造函数来注入属性值--><constructor-arg index="0" type="ng.String" value="大明" /></bean>◆自动装配bean的属性值(1)byName的用法:<!-- 配置一个master对象--><bean id="master" class="com.hsp.autowire.Master" autowire="byName"><property name="name"><value>顺平</value></property></bean><!-- 配置dog对象--><bean id="dog" class="com.hsp.autowire.Dog"><property name="name" value="小黄"/><property name="age" value="3"/></bean>原理图:(2)byType: byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。

struts架构图

struts架构图

1.structs1 架构图Struts 是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC 模式,能够很好地帮助java 开发者利用J2EE 开发Web 应用。

和其他的java 架构一样,Struts 也是面向对象设计,将MVC 模式" 分离显示逻辑和业务逻辑" 的能力发挥得淋漓尽致。

Structs 框架的核心是一个弹性的控制层,基于如Java Servlets ,JavaBeans ,ResourceBundles 与XML 等标准技术,以及Jakarta Commons 的一些类库。

Struts 有一组相互协作的类(组件)、Serlvet 以及jsp tag lib 组成。

基于struts 构架的web 应用程序基本上符合JSP Model2 的设计标准,可以说是一个传统MVC 设计模式的一种变化类型。

Struts 有其自己的控制器(Controller ),同时整合了其他的一些技术去实现模型层(Model )和视图层(View )。

在模型层,Struts 可以很容易的与数据访问技术相结合,如JDBC / EJB ,以及其它第三方类库,如Hibernate / iBATIS ,或者Object Relational Bridge( 对象关系桥) 。

在视图层,Struts 能够与JSP ,包括JSTL 与JSF ,以及Velocity 模板,XSLT 与其它表示层技术。

Struts 为每个专业的Web 应用程序做背后的支撑,帮助为你的应用创建一个扩展的开发环境。

∙ Client browser (客户浏览器)来自客户浏览器的每个HTTP 请求创建一个事件。

Web 容器将用一个HTTP 响应作出响应。

∙ Controller (控制器)控制器接收来自浏览器的请求,并决定将这个请求发往何处。

就Struts 而言,控制器是以servlet 实现的一个命令设计模式。

韩顺平java图形界面编程

韩顺平java图形界面编程

①JFrame是Frame 的子类。 ②属于容器类组件,顶层容器。 ③JFrame 有一些常用的方法,我演示几个最最常用的方法,通过 java的帮助文档我们可以了解。
主讲 韩顺平
swing 组件 按钮组件
按钮组件-为什么有? 在图形用户界面编程中,我们在窗体中会经常使用到按钮,如下图所 示:

我们在进行选择的时候,常常需要确认,所以按钮很重要。
主讲 韩顺平
三大布局管理器 ---介绍
布局管理器 –介绍 ①概念 组件在容器(比如JFrame)中的位置和大小是由布局 管理器来决定的。所有的容器都会使用一个布局管 理器,通过它来自动进行组件的布局管理。 ②种类 java共提供了五种布局管理器:流式布局管理器 (FlowLayout)、边界布局管理器(BorderLayout)、 网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、 网格包布局管理器(GridBagLayout)。其中前三种是最常见的布局 管理器。
主讲 韩顺平
图形用户界面(gui)
用什么开发gui 说起gui开发,这里还有一个小故事,想当年我学习gui的时候,被 awt,swing,swt,Jface这几个东东搞得是晕头转向.都不知道老师在 讲什么,现在兄弟我明白了,给大家讲讲是怎么回事.

Sun已经提供了一个跨 平台GUI开发工具包AWT 抽象窗口工具箱 (Abstract Window Toolkit). IBM认为swing比较消耗内 存,创建了一个新的GUI库, 这就是SWT

①JButton是AbstractButton 的子类。 ②属于容器类组件,可以加入别的组件. ③Swing包的按钮组件不只有JButton ,还有 单选按钮 (JRadioButton)、箭头按钮(BasicArrowButton)、触发器按钮 (JToggleButton).. 这些按钮我们在后面会讲解。

J2EE项目实训Struts框架技术——第4章 Struts Tiles框架及应用(第1部分)

J2EE项目实训Struts框架技术——第4章 Struts Tiles框架及应用(第1部分)

第4章Struts Tiles框架及应用(第1/3部分)在应用系统的模型层的开发中,一般都遵循分层设计和开发实现的基本原则,通过合理地分层可以隔离某个层中的组件变化所造成的对其它层中组件的影响。

而能否将分层隔离的设计思想具体应用于Web应用系统的表示层的设计和开发实现中,从而达到分离页面的外观感觉(页面的布局)和具体的页面内容呢?在J2SE的图形用户界面(GUI)的开发中,可以应用布局管理器(Layout)实现在GUI 容器组件(如窗口和对话框)中指定各个视图组件在容器组件中的分布位置;而在常规的Web应用系统的开发中,实现将Web页面布局和内容相互分离是使用JSP技术中的文件包含技术。

在JSP的技术规范中提供了动态(通过include动作)和静态(借助include指令)的包含技术实现。

而更好的实现技术,则是应用本章将要介绍的Struts 框架中所集成的Tiles子框架技术。

因为Tiles框架是一种功能强大、而易用的动态模板和布局框架。

其中的页面模板可以定义页面中的页头、导航菜单条、页面内容和页脚等各个页面组成元素的位置,而页面模板中的各个具体的内容页面是在实际应用时再被包含进来并填充这些位置。

应用Struts框架中的Tiles框架技术是保持Web应用系统的用户界面达到良好的一致性和易用性的一种有效的手段。

因为用户界面的一致性也将意味着用户界面中的各个组件的可重用,而可重用性将可导致应用系统不容易崩溃并且易于维护和功能扩展。

1.1Struts Tiles框架技术Tiles 框架是由Apache软件基金会(Apache Software Foundation)发起的一个开放源代码项目,它也是一个框架、并为Web应用系统的表示层的开发者提供在Servlet组件和JSP 页面组件中包含其他Web页面资源的功能,从而使得Web应用系统的表示层开发者可以用预定义的页面组件(在Tiles 框架中称为Tile)来组装各个目标页面。

韩顺平 hibernate第2讲

韩顺平 hibernate第2讲

hibernate 从入门到精通
主讲: 韩顺平

Criteria接口
Criteria接口也可用于面向对象方式的查询,关于它的具体用法我们 这里先不做介绍,简单看几个案例. 最简单案例:返回50条记录 Criteria crit = sess.createCriteria(Cat.class); crit.setMaxResults(50); List cats = crit.list(); 限制结果集内容 List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.between("weight", minWeight, maxWeight) ) .list();
hibernate 从入门到精通
主讲: 韩顺平
hibernate 从入门到精通
主讲: 韩顺平
■ConfiguraFra bibliotekon类①负责管理hibernate的配置信息 ②读取hibernate.cfg.xml ③加载hibernate.cfg.xml配置文件中 配置的驱动,url,用户名,密码,连接池. ④管理 *.hbm.xml对象关系文件.
hibernate 从入门到精通
主讲: 韩顺平

对象关系映射文件(*.hbm.xml) ①该文件主要作用是建立表和类的映射关系,是不可或缺的重要文件. ②一般放在其映射的类同一个目录下,但不是必须的。 ③命名方式一般是 类名.hbm.xml,但不是必须的。 ④示意图:
*.hbm.xml 表
某个类
hibernate 从入门到精通
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mvc模式(模式是一个思想) Mvc:我们应当把数据的输入(jsp界面) 和数据的处理(靠控制接收数据后 调用model来完成数据处理), 数据显示分开(jsp,界面)
提供一个基于mvcr的 web框架(structs) Struts[基于mvc的一个web框架]
sina
sohu
腾讯
Struts的运行原理图【时序图】 (以用户登录验证举例说明) Struts-config.xml
从表单中获取数据 调用某个model完成任务(service) 将执行结果返回总司令 查询struts-config.xml文件, 根据返回的结果,决定跳转到 哪个界面
返回一个执行结果 (形成静态的html)
把静态界面以html方式 返回给浏览器
m
ActionServlet (总控制器/总司令),
该类由struts框架提供, 我们只需配置
Web服务器
Hale Waihona Puke c表单(actionForm)用于 存放数据【军火库】,它需 要继承ActionForm类
才是一个表单
他 们 是 有 关 系 的
c
Loginaction(分控/小队长) 小队长可以有多个, 本质就 servlet
这是struts的一个核心文件,该文件配置了 actionForm(表单)、action(小队长),和他 们的对应关系
web.xml 该文件配置 ActionServlet 浏览器
http://localhost:8080/ web应用/action <form action=“login.do”> U:<input type=“text” Name=“username” P:<input type=“password” Name=“pwd” </form>
m
Model (java类) 【Service,ejb】/士兵
v
Ok.jsp
v
err.jsp
发出http登录请求
解析主机
解析web应用
解析资源名
没有struts的情况下 有struts情况下 转发login.do给 ActionServlet 查询struts-config.xml文件,(使用反射机制 把表单实例化)把用户数据填充到表单 调用Set方法 调用指定的action(同时会把表单实例传入execute)方法
相关文档
最新文档