struts2笔记(一)

来源:互联网 发布:js获取fileupload路径 编辑:程序博客网 时间:2024/06/18 11:47

一、J2EE框架概述

view ->      controller ->                    model 
jsp  ->       servlet ->         javaBean->xxService->xxDao
(javaBean作为数据承载,service和dao作为业务处理)

二、struts引入

如果需要在url输入网址,访问后台pojo类,可以使用servlet。
servlet:                                                     ->                                                  pojo:
class loginServlet extends HttpServlet{                                                 class loginAction{
          void doPost(request,response){                                                              void excute();
                     new loginAction().excute();                                                   }
}
}
如果不能使用servlet,只能使用过滤器,因为在java web项目中,能接收请求的只有servlet和filter。
filter:                                                          ->                                                 同上
class loginServlet implements Filter{
          void doFilter(request,response,chain){
                     new loginAction.excute();
                     chain.doFilter(request,response);
}
}

三、struts介绍

struts1:

1、创建web项目

2、为项目添加struts1各种包支持
 
     -->Struts config path:Struts核心配置文件路径
     -->ActionServlet name:请求处理的名称
     -->URL pattern:action的映射路径
     -->Base package for new classes:基本包名
     -->Default application resources:默认应用程序资源文件
      点击'finish'后,开发工具会自动将struts相关的包导入到项目中,并创建相关文件。
3、添加Struts开发文件
      src->New->Other->Myeclipse->Web Struts 1.x->Struts Form,Action&Jsp
 
         点击'finish',进入表单相关的参数配置
 
         -->Use case:用例,暂时用请求名login代替
         -->Superclass:父类,org.apache.struts.action.ActionForm
         -->Form properties:配置表单需要的元素,完成登陆至少配置两个元素,'username'、'password'
         -->JSP:前端页面
         点击'finish',进入action配置
 
           -->Superclass:父类,org.apache.struts.action.ActionForm
           -->Scope:作用域
           -->Input Source:输入错误后跳转的页面         
           点击'finish'完成所有配置

struts2:

           struts运用拦截器的概念,结合各种过滤器来获取url。与struts1区别是,struts1是单实例(所有请求共享一个实例),struts2是多实例(一个请求一个实例),还引入'堆栈'的概念,可以达到与servletAPI完全解耦的目的。
           1、创建一个web项目
           2、添加struts2包支持
 

四、配置文件

4.1、六大配置文件

        1、struts-default.xml    struts默认配置 在struts2-core-2.2.1 jar包中
        2、default.properties   默认常量配置  org.apache.struts2
        3、web.xml  项目的配置文件
        4、struts.xml  struts  核心配置文件
        5、struts.properties  自定义常量配置文件
        6、struts-plugin.xml  插件配置

4.2、核心配置文件

        1、global-results元素      
              <package name = "user"  namespace ="/"  extends ="struts-default" >
                   <global-results>
                       <result name="error">/error.jsp</result>
                   </global-results>
              </package>
             可以配置多个action共享的结果集
         2、default-action-ref元素
              <package name = "user"  namespace ="/"  extends ="struts-default" >
                   <default-action-ref name="default"></default-action-ref>                
                       <global-results>
                           <result name="error">/error.jsp</result>
                       </global-results>
                       <action name ="default" class="com.defaultAction">
                           <result name = "success">/404.jsp</result>
                       </action>
              </package>
             通常用于防止url输入错误,显示404错误页面,但该页面往往对用户很不友好,可以使用该配置统一控制404显示页面
        3、default-class-ref元素             
              <package name = "user"  namespace ="/"  extends ="struts-default" >
                   <default-action-ref name="default"></default-action-ref>
                        <default-class-ref class="defaultAction"></default-action-ref>
                             <action name ="default" >
                                  <result name = "success">/404.jsp</result>
                             </action>
              </package>
              action包忘记配置class时默认的action值
 
         4、注意:
                    (在struts-2.1.dtd里,default-action-ref在default-class-ref前面,default-calss-ref在global-results前面,所以代码也一样)

4.3、协作配置

       对一个项目而言,配置文件会很多,此时可采用include标签将各种配置文件分开存储(代码顺序参照上幅图片35行)
       

五、动态调用方法(通过url指定调用的方法)

5.1、动态配置

          在不使用action的method属性情况下,通过URL"/XXX!方法名"(例如http://localhost:8080/struts201/user/aaa!login.action)制定调用后台的login方法,要实现url动态调用方法,需将"default.properties"中的"struts.serve.static.browserCache=true"设置为true,因为在struts2.1以上的版本,其默认值为false
5.2、使用通配符
          <package name ="user"  namespace = "/user"  extends ="struts-default">
             <action name ="user_*"  calss ="com.loginAction"  method ="{1}">
                 <result name ="success">/login.jsp</result>
             </action>
          </package>
----------------------------------------
          <package name ="user"  namespace = "/user"  extends ="struts-default">
             <action name ="*_*"  calss ="com.{1}Action"  method ="{2}">
                 <result name ="success">/login.jsp</result>
             </action>
          </package>

          在action的name属性中可以使用"*"去命名,那么在其他属性中需要使用"{0}"或者"{1}"或者"{2}"取出url路径

六、接受请求参数

          struts2是MVC的控制器,在整个请求过程中,对参数的处理是struts2的职责所在,接受和处理参数分为属性驱动,模型驱动,域驱动等

6.1属性驱动

          直接在action的pojo类中声明与表单一致的属性,并生成匹配的get/set方法,struts2会自动将表单中的数据提交到action中,并直接给相应的属性赋值
          struts.xml核心代码:
          <package name="user" namespace="/" extends="struts-default">
             <action name="login" class="com.action.loginAction" >
                 <result name="success">/weclome.jsp</result>
                 <result name="false">/index.jsp</result>
             </action>
          </package>
          action代码:
          package com.action;
          public class loginAction {
  private String username;
  private String password;
  private String error;


  public String getError() {
return error;
  }


  public void setError(String error) {
this.error = error;
  }


  public String getUsername() {
return username;
  }


  public void setUsername(String username) {
this.username = username;
  }


  public String getPassword() {
return password;
  }


  public void setPassword(String password) {
this.password = password;
  }


  public String execute() {
if (username.equals("admin") && password.equals("admin")) {
return "success";
} else {
this.error = "error";
return "false";
  }
   }
           }
           jsp核心代码:
          <body>
              <span style="color: red;">${error}</span>
              <form action="login.action" method="post">
                  username:<input type="text" name="username"><br>
                  possword:<input type="password" name="password"><br>
                 <input type="submit" value="submit"/>   
              </form>
          </body>

6.2模型驱动

      struts2中提供了一个叫模型驱动的拦截器,要使用此模型驱动填充参数,需action类实现ModelDriven接口
      jsp代码:
 
     action代码:
 

6.3域驱动

      通常情况下,表单元素往往对应一个实体,实体又往往单独放在实体层中,那么此时需要在action中放入实体对象作为请求参数,域驱动的方式就是把实体类中的对象作为action的属性
      jsp代码:
  
      action代码:
 
      struts.xml代码:
 
      pojo代码:
 

七、知识点:

转发:request.getRequestDispatcher(path).forward(request,response);
重定向:request.sendRedirect(path);
表单验证的方法 分为三层:1、客户端的javascript脚本验证(对数据的合法性验证) 
                                                 2、控制器的服务器验证(对数据的合法性验证) 
                                                 3、对数据的有效性验证(连接数据库验证正确性)
配置文件都优先级:web.xml>struts.properties>struts.xml>default.properties
struts.xml的action配置:
<package name = "user"  namespace ="/user"  extends ="struts-default" >
     <action name ="aaa"  class = "com.action.loginAction"  method="login">
           <result name = "success">/login.jsp</result>
     </action>
</package>
jsp校验:<span style="color: red;">${error}</span>