struts2入门之准备工作

使用struts2开发项目分四个步骤:

1、导入jar包

2、创建action

3、配置struts.xml

4、配置过滤器

下面分别介绍以上四步骤:

首先struts2是由struts1进化而来,但是二者差别很大,struts2集成了struts1和webwork的优势,详细差别请参考:http://blog.csdn.net/john2522/article/details/7436307/

I、导入jar包到WEB-INF/lib中。具体是哪些jar包呢?首先下载struts2的压缩包,官网上自己下载,然后解压,会有

  以下几个目录:

然后打开apps这个文件夹,会看到struts2-blank.war这个压缩文件,

进而将这个文件继续解压,会出现WEB-INF这个文件夹,找到WEB-INF/lib下的所有jar包,拷贝到项目WEB-INF/lib下面;

II、创建action有多种方式,我这里介绍三种吧:

  1)、直接新建一个类,这个类中要有execute方法,返回值为String。比如: 

1 public class DogAction{
2       public String execute(){
3            return "success";
4       }  
5 }

  2)、实现Action接口,并实现execute方法,比如:      

1 import com.opensymphony.xwork2.Action;
2 
3 public class DogAction implements Action {
4     @Override
5     public String execute() throws Exception {
6         return "success";
7     }
8 }

  3)、继承ActionSupport这个类,比如:    

1 import com.opensymphony.xwork2.ActionSupport;
2 
3 public class DogAction2 extends ActionSupport {
4     @Override
5     public String execute() throws Exception {
6         return "success";
7     }
8 }

    4)、这里有个疑问,为啥每次都要写execute方法呢?其实这在后面配置struts.xml文件的时候,如果action标签不配置method属性的话,action会默认

     找execute方法的返回值,然后根据result标签去找要访问的具体页面或者是action。

 3、配置struts.xml文件:  

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <package name="dogDemo" extends="struts-default" namespace="/">
 8         <action name="dog" class="com.cczhao.struts.DogAction">
 9             <result name="success">/hello.jsp</result>
10         </action>
11     </package>
12 </struts>

 4、设置过滤器,在WEB-INF/web.xml文件中写:  

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 5 
 6     <display-name>Dog-Filter</display-name>
 7 
 8     <filter>
 9         <filter-name>struts2</filter-name>
10         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
11     </filter>
12 
13     <filter-mapping>
14         <filter-name>struts2</filter-name>
15         <url-pattern>/*</url-pattern>
16     </filter-mapping>
17 </web-app>

 截至到目前,准备工作已经完成,在地址栏中输入:localhost:8080/test/dog.action,正常的话会跳转到hello.jsp页面中去。当然这里有写步骤我也省略了,

比如我的项目名称是test,hello.jsp是在webContent目录下。

5、接下来详细说一下struts.xml文件中的几个标签:根标签是struts,在根标签下,可以有多个package标签,在package标签中有三个属性,本别是name、extends、namespace。name属性本身对于某个项目来说影响不大,你爱怎么命名就怎么命名,但是如果在这个struts标签内有多个package时,这个name属性不能重复;extends表面就是继承的意思,在这里是为了说明package标签下的类具有action的功能,这个值也是固定的,就是extends="struts-default";namespace属性它和接下来的

action中的name属性共同构成访问路径,例如在上面的例子中访问路径就是:localhost:8080/项目名称/dog ,其实namespace属性是有默认值的,默认就是”/“,上面的例子中可以把这个省略掉;action标签中的name属性就不说了,它和上面package中的namespace共同构成访问路径;class属性就是指定类的全路径;

result标签中name属性是和类中的方法的返回值对应的,DogAcion这个类中默认有个execute方法,它的返回值是"success"的话,会找到请求最后去访问哪个页面。本例中,就是成功的话访问/hello.jsp这个页面。
另外在配置过滤器时候,还可以配置常量;contant标签一般只有两个属性,name、value.

===============================分割线=======================================

struts.xml文件中的标签介绍还不完善,这里进行一个补充:

action标签除了有name属性和class属性之外,还有method属性,用来指定当访问这个action的时候要去具体执行哪个方法,然后根据返回值再去找指定的页面后者是action;

result标签除了有name属性外,还有type属性,这个type属性指定了请求访问具体页面的方式,比如是转发(dispatcher),还是重定向(redirect),这两个参数

对访问页面有效果,如果是要访问action的话,分别是chain(转发)和redirectAction(重定向)。

========================================分割线========================================

另外再说一下result的全局结果配置和局部结果配置:先上代码,如下:

<struts>
    <package name="test02" extends="struts-default" namespace="/">
        <global-results>
            <result name="success">/hello.jsp</result>
        </global-results>
        <action name="book" class="com.cczhao.struts.action.BookAction">
            <result name="success" type="redirectAction">orders</result>
        </action>
        <action name="orders" class="com.cczhao.struts.action.OrdersAction">
            <result name="success">/world.jsp</result>
        </action>
    </package>
</struts>

这个配置全局结果页面是有这么一种需求的时候,方法的返回值一样,前往的页面也一样,此时没有必要分别去对一个这样的action去配置结果页,用一个全局结果配置就能搞定。用的最多的,404页面,500页面等。

另外如果方法的返回值是空,可以在struts.xml中的action标签下不配置result标签,因为返回值为空嘛,也就意味这不准备往下再访问其他页面了。

原文地址:https://www.cnblogs.com/ZT-SummerRain/p/7075286.html