我学习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 @ 2013-06-03 10:53  bod08daijianwei  阅读(182)  评论(0编辑  收藏  举报