• 我学习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的东西!

     

  • 相关阅读:
    seajs加载angularjs
    seajs加载jquery提示$ is not a function
    java 动态代理
    C#第三章--对象和类
    Android笔记--两种双击退出程序的方法
    Android--Volley基本用法及自定义
    Win10专业版只要12.99元?应用商店Bug福利也算数
    新人报道
    排序

  • 原文地址:https://www.cnblogs.com/daijianwei/p/3114925.html
Copyright © 2020-2023  润新知