struts2学习笔录其一

下一章:Action的配置和返回结果的配置http://www.cnblogs.com/suxi-blog/articles/6036873.html

struts是一种基于MVC框架的设计模式(MVC:Model-View-Controller).MVC的优点是大体可以理解为:降低了各层的耦合性,提供了应用的可扩展性,更加有利于软件工程的管理。MVC框架推荐应该避免让浏览者直接访问web应用页面,用户的所有请求都只应向控制器发送,由控制器调用控制器用模型组建向客户呈现数据。

struts2应用的开发流程:(请先把相关的外包导入。)

一.在web.xml配置Filter来拦截用户的用户的请求(对于初学者建议:直接从struts提供的模板中直接复制就行!)

核心代码如下:

  <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>

2.如果是以POST方式发送请求的话,则要定义包含表单数据的页面(如:jsp里的form表单)
3.定义处理处理用户Action的类(即java类)

4.  配置Action的xml文件(其作用是:指定那个请求对应那个Action处理类)

 <package name="loginpackage" namespace="/" extends="struts-default">
        <action name="login" class="com.login.LoginAction">
           <result name="error">/error.jsp</result>
       <result name="success">/success.jsp</result>           
        </action>
    </package>

5.配置处理结果与返还界面的关系(即返回数据发往哪个界面)

<result name="error">/error.jsp</result>
 <result name="success">/success.jsp</result>   

6.编写界面

(扩展:StrutsPrepareAndExcuteFliter和*.Action共同构成struts2的控制器)

二.struts2的常规配置

1.常量的配置(struts2的常量对于整个struts框架都起作用。)

struts2所支持的常量由于太多就不在这个介绍,感兴趣的朋友可以去看看struts2-core-2.3.16.3.jar包。

其配置方式有三种:

通过struts.properties文件(一般不推荐使用)

通过struts.xml配置文件:<constant name="常量" value="引用"/>

通过Web应用的web.xml文件:

<init-param>

  <param-name>常量</param-name>

  <param-value>引用</param-value>

</init-param>

2.包含其他配置文件:<include file="*.xml"/>

三.实现Action

1.struts2直接使用Action来分装HTTP请求参数(注意:一定要在java处理类中添加setter方法,getter方法可以加起,初学者最好都加起。)

2.使用接口Action和ActionSupport(这里推荐使用ActionSupport,ActionSupport是继承Action的,里面分装了很多的方法,ActionSupport也是struts2的默认的Action处理类。下面我们也只介绍ActionSupport)

3.Action访问ServletAPI

是通过ActionContext类来实现的,常用方法就是对于Application 、Session、Request的set与get方法以及一个Objexct get(Object key)方法。

4.Action直接访问ServletAPI

就是一个实现下面的几个接口:ServletContextAware、ServletRequestAware、ServletResponseAware。即给接口的变量一个setter方法就行了。(既可以直接使用response等Servlet了。)

有人会问为什么不直接使用HttpServletResponse像jsp中的一样?因为HttpServletResponse不能响应服务器,而且Action只是业务控制器

5.使用ServletActionContext访问ServletAPI(不推荐使用,因为它是与ServletAPI直接耦合的。就不介绍了。)

 

完整的Action实现代码:

public class LoginAction extends ActionSupport

{

   Login login;  

  public Login getLogin()

  {  

     return login;

  }

   public void setLogin(Login login)

  {   

    this.login = login;  

  }

   public String execute() throws Exception                                    //默认的处理方式

  {      

      ActionContext ctx=ActionContext.getContext();  

       Integer counter=(Integer)ctx.getApplication().get("counter");      

        if(counter==null)  

        {    

           counter=1;   

       }else{  

             counter=counter+1;   

       }    

      System.out.println(counter);   

       ctx.getApplication().put("counter", counter);

      ctx.getSession().put("user", login.getUsername());

       if(login.getUsername().equals("suxi")&&login.getPassword().equals("sx"))  

     {       

         ctx.put("tip", "服务器提示:您已经成功的登入!");   

         return this.SUCCESS;  

    }   

    ctx.put("tip","服务器提示:您登入失败!");   

    return this.ERROR;     

  }

}

(其中的有些代码可能初学者看不懂,不要慌,后面会慢慢介绍的。)

-----------------------------------------------------------------------------------------------------------------------------------------

就先做到这里,大家先消化一下。如果有什么错,请及时提出。谢谢。

下一章:Action的配置和返回结果的配置http://www.cnblogs.com/suxi-blog/articles/6036873.htm

 

posted @ 2016-11-06 19:18  freeflying  阅读(96)  评论(0编辑  收藏  举报