大大毛 的笔记

  DDM's Note

哪怕没有办法一定有说法,
就算没有鸽子一定有乌鸦,
固执无罪 梦想有价,
让他们惊讶.

posts - 14, comments - 23, trackbacks - 0, articles - 58
   :: 首页 ::  :: 联系 ::  :: 管理

精通Struts笔记--01

Posted on 2006-07-18 21:57 大大毛 阅读(255) 评论(0)  编辑  收藏 所属分类: Struts

1.Struts与Java Web应用简介

   Struts为Java Web应用提供了框架.它可以提高开发的速度.
   优点:
      本身是一群Web开发专家的智慧结晶;
      运用广泛;
      适用于开发大型复杂的Web应用.

   Java Web应用的核心技术是Servlet和JSP
   Struts框架中JSP位于视图层,而Servlet位于控制层

   几个重要的API
      HttpServletRequest:由Servlet容器把用户的请求存在此对象中
      HttpServletResponse:用于生成Http响应结果
      HttpSession:容器为每个Http会话而创建的一个实例,用于保存会话中的共享数据
      ServletContext:为每个Web应用而创建的实例,存放application范围内的数据

      HttpServletRequest,HttpSession,ServletContext都提供了操作共享数据的方法
      setAttribute(String key,Object value)
      getAttribute(String key)
      与容器提供的接口一样,因此getAttribute(String key)方法返回的是Object,需要做强制转型

   HttpSession的生存期有:
      客户端关闭浏览器;
      会话过期;
      服务端调用HttpSession.invalidate()方法.

   相对来说Session的生存期较长,因此如果可以的话应将数据保存在Request范围内,这样可以缩短对象的生存期;另外象Tomcat这样的容器提供了管理Session的功能,可以对其做持久化管理.

   Web应用中数据生存的范围:
      1.page
      2.request
      3.session
      4.application

   JavaBean:
      就是符合特定规范的Java对象,在JSP中提供了标签便于处理
      JSP中操作JavaBean常用标签有:
         <jsp:useBean id="bean名称" scope="生存期" class="ddm.MyBean" />
         <jsp:getProperty name="bean名称" property="属性名" />
         <jsp:setProperty name="bean名称" property="属性名" value="值" />
   JavaBean常位于模型层,由它提供数据及逻辑
   Struts中的ActionForm Bean就是一种JavaBean,它仅在视图层和控制层之间传递用户输入的表单数据,位于视图层,它只能有两种生存范围:request,session

   客户化JSP标签
      在Jsp1.1中出现,支持用户在JSP中自定义客户化标签,这些标签常用于处理复杂的逻辑运算和事务以及定义JSP的输出内容和格式.
      优点:
.         标签具有可重用性,因此可以提供开发效率
            类似于asp中的JS函数,jsp中的嵌入页
.         可以在JSP页面中以静态或动态的方式设置标签的属性
.         标签可以访问JSP网页中的所有对象
.         标签可以相互嵌套,来完成复杂的逻辑
.         可以使JSP页面更简洁,提高可读性
            对于这个有不同的意见,我认为实际上降低了可读性;因为程序的可读性实际上是适用于程序开发/测试人员的,除此之外别无他人,而引用各种技术,只会提升技术上的复杂度,增加修改的难度;所谓的"类的可重用性",就我看来是指特定人群的,对于专业的高手来说是可以提升效率的,但是对于某种技术一知半解的人来说,只会提升开发难度.一旦类被重用,错误的影响面也会非常之广.

   Struts提供了五种标签库:
      1.Bean
      2.HTML
      3.Logic
      4.Nested
      5.Tiles

   EJB
      EJB(企业JavaBean)组件是基于标准分布式对象技术,CORBA,RMI的服务端Java组件
      它与JavaBean的联系
         相同点:都用于实现企业应用的业务逻辑,都位于模型层
         区别:EJB总是分布式的;EJB需要运行于应用服务器中,而JavaBean只需要Servlet/JSP容器

   XML
      应用广泛,它可以描述结构化的数据,通常与DTD一起使用(声明标记使用规则),常用于配置文件
      Struts中的两种重要的XML文件
      web.xml
         普通的Web应用都有,它用于配置Web应用,如配置Servlet
.     struts-config.xml(可以使用别的名称,需要在web.xml中对应)
         Struts框架的配置文件,主要是Action的配置,这个XML文件包含了几个标签,在书写时各子标签的书写顺序有着严格要求

   Web组件的关联关系
      1.请求转发
         只能发生在同一个Web应用中,在服务端完成转发
         RequestDespatcher rd = request.getRequestDispatcher("hello.jsp");
         rd.forward(request,response);
         JSP中使用的标签:
            <jsp:forward page="hello.jsp" />
         这种方式可以共享request范围内的数据
      2.重定向
         与转发类似,但是可以将请求转发到不同的Web应用,在客户端完成定向(由服务端发一个信息给客户端浏览器,浏览器将新发一个请求)
         response.sendRedirect("
http://www.javablog.net/tw-ddm ");
         由于可能发生在不同的Web应用,因此不能共享request范围的数据
      3.包含
         是一个聚集的概念,可以共享request数据,常用于模板,程序的控制权在调用者,被包含者只是暂时有控制权,执行完毕后需要传回
         RequestDispatcher rd;
         rd = request.getRequestDispatcher("/header.jsp");
         rd.include(request,response);
         包含由于不会产生控制权的转移,因此能够在一个组件中包含多个
         JSP中使用标签:
            <jsp:include page="/hello.jsp" flush="true">
               <jsp:param name="username" value="ddm"/>
            </jsp:include>
         这是动态包含,它可以传递参数,它可以包含动态或静态文件,每次运行时容器都会去检查文件是否发生变化
         <% @include file="/hello.jsp" %>,容器不会每次去检查文件,常用于包含静态页面

   Struts是实现MVC模式的框架
      视图层:
         JSP作为MVC中的视图,它没有业务逻辑,也没有模型信息,只有标签
         ActionForm bean 由于只处理表单数据,联系视图和控制器,因此也被分为视图层
      模型层:
         由JavaBean和EJB来实现,某些简单的功能,有时也直接让Action扮演控制器和模型两种角色
      控制器:
         由ActionSevlet和Action来实现.
         ActionSevlet类是Struts框架中的核心组件.继承了HttpServlet,在MVC中作为中央控制器存在,因此只能有一个
            这个核心玩意也是可以替换的,只要新类是从ActionServlet派生即可,同时也需要在web.xml中改变对应的class名称
         Action由ActionServlet根据Struts-config.xml配置文件来产生,它负责调用合适的模型(JavaBean,EJB),因此它也具有适配器的作用,相当于控制器和模型之间的隔离层(适配器)
         Action必须实现基类的execute()方法,此方法返回一个ActionForward对象,由ActionForward对象封装响应,为增加应用的可配置,提倡从配置文件中findForward

   配置文件:
      struts-config.xml
      配置文件中描述了多个Action的映射信息,初始化时被封装在ActionMapping对象中,每个action元素对应一个ActionMapping对象
      该配置文件中有个<controller>元素,是用于配置ActionServlet的,比较有用的是:<controller contentType="text/html;charset=UTF-8" locale="true" />,这里的contentType应用于全局范围,如果在JSP文件中指定将在局部履盖这个选项,换句话说这里指定了,就可以在JSP页面省心了,另外说一句,用Myeclipse生成的JSP,如果是从ActionForm生成则不会有这些信息,只有要设计视图中单独拖一个出来时才会具有.

   工作流程:
      1.检索与用户请求匹配的ActionMapping对象,如果不存在则返回路径无效的信息.
      2.检查有无ActionForm对象,如果没有则创建,并将用户提交的表单数据保存在其中.
      3.根据配置决定表单是否需要验证,如果需要验证,则调用ActionForm的validate()方法.
      4.如果validate()方法返回null或不含ActionMessage的ActionErrors对象,则表示成功.失败则返回input页面
      5.根据ActionMapping包含的映射信息,查找及新建Action对象,然后调用该对象的execute()方法.
      6.Action对象的execute()返回一个ActionForward对象,然后由ActionServlet转发客户请求给ActionForward中指向的JSP组件
      7.由该JSP生成网页以响应客户请求.

 


只有注册用户登录后才能发表评论。


网站导航:
 

i am ddm