Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2579252
  • 博文数量: 320
  • 博客积分: 9650
  • 博客等级: 中将
  • 技术积分: 3886
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 21:05
文章分类

全部博文(320)

文章存档

2024年(1)

2017年(5)

2016年(10)

2015年(3)

2014年(3)

2013年(10)

2012年(26)

2011年(67)

2010年(186)

2009年(9)

分类: Java

2010-05-16 19:09:14

1、02_尚学堂马士兵_Struts2_Struts2_HelloWorld_2.avi  
  指定Tomcat的目录,指定JDK搭建开发环境(拷贝jar包,复制struts.xml文件 此文件不要放在WEB-INF下面,应该放到src下面  ),在web.xml文件中:  
  
        struts2  
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
   
  
 
      
        struts2  
        /*  
   
  
 其中/* 不要写/*.do 或者 /*.action约定俗成用/*  
 
 
2、04_尚学堂马士兵_Struts2_Struts2_HelloWorld_3.avi  
(1)  
  
  
action -->相应的处理类或页面 -->  
  
       
          
          
              
                /Hello.jsp  
           
  
       
  
   
  
 
(2)struts.xml不自动提示的解决办法: window--perferences-XML catalog---add---key Type="URI"  key="*.dtd" 
 
 
3、09_尚学堂马士兵_Struts2_Struts2_HelloWorld_7_2.avi  
   struts2的执行流程:  
   当用户在浏览器中敲入要访问的地址的时候,浏览器会将这个请求发送给tomcat然后tomcat判断应该交给那个WebApplication来处理,然后会读取它下面的web.xml配置发现有配置:  
  
        struts2  
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
   
  
 
      
        struts2  
        /*  
   
因为 为/* 它会过滤所有的请求然后就交给filter类org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter处理执行调用doFilter()方法,然后再方法中会读取struts-xml文件,根据用户请求的地址找到相应的package、 action、 result、然后将相应的页面返回给浏览器  
 
 
4、10_尚学堂马士兵_Struts2_Struts2_Namespace_命名空间.avi  
(1)namespace决定了action的访问路径,默认为"",可以接收所有路径的action  
namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,  
/xxx/index.action,或者/xxx/yyy/index.action  
namespace最好也用模块来进行命名  
 
 
5、11_尚学堂马士兵_Struts2_Struts2_Action.avi  
(1)struts1 与struts2的一个重要区别:在struts1中进行多次访问的时候用到的是同一个Action对象。而struts2则是每一次访问都会创建一个Action对象,所以struts2不会有线程安全问题的发生  
(2)标签如果没有指定name属性默认返回值为success  
 (3)标签中的class值如果没有配置相应的类,它会调用struts默认的一个处理类的execute()方法.  
(4)实现struts的处理类的时候不要自己随便写类然后定义execute()方法,也不要实现Action类而要从ActionSupport类继承,可以直接使用它为我们定义好的方法.  
 
 
6、12_尚学堂马士兵_Struts2_Struts2_Path_路径问题.avi  
(1)struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。  
虽然可以用redirect方式解决,但redirect方式并非必要。  
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)  
或者使用myeclipse经常用的,指定basePath  
(2)request.getContextPath()得到项目的名字,一般用来解决路径问题 如果项目为根目录,则得到一个"",即空的字条串。  
     request.getscheme()返回的协议名称.默认是http   
    request.getServerName()就是获取你的网站的域名,如果是在本地的话就是localhost   
    request.getServerPort()获取服务的端口号     
 
 
7、13_尚学堂马士兵_Struts2_Struts2_ActionMethod_DMI_动态方法调用.avi  
   Action执行的时候并不一定要执行execute方法
  
可以在配置文件中配置Action的时候用method=来指定执行哪个方法  
也可以在url地址中动态指定(动态方法调用DMI)(推荐)
  
    添加用户  
   
  
    添加用户  
   
  
前者会产生太多的action,所以不推荐使用  
配置文件:  
  
          
            /user_add_success.jsp  
       
  
          
          
            /user_add_success.jsp  
       
  
   
  
 
 
8、14_尚学堂马士兵_Struts2_Struts2_ActionWildcard_通配符配置.avi  
   主要学习通配符的使用  通配符可以将配置量降到最低,不过一定要遵守"约定优于配置"的原则  
  
      
      
 /Student_{1}_success.jsp  
   
  
      
      
 /{1}_{2}_success.jsp  
   
  
  
说明:  
(1){1}代表name="Student*"后面第一个'*',同理{2}代表第二个'*' 
(2).如果action之间有重复配置,struts2会匹配最精确的action。如果通配符配置之间有重复,则看前后配置顺序  
 
 
9、 15_尚学堂马士兵_Struts2_Struts2_用Action的属性接收参数.avi   
     在继承ActionSupport的类中定义要接受的参数,参数的名称与Action所传的名称无关在struts2内部调用的是属性的set方法,所以setxxx()的名字一定要与Action后面所传的值是一样的。  
 
 
10、16_尚学堂马士兵_Struts2_Struts2_用DomainModel接收参数.avi  
    如果要接受的参数的个数很多,我们可以不用定义属性而是直接定义一个对象例如:  
     private User user (set get 方法)在调用Action传值的时候使用user!add?user.name=x&user.age=x的方式进行值得传递。(最常用的方式)  
 
 
11、17_尚学堂马士兵_Struts2_Struts2_用ModelDriven接收参数.avi  
    继承ActionSupport类的处理类必须同时实现ModelDriven(实现getModel())在传值的时候使用user/user!add?name=bbb进入处理类的时候会调用getModel()方法返回User对象并且把传过来的值set到里面,注意:此时private User user = new User() 不能只定义,要同时实现这样getModel()才能拿到user对象。  
 
 
12、18_尚学堂马士兵_Struts2_Struts2_2.1.6版本的中文问题.avi  
    在配置文件中加入:  
     按照文档说明加入此句可解决中文乱码但是不行这是2.1.6的一个bug,会在下一个版本中修复 如何解决呢:在web.xml中:   
struts2  
          
        org.apache.struts2.dispatcher.FilterDispatcher  
把过滤器的版本改成老版本的即可解决该问题!  
 
 
13、19_尚学堂马士兵_Struts2_简单数据验证_1.avi  
    使用addFieldError方法和s:fieldError标签简单处理数据校验  
     public String add() {  
        if(name == null || !name.equals("admin")) {  
            this.addFieldError("name", "name is error");  
            this.addFieldError("name", "name is too long");  
            return ERROR;  
        }   
        return SUCCESS;  
    }  
在页面中显示错误信息:  
  
  
  
  
  
  
 
 
14、21_尚学堂马士兵_Struts2_访问Web元素_1.avi  
注意:web.xml中关于struts的配置一定要采用2.1的,2.0的会取不到这是一个bug  
(1)通过ActionContext对象取得Map类型的request, session, application HttpServletRequest, HttpSerletSession ServletContetext:  
  public class LoginAction1 extends ActionSupport {  
      
    private Map request;  
    private Map session;  
    private Map application;  
      
         //访问此方法,取得相应的对象但是是Map类型  
    public LoginAction1() {  
      request = (Map)ActionContext.getContext().get("request");  
      session = ActionContext.getContext().getSession();  
      application = ActionContext.getContext().getApplication();  
    }  
    //在Map类型的对象中存入相应的值  
    public String execute() {  
        request.put("r1", "r1");  
        session.put("s1", "s1");  
        application.put("a1", "a1");  
        return SUCCESS;   
    }     
}  
//在页面中通过标签取得存入的数据 二种方法(通过标签, 通过原始方式):  
| <%=request.getAttribute("r1") %>
  
    | <%=session.getAttribute("s1") %>
  
    | <%=application.getAttribute("a1") %>
  
   
  
   
  
   
  
      
   
  
我们存入Map中的数据居然可以在request,等对象中得到,那么在struts内部他是将Map中的数据全部复制到了request,session等对象中的 #attr ,可以取得所有的属性,但是不推荐使用,为了防止同名的情况,造成无法区别。  
(2)通过实现RequestAware,SessionAware, ApplicationAware 接口获取(最常用 和重要的一种)  
private Map request;  
    private Map session;  
    private Map application;  
      
    //DI dependency injection  
    //IoC inverse of control  
    public String execute() {  
        request.put("r1", "r1");  
        session.put("s1", "s1");  
        application.put("a1", "a1");  
        return SUCCESS;   
    }  
 
    @Override 
    public void setRequest(Map request) {  
        this.request = request;  
          
    }  
 
    @Override 
    public void setSession(Map session) {  
        this.session = session;  
          
    }  
 
    @Override 
    public void setApplication(Map application) {  
        this.application = application;  
          
    }  
(3)通过ServletActionContext()取得真实的相应的对象  
private HttpServletRequest request;  
    private HttpSession session;  
    private ServletContext application;  
      
    public LoginAction3() {  
        request = ServletActionContext.getRequest();  
        session = request.getSession();  
        application = session.getServletContext();  
    }  
      
    public String execute() {  
        request.setAttribute("r1", "r1");  
        session.setAttribute("s1", "s1");  
        application.setAttribute("a1", "a1");  
        return SUCCESS;   
    }  
(4)通过实现ServletRequestAware接口获得相应的对象  
  private HttpServletRequest request;  
    private HttpSession session;  
    private ServletContext application;  
      
      
      
    public String execute() {  
        request.setAttribute("r1", "r1");  
        session.setAttribute("s1", "s1");  
        application.setAttribute("a1", "a1");  
        return SUCCESS;   
    }  
 
 
 
    @Override 
    public void setServletRequest(HttpServletRequest request) {  
        this.request = request;  
        this.session = request.getSession();  
        this.application = session.getServletContext();  
    } 

15、23_尚学堂马士兵_Struts2_模块包含  
  
      
      
  
可以将别的写好的配置文件直接包含到struts得配置文件中,方便多人开发避免不必要的配置文件冲突.  
login.xml  
  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "">  
 
  
      
          
            /user_login_success.jsp  
       
  
   
  
  
 
16、24_尚学堂马士兵_Struts2_默认Action  
  
           
          
          
            /default.jsp  
       
  
   
  
 
17、27_尚学堂马士兵_Struts2_结果类型_result_type_1  
    ResultType的最常用的几种配置:(四种配置分别代表了四种不同的跳转方式)  
       
          
                    
            /r1.jsp  
       
  
          
          
                    
            /r2.jsp  
       
  
          
          
                    
            r1  
       
  
          
          
                    
            r2  
       
  
  
                
                 
                   dashboard  
                   /sesure  
              
  
       
  
 
18、30_尚学堂马士兵_Struts2_Global_Results_全局结果集  
   
   
          
            /main.jsp  
       
  
          
          
            /index.jsp  
       
    
   
  
  
            ${r}  
               
   
  
 
 
18、32_尚学堂马士兵_Struts2_带参数的结果集  
访问链接格式:传参数  
public class UserAction extends ActionSupport {  
    private int type;  
      
    public int getType() {  
        return type;  
    }  
 
    public void setType(int type) {  
        this.type = type;  
    }  
 
    @Override 
    public String execute() throws Exception {  
        return "success";  
    }  
 
}  
     当从一个Action跳转到另一个Action的时候,如果需要传值并且是服务器端的跳转,没有必要再struts.xml文件result的跳转路径中进行传值操作,因为多个服务器端的跳转,共享的是同一个值栈,可以直接取到,但是如果是客户端的跳转(redirect)的方式进行跳转则需要进行如下的配置:  
   
          
                    
            /user_success.jsp?t=${type}  
       
       
   
  
但是如果在jsp页面取出传输的值用是取不到的,因为这种方式是在值栈里取值而我们跳转道德是一个jsp页面不是一个Action所以值栈为空,但是我们可以在ActionContext中进行取值: 

 
19、36_尚学堂马士兵_Struts2_OGNL_1  
在访问Actoin向Action进行传值的时候  
http:;  
private String username(set get 方法)  
private String password(set get 方法)  
如果用这种方式进行传值,那么在jsp页面中可以用进行访问值栈中的内容,没有任何问题    但是如果:  
http:
private User user;(set get)方法,使用依然访问不到,因为如果采用dominModel的方式进行传值,必须:http:这样 Struts会在Action中帮助我们new一个User对象,然后把值放进去,但是必须要有User空的构造方法。如果依然使用http:的方式进行传值,那么在Action中必须手动的初始化User对象,Private User user = new User();这样同样可以访问的到。  
 
 
20、37_尚学堂马士兵_Struts2_OGNL_2  
    Ognl:Object graph Navigation Language(对象图导航语言):首先看一下下面三个类之间的关系:  
     public class OgnlAsction extends ActionSupport {  
       private Cat cat;(set get 方法)  
       public String m() {  
         return "你好";  
       }  
     }  
       
     public class Cat {  
        private Dog friend;(set get 方法)  
     }  
 
      public Dog {  
        private String name;(set get 方法)  
      }  
在OgnlAction中包含Cat,而在Cat中包含Dog的对象friend,那么现在我想访问OgnlAction的时候,给friend肤质,我们应该这么写:  
http: 用点进行导航,所以叫做"对象图导航语言"。  
 
21、39_尚学堂马士兵_Struts2_OGNL_4  
    已知以下三个类中的属性和方法:  
     public class OgnlAsction extends ActionSupport {  
       private Cat cat;(set get 方法)      
       private String password;(set get 方法)  
       List users = new ArrayList();(set get 方法)  
     }  
       
     public class Cat {  
       private Dog friend;(set get 方法)  
        private String miaomiao() {  
         return "miaomiao";  
       }   
     }  
 
     public Dog {  
        private String name;(set get 方法)  
     }  
      
     public class S {  
    public static String STR = "STATIC STRING";  
      
    public static String s() {  
        return "static method";  
    }  
     }  
       
     (1)访问值栈中对象的普通方法:  
     (2)访问值栈中对象的普通方法:  
     (3)访问值栈中的Action的普通属性  
     (4)访问值栈中对象的普通属性  
     (5)访问值栈中对象的普通属性  
     (6)访问值栈中Action的普通方法  
  
       
     (7)访问静态方法  
     (8)访问静态属性:  
     (9)访问Math类的静态方法:(不常用)  
     (10)访问普通类的构造方法:     (11)访问List:  
     (12)访问List中某个元素:  
  
     (13)访问List中元素某个属性的集合:  
     (14)访问List中元素某个属性的集合中的特定值: |   
     (15)访问Set:  
  
     (16)访问Set中某个元素:  
     (17)访问Map:  
     (18)访问Map中某个元素: | |   
     (19)访问Map中所有的key:  
     (20)访问Map中所有的value:  
  
     (21)访问容器的大小: |   
  
     (23)投影:  
  
     (24)投影:  
  
     (25)投影:  
     (24)投影:  
  
     (25)[]:  
 
22、44_尚学堂马士兵_Struts2_Struts标签_1  
    (1)property:   
    (2)property 取值为字符串:   
  
    (3)property 设定默认值:   
  
    (4)property 设定HTML:  
阅读(5208) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-08-04 14:23:31

不错 好文章 谢谢分享