struts2系列(一):struts2入门(struts2的产生、struts2的工作流程、搭建struts2开发环境)

一. struts2的产生

struts1的缺点:
                         1. ActionForm过多,而且这个ActionForm在很大程度上又和VO(POJO)重复
                         2. 为了解决ActionForm过多的问题,使用了验证框架,但是配置复杂,因为是后期的产物
                         3. 与Spring的整合开发难度太大,配置过多
struts1之所以有这些问题,是因为在struts1产生的年代之中没有将POJO的概念提到一个重要的领域上来。但是与struts1同时产生的MVC设计框架(JSF、WebWork)开始逐步解决了这些问题,而其中仅次于struts1框架的就是WebWork,WebWork解决了所有Struts1的所有问题,而且使用起来更加简单,但是Struts1已经成为了行业的标准,名气比WebWork大,所以WebWork的发展比较难。后来Apache组织发现了WebWork的优点,就将其收为自己的一个子项目,利用这个子项目推出了一个新的框架——Struts2.0。因为在最早的Struts2.0之中,基本上就是将<webwork>节点更换成了<struts>节点,除此之外没有任何的变化,甚至连核心包Xwork.jar都是一样的,所以struts2=struts1的名气+WebWork的易用性

二. struts2的工作流程

1.struts 1.x的工作流程
struts 1.x所有的请求以".do"的形式发送到ActionServlet之中,之后由ActionServlet根据struts-config配置文件指定的操作找到对应的Action及ActionForm,默认调用ActionForm中的validate()方法,之后如果此方法返回null或者ActionErrors的集合中没有任何内容,则表示一切正确,如果有错误了,则跳转到struts-config文件中配置的input路径进行跳转,并通过<html error>进行错误显示,如果没有错误则继续交给Action执行。

2. struts 2.x的工作流程
从代码的角度来讲struts 2.x的代码更加简单,因为ActionForm没有了,而且配置也不麻烦了。
从工作流程上来讲,由于 struts 2.x配置的操作是一个过滤器:StrutsPrepareAndExecuteFilter,现在所有的请求肯定先找到过滤器上(struts 2.1之后过滤器有两种:StrutsPrepareFilter和StrutsExecuteFilter),之后根据请求的操作从struts.xml文件之中取出配置的信息,调用ActionSupport的子类中的excute()方法,并根据<result>节点的路径进行跳转操作。

三、搭建struts2开发环境

1.在eclipse里面新建一个maven的web项目,名称为TestStruts2,参考文章:http://www.cnblogs.com/NieXiaoHui/p/5990570.html

2.引入struts2的相关依赖,见pom.xml

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>com.study</groupId>
 5     <artifactId>TestStruts2</artifactId>
 6     <packaging>war</packaging>
 7     <version>0.0.1-SNAPSHOT</version>
 8     <name>TestStruts2 Maven Webapp</name>
 9     <url>http://maven.apache.org</url>
10     <dependencies>
11         <dependency>
12             <groupId>commons-fileupload</groupId>
13             <artifactId>commons-fileupload</artifactId>
14             <version>1.2.1</version>
15         </dependency>
16         <dependency>
17             <groupId>commons-io</groupId>
18             <artifactId>commons-io</artifactId>
19             <version>1.3.2</version>
20         </dependency>
21 
22         <dependency>
23             <groupId>commons-logging</groupId>
24             <artifactId>commons-logging-api</artifactId>
25             <version>1.1</version>
26         </dependency>
27         <dependency>
28             <groupId>org.freemarker</groupId>
29             <artifactId>freemarker</artifactId>
30             <version>2.3.15</version>
31         </dependency>
32         <dependency>
33             <groupId>ognl</groupId>
34             <artifactId>ognl</artifactId>
35             <version>2.7.3</version>
36         </dependency>
37         <!--struts2的核心配置文件 begin  -->
38         <dependency>
39             <groupId>org.apache.struts</groupId>
40             <artifactId>struts2-core</artifactId>
41             <version>2.1.8.1</version>
42         </dependency>
43         <dependency>
44             <groupId>org.apache.struts.xwork</groupId>
45             <artifactId>xwork-core</artifactId>
46             <version>2.2.1</version>
47         </dependency>
48         <!--struts2的核心配置文件 end  -->
49     </dependencies>
50     <build>
51         <finalName>TestStruts2</finalName>
52     </build>
53 </project>

3.在src/main/java目录下新建一个struts2的主配置文件struts.xml和一个struts-user.xml配置文件,在struts.xml里面引入struts-user.xml,配置内容如下

struts.xml:

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE struts PUBLIC
3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
4     "http://struts.apache.org/dtds/struts-2.0.dtd">
5 
6 <struts>
7   <include file="struts_user.xml" />
8 </struts>

struts-user.xml:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 
 6 <struts>
 7 
 8     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
 9     <constant name="struts.devMode" value="false" />
10 
11     <package name="default" namespace="/" extends="struts-default">
12      
13    
14         
15     </package>
16 
17 </struts>

4.web.xml里面引入struts2的过滤器StrutsPrepareAndExecuteFilter

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="3.0" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 7   <display-name></display-name>    
 8   <welcome-file-list>
 9     <welcome-file>index.jsp</welcome-file>
10   </welcome-file-list>
11   
12   <!--struts2的核心过滤器,所有的请求都先到这里,之后根据请求的操作从struts.xml文件之中取出配置的信息,
13          调用ActionSupport的子类中的excute()方法  -->
14     <filter>
15       <filter-name>struts2</filter-name>
16       <filter-class>
17          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
18          </filter-class>
19     </filter>
20     
21     <filter-mapping>
22       <filter-name>struts2</filter-name>
23        <url-pattern>/*</url-pattern>
24     </filter-mapping>
25   
26 </web-app>

5. 在src/main/java新建一个包com.study.struts2.demo,在里面编写一个HelloWorldAction.java,在struts-user.xml里面配置这个action

HelloWorldAction.java:

 1 package com.study.struts2.demo;
 2 
 3 import com.opensymphony.xwork2.ActionSupport;
 4 
 5 public class HelloWorldAction extends ActionSupport {
 6 
 7     /**
 8      * 
 9      */
10     private static final long serialVersionUID = 6522825387249101847L;
11 
12     private String msg;
13 
14     @Override
15     public void validate() {
16         if (msg == null || "".equals(msg)) {
17             super.addFieldError("msg", "信息不能为空");
18 
19         }
20     }
21 
22     @Override
23     public String execute() throws Exception {
24 
25         // 通过request取得jsp的内置对象
26         // this.msg="hellowrold123";
27         return SUCCESS;
28     }
29 
30     public String getMsg() {
31         return msg;
32     }
33 
34     public void setMsg(String msg) {
35         this.msg = msg;
36     }
37 
38 }

struts-user.xml:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 4     "http://struts.apache.org/dtds/struts-2.0.dtd">
 5 
 6 <struts>
 7 
 8     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
 9     <constant name="struts.devMode" value="false" />
10 
11     <package name="default" namespace="/" extends="struts-default">
12         <default-action-ref name="index" />
13         <action name="index">
14             <result name="success">index.jsp</result>
15         </action>
16         
17         <action name="hello" class="com.study.struts2.demo.HelloWorldAction"
18         method="execute">
19             <result name="success">index.jsp</result>
20             <result name="input">index.jsp</result>
21         </action>
22         
23     </package>
24 
25 </struts>

6.编写index.jsp

 1 <%@ page language="java" pageEncoding="UTF-8"%>
 2 <!--引入struts2的标签  -->
 3 <%@ taglib prefix="s" uri="/struts-tags"%>
 4 <body>
 5     <p>
 6         <a href="<s:url action='hello'/>">Hello World</a>
 7     </p>
 8 
 9     <!--struts2的取值标签  value="<s:property value="msg" />"输入正确的被保留 -->
10     <form action="hello.action">
11         信息:<input type="text" name="msg" value="<s:property value="msg" />" />
12         <s:property value="fieldErrors['msg'][0]" />
13         <br> <input type="submit" value="提交">
14     </form>
15 
16     <!--验证通过后显示  -->
17     <h2>
18         <s:property value="msg" />
19     </h2>
20 </body>
21 </html>

经过上面的几步struts2的开发环境已经搭建完成,下面在tomcat里面启动项目,在浏览器输入地址http://localhost:8080/TestStruts2访问验证

 

原文地址:https://www.cnblogs.com/leeSmall/p/7749582.html