cy伊始吧 关注:11贴子:581
  • 3回复贴,共1

struts2笔记

只看楼主收藏回复

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!--
package包,用于包装Action的。
可以有多个包,多个包之间不能重名。
localhost:8080/StrutsDay01/day01/hello.action
day01:项目名后面的路径,与package中namespace
属性相对应,namespace属性可以写任意字符串,
但是namespace必须以/开头。
extends:表示当前的package将继承于struts-default,
struts-default是struts2中默认的包,包含了
使用struts必须及常用的组件。
-->
<package name="demo" namespace="/day01"
extends="struts-default">
<!--
action用于指定请求对应的Action类。
可以有多个action,action之间不能重名。
name:是用于URL访问的,在URL的namespace
后面,写的就是action的name属性值。
这里后缀为.action,也可以省略。
class:指定Action对应的类。
method:指定要调用的Action的方法。
方法返回值为字符串,用于找此Action
下面的result。
-->
<action name="hello"
class="com.tarena.action.HelloAction"
method="execute">
<!--
result用于指定请求转发的JSP。
可以有多个result,result之间不能重名。
name:与Action方法返回值对应,若返回
ok那么就调用name="ok"的result。
若返回error,就调用name="error"
的result。
-->
<result name="ok">
/hello.jsp
</result>
<result name="error">
/error.jsp
</result>
</action>
</package>
</struts>


1楼2014-03-17 18:44回复
    package com.tarena.action;
    import com.opensymphony.xwork2.ModelDriven;
    import com.tarena.entity.User;
    public class HelloAction
    implements ModelDriven<User> {
    private User user = new User();
    public User getUser() {
    return user;
    }
    public void setUser(User user) {
    System.out.println("SetUser...");
    this.user = user;
    }
    public HelloAction(){
    System.out.println("实例化HelloAction");
    }
    /**
    * Struts2对Action被调用的犯法有如下约定:
    * 1、返回值为String
    * 2、参数列表为空
    */
    public String execute() {
    //模拟调用DAO
    System.out.println("Hello," + user.getUserName());
    System.out.println("Password:" + user.getPassword());
    return "ok";
    }
    public User getModel() {
    return user;
    }
    }


    2楼2014-03-17 18:48
    回复
      <?xml version="1.0" encoding="UTF-8"?>
      <web-app version="2.5"
      xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <!--
      配置Struts2前端控制器,
      该控制器实际上是Struts2给我们提供的一个类。
      这个类是一个filter。
      -->
      <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
      </filter-mapping>
      </web-app>


      3楼2014-03-17 18:49
      回复
        李洪鹤/lihh@tarena.com.cn
        Struts:
        1、理论课:5天
        2、项目实践:7天
        1、什么是Struts
        1)概念:Struts是基于MVC的轻量级框架,
        主要用于解决请求分发的问题,
        重点在于控制层、表现层。
        --基于MVC:Struts的设计思想满足MVC思想,
        即实现了MVC,用了Struts自然也就使用了MVC。
        --轻量级:相对于重量级框架(EJB)而言的,
        量级是指我们业务代码对框架的依赖程度,越依赖
        则越重,实际上是对框架与业务代码关系的一个
        衡量指标。
        和侵入性成正比。
        --框架:是给我们提供的一套基础性代码,
        使用框架就使用了这些代码,节省开发量。
        2)复习MVC:
        Model:数据和算法的单元,如DAO、实体类等
        View:页面,如JSP
        Controller:用于控制请求分发的,以及组织业务
        流程的,将Model和View有机的结合起来。
        2、为什么用Struts
        1)对比Servlet
        --Servlet
        优点:效率高
        缺点:Servlet中代码多
        对请求的处理要自己写
        请求参数要自己解析
        --Struts
        优点:将请求拆开,对应不同的Action
        处理请求使用的是filter,该filter由Struts提供
        请求参数Struts帮我们解析
        提供了API,代码稳定
        缺点:效率略低
        2)Struts与其他框架对比
        --健壮性(4*):程序的稳定性,2.1.8。
        --易用性(4*):好用、好学
        --扩展性(5*):衡量软件未来发展的指标
        --侵入性(4*):与业务代码的依赖程度,
        与耦合度成正比。
        3、Struts发展史
        1)Struts1:结构简单、小巧,出自Apache。
        由于技术陈旧,与Servlet/JSP耦合紧密,
        导致发展受限。
        2)WebWork:技术更先进,核心是XWork。
        由于影响力不足,导致发展受限。
        3)Struts2:与WebWork合作,以XWork为核心的。
        4)面试题:请说出Struts1和Struts2的区别和练习。
        回答:
        --Struts2与Struts1差别很大,不能够理解为
        Struts1的升级版本。
        --Struts2以XWork为核心,即以WebWork为
        核心,可以理解为WebWork的升级版本。
        *4、Struts2如何使用(HelloWorld)
        使用Struts2有如下步骤:
        1)创建Web项目
        2)导入Struts2的JAR包
        3)配置filter,这个filter的类由Struts2提供了,
        通常称这个filter为前端控制器(FC)。
        4)创建struts.xml。
        --名称一定叫struts.xml
        --放于src根路径下
        5)***写业务流程的代码,即Action
        6)*写Model部分的代码,即DAO
        7)*写页面,即JSP
        8)***在struts.xml中,配置请求与Action的关系。
        Struts处理请求的步骤
        1)请求发送给前端控制器(!web.xml中的filter!)。
        http://localhost:8080/StrutsDay01/day01/hello.action
        2)前端控制器解析该地址
        ->通过localhost找到硬件服务器
        ->通过8080端口找到web服务器(tomcat)
        ->通过StrutsDay01找到tomcat中运行的项目
        ->通过day01找到struts.xml中的package,
        根据package的namespace属性。
        ->在此package下,根据hello找到Action,
        根据action的name属性。
        3)实例化找到的Action,调用其方法
        ->在action下,根据method属性找到的。
        ->调用这个方法
        4)根据调用方法的返回值(ok),在action下
        找result(根据result的name属性ok)。
        ->把请求转给result标签里配置的页面(hello.jsp)
        *5、扩展HelloWorld
        Action和页面如何交换数据?
        1)Action如何接收页面传递的参数值
        --*基础属性注入(set)
        在Action增加属性,给它set方法。
        这是Struts自动使用拦截器机制做的。
        注意:文本框的name="Action中属性名"
        --*域模型注入(set)
        在Action中增加实体对象user,给它set方法。
        文本框的name="对象.属性名",这个穿值过程
        也是Struts2给我们实现的,这里对象不必
        我们自己实例化。
        --(了解)ModelDriven模型驱动注入(set)
        实现ModelDriven<User>;
        文本框的name="属性名";
        Action中不需要提供user对应的set方法,
        但是user要我们自己实例化。
        2)JSP如何取Action中传递过来的值
        --EL:简单说明,会用即可,原理后面讲。
        a、EL表达式可以访问Action中的属性,
        但是需要该属性有get方法。
        b、如果Action中的属性为对象user,
        那么EL表达式${user.userName}。
        c、如果Action中的属性为userName,
        那么EL表达式${userName}。
        --OGNL:明天讲,会连带说一下EL表达式。
        *6、将Struts2应用与NETCTOSS项目
        1)分析一下需求,看一下表结构,建表。
        2)写代码
        发起请求(URL)-->前端控制器(filter)-->
        查找strutx.xml中的Action
        -->FindCostAction(-->CostDAO)
        -->findCost.jsp
        3)步骤
        --实体类Cost
        --DBUtil
        --接口ICostDAO, 实现CostDAOImpl
        --FindCostAction
        创建Action,调用DAO来查询,将结果
        给全局变量List<Cost> costs
        --findCost.jsp
        把静态页面的代码复制进来。
        <c:forEach items="${costs}" var="cost">
        ${cost.name}
        --配置struts.xml,指定action与请求的关系,
        以及Action处理完请求转向的页面


        4楼2014-03-17 18:51
        回复