当前位置:编程学习 > JS >>

自定义Struts2实现

一:struts2运行机制:

  Tomcat一启动,一些信息就已经加载完成,例如StrutsPrepareAndExecuteFilter加载的那些strut.xml以及Action的class类文件

1)客户端在浏览器中输入一个url地址
2)这个url请求通过http协议发送给tomcat。
3)tomcat根据url找到对应项目里面的web.xml文件。
4)在web.xml里面会发现有struts2的配置。
5)然后会找到struts2对应的struts.xml配置文件。
6)根据url解析struts.xml配置文件就会找到对应的class。
7)调用完class返回一个字String,根据struts.xml返回到对应的jsp。

 

二:struts2运行原理(网络摘抄)

 

上图来源于Struts2官方站点,是Struts 2 的整体结构。
一个请求在Struts2框架中的处理大概分为以下几个步骤:
1)  客户端初始化一个指向Servlet容器(例如Tomcat)的请求。
2)  这个请求经过一系列的过滤器(Filter)。
3)  接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。
4)  如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
5)  ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。
6)  ActionProxy创建一个ActionInvocation的实例。
7)  ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8)  一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
Struts2的核心就是拦截器。Struts.xml中所有的package都要extends="struts-default"。同理与所有的Java类都要extends自Object一样。struts-default.xml里面就是要做以上事情。

三:下面带大家自定义简单的实现一下struts2

1、创建存放解析struts后的文件,保存里面的name和class以及result结果的Map集合

[java]
package com.s.bean; 
 
import java.util.HashMap; 
import java.util.Map; 
 
public class ActionXml { 
    //对应存放的name  
    private String name; 
      //对应存放的class  
    private String clazz; 
    //对应存放的那些result,保存ResultXml bean结果  
    private Map results = new HashMap(); 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public String getClazz() { 
        return clazz; 
    } 
    public void setClazz(String clazz) { 
        this.clazz = clazz; 
    } 
    public Map getResults() { 
        return results; 
    } 
    public void setResults(Map results) { 
        this.results = results; 
    } 

package com.s.bean;

import java.util.HashMap;
import java.util.Map;

public class ActionXml {
 //对应存放的name
 private String name;
      //对应存放的class
 private String clazz;
 //对应存放的那些result,保存ResultXml bean结果
 private Map results = new HashMap();
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getClazz() {
  return clazz;
 }
 public void setClazz(String clazz) {
  this.clazz = clazz;
 }
 public Map getResults() {
  return results;
 }
 public void setResults(Map results) {
  this.results = results;
 }
}

2、创建存放解析struts后的文件,保存里面的result文件信息

[java]
package com.s.bean; 
 
public class ResultXml { 
    //名称  
    private String name; 
    //值  
    private String value; 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public String getValue() { 
        return value; 
    } 
    public void setValue(String value) { 
        this.value = value; 
    } 

package com.s.bean;

public class ResultXml {
 //名称
 private String name;
 //值
 private String value;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getValue() {
  return value;
 }
 public void setValue(String value) {
  this.value = value;
 }
}
3、创建解析XML的类文件


[java]
package com.s.parse; 
 
import java.io.File; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import org.dom4j.Document; 
import org.dom4j.DocumentException; 
import org.dom4j.Element; 
import org.dom4j.io.SAXReader; 
 
import com.s.bean.ActionXml; 
import com.s.bean.ResultXml; 
 
public class ParseXml {  
    private static Map<String,ActionXml> map = new HashMap<String,ActionXml>(); 
    public ParseXml(){ 
    } 
    public static Map<String,ActionXml> getXML(){ 
        SAXReader sax = new SAXReader(); 
        Document doc = null; 
        try { 
            doc = sax.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("struts.xml")); 
        } catch (DocumentException e) { 
            // TODO Auto-generated catch block  
            e.printStackTrace(); 
        } 
        //得到根目录  
        Element root = doc.getRootElement(); 
        //得到所有action配置  
        List list = root.elements(); 
         
        for(Object obj : list){ 
           

补充:Web开发 , Jsp ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,