Struts 2.0 学习一 struts的基本原理与基本配置

1.Struts2历史,与Struts1关系
   Struts2是基于WebWork框架发展而来.
   Struts2与Struts1可以说没有太直接关系.
2.Struts2特点
    (1)由Action组件承担Struts1中ActionForm和Action的功能
    (2)Action非常灵活,可以使用一个普通的Class来充当.
    (3)Action可测性强
    (4)提供了大量的Result组件,简化了响应处理的实现
    (5)提供了大量的拦截器组件
    (6)易于扩展,整合和维护
3.Struts2的MVC实现
   控制器实现:FilterDispatcher(早期),StrutsPrepareAndExecuteFilter(新)
  视图实现:各种类型Result,支持各种视图组件的响应.
                 Struts2标签,提供了分支,循环,显示等功能
  模型实现:普通的POJO(Action),更加灵活
         ValueStack组件,用于封装请求相关信息,例如request,session,action对象等
*4.Struts2开发入门
 (1)创建Web Project,引入struts2开发基本包
 (2)在web.xml中配置控制器,添加控制器的配置文件struts.xml
    (3)编写JSP,Action组件
    (4)编写struts.xml配置,定义Action组件和请求的对应关系
*5.Struts2配置文件
   (1) struts-default.xml(框架自带)
     定义了一些框架自带的Result组件,拦截器组件.
   (2) struts.xml(开发创建并使用)
     定义开发者编写的Result组件,拦截器组件,Action组件
   (3) default.properties(框架自带)
     定义了框架的一些系统参数
   (4) struts.properties(开发创建并使用)
     用于覆盖default.properties中的系统配置
   (5) struts-plugin.xml
     整合插件包中带的配置文件.

加载顺序:   struts-default.xml

                     struts-plugin.xml

                     struts.xml

                     struts.properties

                     web.xml

                         后一个会覆盖前一个的常量值
 *6.Struts2中Action相关配置
    (1)<package>元素的namespace属性
     用于指定package中的action对应的请求路径.
    请求路径格式为:http://localhost:8080/工程名+namespace属性+<action>元素的name属性
    (2)<action>元素的method属性
     用于指定action中的业务方法名,默认为execute
     (3)<param>元素
     用于为Action,Result或拦截器组件的属性指定值.
     (4)通配符*的使用
  <action>的name属性可以使用若干个*号,其他属性可以使用{1},{2}格式指定.
 (5)动态方法调用
    通过请求格式指定业务方法名.
    格式:  请求名!方法名.action

业务方法处理用户请求结束后,仅仅返回一个逻辑视图名,但还需要在struts.xml中配置物理视图资源(resault组件);


*7.ValueStack,ActionContext,ServletActionContext
 (1)ValueStack
   主要用于存储请求相关信息,内部结构如下:
     root区域:被称为根存储区,是一个栈结构,栈顶元素为当前请求的Action对象
     context区域:被称为变量存储区,是一个Map结构,存储了request,session,application等对象
 (2)ActionContext用于获取context存储区内容,
    可以将request,session,application对象以Map结构返回
       ActionContext.getContext().getSession();
       ActionContext.getContext().getApplication();
       ActionContext.getContext().get("request");
     (3)ServletActionContext是ActionContext子类,
     可以获取Servlet API类型的对象
8.思考题
  ---------------将request,session,application封装成Map结构?-------------------
    Map map = new SessionMap(request);
  
    public class SessionMap extends AbstractMap{
     private HttpSession session;
     public RequestMap(HttpServletRequest request){
      this.session = request.getSession();
     }
     public void put(Object key,Object value){
      session.setAttribute(key.toString(),value);
     }
     
     public Object get(Object key){
      return session.getAttribute(key.toString());
     }
    }
 ----------------如何使用Filter充当控制器-------------------
 控制器doFilter方法的主要流程如下:
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain chain) throws IOException, ServletException {
  //1.请求是否为.action
  //2.如果是,通过配置信息创建Action对象,执行业务方法
  //3.如果不是,chain.doFilter(arg0,arg1);
 }
    
    
    
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值