zoukankan      html  css  js  c++  java
  • 我学习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的东西!

     

  • 相关阅读:
    Anagram
    HDU 1205 吃糖果(鸽巢原理)
    Codeforces 1243D 0-1 MST(补图的连通图数量)
    Codeforces 1243C Tile Painting(素数)
    Codeforces 1243B2 Character Swap (Hard Version)
    Codeforces 1243B1 Character Swap (Easy Version)
    Codeforces 1243A Maximum Square
    Codeforces 1272E Nearest Opposite Parity(BFS)
    Codeforces 1272D Remove One Element
    Codeforces 1272C Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/daijianwei/p/3114925.html
Copyright © 2011-2022 走看看