structs 实现原理

289 阅读2分钟

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

struts的请求时序 答:1) 来自于Web浏览器的一个请求到达ActionServlet; 2) 假如处理请求的action有一个相联系的form bean,Struts创建form bean并且将来自于浏览器的输入数据填充它; 3) 然后调用form bean的验证方法; 4) 假如验证失败,用户返回至输入页面去改正输入; 5) 假如验证成功,Struts调用action的execute方法; 6) action接收到来自于form bean的数据并且执行相应的逻辑; 7) Action通常调用session EJB处理商业逻辑; 8) 当商业逻辑处理完,action要么创建一个新的form bean(或其它对应的view bean),要么重用已经存在的。用新的数据填充它然后存储于请求(或会话)范围内。 9) 它然后返回一个forward对象给action servlet,该servlet将其转送至相应的输出JSP页面。 10)JSP使用form bean中的数据输出结果。

Structs默认使用的是服务器跳转,解析xml->反射调用action.excute->根据结果request.foward(result).

  1. 安装Struts。由于Struts的入口点是ActionServlet,所以得在web.xml中配置一下这个Servlet,将所有的请求转发到structs处理。

    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.FilterDispatcher            
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

2.从com.opensymphony.xwork2.ActionSupport类继承 覆盖execute方法

3.配置Action类

<?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd">
  <struts>
      <package name="struts2" namespace="/mystruts"
          extends="struts-default">
          <action name="sum" class="action.FirstAction">
              <result name="positive">/positive.jsp</result>
              <result name="negative">/negative.jsp</result>
          </action>
      </package>
  </struts>

在标签中可以有多个,第一个可以指定一个Servlet访问路径(不包括动作名),如“/mystruts”。extends属性继承一个默认的配置文件“struts-default”,一般都继承于它,大家可以先不去管它。标签中的name属性表示动作名,class表示动作类名。

标签的name实际上就是execute方法返回的字符串,如果返回的是“positive”,就跳转到positive.jsp页面,如果是“negative”,就跳转到negative.jsp页面。在中可以有多个,在中可以有多个。我们可以用如下的URL来访问这个动作:

下面我们就按着编写struts1.x程序的这五步和struts2.x程序的编写过程一一对应,看看它们谁更“酷”。下面我们来编写一个基于Struts2的Web程序。这个程序的功能是让用户录入两个整数,并提交给一个Struts Action,并计算这两个数的代数和,如果代码和为非负数,则跳转到positive.jsp页面,否则跳转到negative.jsp页面。