首页 技术 正文
技术 2022年11月15日
0 收藏 441 点赞 3,981 浏览 3961 个字

一: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集合

  package .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 .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 .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 .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 .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 .s.bean.ActionXml;

  import .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){

  ActionXml ax = new ActionXml();

  Element a = (Element)obj;

  ax.setName(a.attributeValue(“name”));

  ax.setClazz(a.attributeValue(“class”));

  //得到所有result

  List results = a.elements();

  for(Object obj1 : results){

  ResultXml rx = new ResultXml();

  Element r = (Element)obj1;

  rx.setName(r.attributeValue(“name”));

  rx.setValue(r.getText());

  ax.getResults().put(rx.getName(), rx.getValue());

  }

  //将所有的action的配置读取出来,放入到一个MAP中

  map.put(ax.getName(), ax);

  }

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,484
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,899
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,732
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,485
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,125
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,285