我学习struts的一些心得!

 

  这几天我学了struts第一个框架,虽然好多人都说这个框架很少人会用,但是我还是觉得学好了第一个框架,才能对后面的框架可以进行更好的学习,另外我也通过这几天在课上的学习,充分的发现自己的学习的基础知识真的是很不扎实,。我也不知道怎么办了。反正要好好学习,但是自己也一定要在学习新的东西的基础上好好掌握前面的知识,温故而知新,可以为师已。我是牢牢的记住的,好了,不废话多说了。现在就好好的整理我这几天学习的struts框架吧!

  首先呢,我还是想画上一张图这个图可以很好的表达出struts 上面就是这张图就是struts原理的东西,这里一个很新颖的地方就是这个中央控制器这个地方,之前没有了解过,老师也说过,在面试的时候,如果有人问你struts核心的东西,就好是用一句话就可以解释的出来,这里我就尝试用一句话说出来,所有的*.do请求(包括*.action等等)都会被中央控制器,ActionServlet接受到,然后找到struts-config.xml配置文件,找到里面的相应的Action,再去调用execute方法,execute方法会返回相应的forward跳转信息,然后再根据相应的跳转信息,中央控制器再去进行统一的跳转!

      上面一句话就是我对于struts的理解,肯定是有一些不妥的地方,但是毕竟是根据老师讲的,和自己学习地方来进行总结的,所以也算是有点小收获吧,老师还给我们模拟了一段中央控制器的代码,以便我们可以更好的掌握控制器这个概念的理解,这里我也贴出来。以便以后大家的复习,

package com.daijianwei.servlet;
 
import java.io.IOException;
import java.util.Iterator;
 
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
 
import com.daijianwei.action.Action;
 
public class ActionServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.process(request, response);
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.process(request, response);
    }
 
    private void process(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String url = request.getRequestURI();
        url = url.substring(0, url.indexOf("."));
        url = url.substring(url.lastIndexOf("/"));
         
         
        SAXReader reader = new SAXReader();//创建对象
        Action action = null;
        Document document = null;
        Boolean isRedirect = true;
        Iterator<Element> forwardelement = null;
        try {
            //读取文件
            document =reader.read( ActionServlet.class.getClassLoader().getResource("struts_config.xml"));
            Element rootelement = document.getRootElement();//拿到根路径
            Iterator<Element> i = rootelement.elementIterator("action");//再去找到根路径下名字为action的值
            while(i.hasNext()){
                Element actionelement = i.next();// 循环的进行迭代
                if(url.equals(actionelement.attributeValue("path"))){//判断值是否相等
                    try {
                        action =(Action) Class.forName(actionelement.attributeValue("type")).newInstance();//再去new出对象
                        forwardelement = actionelement.elementIterator("forward");//拿出forward的值放到容器中去
                        String a = actionelement.attributeValue("redirect");
                        if(a!=null){//判断是否为服务器内部转发还是客户端跳转
                            isRedirect = Boolean.parseBoolean(a);
                        }
                    } catch (InstantiationException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (ClassNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    break;
                }
            }
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
        String actionforward = null;
        String forwardName = action.execute(request, response);
        while(forwardelement.hasNext()){//对forward的里面的值进行迭代的输出
            Element element1 = forwardelement.next();
            if(forwardName.equals(element1.attributeValue("name"))){
                actionforward = element1.attributeValue("path");
            }
        }
         
         
        if(isRedirect){
            response.sendRedirect(actionforward);
        }else{
            request.getRequestDispatcher(actionforward).forward(request, response);
        }
         
         
    }
}

 上面是对中央控制器的一些模拟写法,虽然只是模拟的写法但是也是对struts这里面的一些理解,这一点不得不佩服老师,讲解的很好啊。我一下子就理解了!另外我也把配置文件的代码也贴出来,

复制代码
<?xml version="1.0"?>
<root>
    <action path="/addUser"
            type="com.daijianwei.action.AddAction">
        <forward name="ok" path="ok.jsp"></forward>    
    </action>
    
    <action path="/delUser"
            type="com.daijianwei.action.DelAction"
            redirect="false">
        <forward name="ok" path="del_ok.jsp"></forward>        
    </action>
</root>
复制代码

上面就是我xml代码,这个代码的过程,就是模拟登陆的,以前学习的都是MVC设计模式,现在把一小部分的代码用struts来代替,。现在感觉很方便了,也很好用!以后做项目的时候也可以很好的整合了。虽然这只是1.0版本的struts好多人都说没有什么用,但是这也是为我以后的学习的打下很好的基础了吧!
  今天的整合就这样了,我还在学习当中,以后我还会整理我的笔记,。慢慢让自己掌握更多的学习struts的东西!

 

 

posted @   bod08daijianwei  阅读(183)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示