posts - 5,  comments - 0,  trackbacks - 0
    写教程的目的并不是为了显示自己的高深,而是帮助他人快速入门,因此我这里不强调太多struts2底层的东西,但是也会介绍一些必须了解的东西。好了,废话少说,开始吧!
    首先介绍下我的开发环境:eclipse3.5+jetty6+maven2+struts2.1.6。按照maven2规范,我们新建一项目Struts2Demo,建立源文件夹src/main/java和src/main/resources,建立webapp目录src/main/webapp,在webapp目录下建立WEB-INF目录,并创建一个web.xml文件。当然这些你完全可以使用maven2的Archetype插件创建。建立好的目录如下图:
   
    之后就应该先引入struts2依赖了,我们使用m2eclipse可以方便地引入struts2依赖的包,首先enable maven dependency management,然后就自动生成了pom.xml,接下来引入struts-core-2.1.6.jar,可以看到,struts2-core所依赖的jar包都给自动下载下来了,用maven2就是方便,而且能最大程度避免版本冲突问题。struts2.1.6依赖的包如下图(不用maven的可以一个个下):
   
    依赖问题解决后,就该开始开发了,在我们的web.xml配置struts2的filter(注意:版本不同filter可能不一样,详细可以看struts2官方的guide)。我的web.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="Struts2Demo" version="2.4" 
    xmlns
="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    
<filter>
        
<filter-name>struts2</filter-name>
        
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    
</filter>
    
<filter-mapping>
        
<filter-name>struts2</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>
    
    
<welcome-file-list>
        
<welcome-file>home.action</welcome-file>
    
</welcome-file-list>
</web-app>
    然后我们在src/main/resources下创建struts.xml,敲入以下代码:
<?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="GettingStarted" extends="struts-default" namespace="/">
        
<action name="home">
            
<result>/index.jsp</result>
        
</action>
        
<action name="gettingStarted">
            
<result>/WEB-INF/pages/getting_started/first_action_input.jsp</result>
        
</action>
        <action name="myFirstAction" class="org.mickey.struts2demo.GettingStarted.MyFirstAction">
            
<result name="success">/WEB-INF/pages/getting_started/first_action_result.jsp</result>
        
</action>

    
</package>
</struts>
    稍作解释哈,前四行照搬就可以了,然后一个struts配置文件必须是以<struts>为根的,<package>是包,主要包括name和namespace,name只是一个普通标识而已,保证全局唯一即可,namespace就是我们通过url访问时的所谓的名空间,比如namespace="/mickey",package下有一个action名为test,那么我们通过url访问的时候就是http://host:port/mickey/test.action。namespace不一定只有一个/,如"/mickey/minnie"都可以。我这里的package继承了struts-default包,这个包能在struts-core-2.1.6.jar中找到,在struts-default.xml里面,这个default包包含了一些拦截器,一些result types等,深入的东西请留意以后的文章。
    <action>标签主要包括name,class,method属性,name就是通过url访问的action的名字,如刚刚的例子就是name="test", class就是定位处理这个action的Action类,struts2中的Action只是pojo而已,十分简单。method就是指定用Action类中的哪个方法来处理这个action,如果不指定method,默认使用execute方法,看看我的struts.xml吧,绿色底那块,我们把class指向了org.mickey.struts2demo.GettingStarted.MyFristAction,下面我们来看看这个类吧:
/**
 * 
 
*/
package org.mickey.struts2demo.GettingStarted;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 
@author mickey.shao
 *
 
*/
public class MyFirstAction extends ActionSupport {
    
/**
     * 
     
*/
    
private static final long serialVersionUID = -6911104681578292245L;

    
private String myName;
    
    
public String getMyName() {
        
return myName;
    }
    
public void setMyName(String myName) {
        
this.myName = myName;
    }

    
public String execute(){
        
return SUCCESS;
    }
}
    一般我们写Action可以不继承任何类,但是继承ActionSupport是更好的选择,这样可以获得框架更好的支持。看到execute方法了吧?一般action的method需要满足以下特点:1.必须是public,2.必须返回String,3.必须不带任何参数。SUCCESS其实是一个字符串"success",struts2已经定义好了。action myFirstAction没有指定method方法,默认就执行execute了,当然我们完全可以不写execute方法,因为父类已经有了默认的实现。
    写完Action类,然后该写页面了,我这里用jsp,在src/main/webapp/WEB-INF下建立文件夹pages/getting_started,新建两个jsp:first_action_input.jsp和first_action_result.jsp。先贴下这两个文件的代码哈:
first_action_input.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding
="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>输入你的名字</title>
</head>
<body>
    
<s:form action="myFirstAction" namespace="/" method="post">
        
<s:textfield name="myName"></s:textfield>
        
<s:submit value="提交"></s:submit>
    
</s:form>
</body>
</html>
first_action_result.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding
="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>看看结果?</title>
</head>
<body>
    struts2跑通了吗,
<font color="red"><s:property value="myName"/></font>?呵呵!
</body>
</html>
    first_action_input.jsp用于输入任意的字符串,然后first_action_result.jsp显示你输入的字符串,很简单。在浏览器敲入http://host:port/appName/gettingStarted.action,进入到first_action_input.jsp,输入“米老鼠”,点击提交,看看结果吧~看到“struts2跑通了吗,米老鼠?呵呵!”,恭喜你,你已经入门了。
    下面解释下action和jsp的关系是如何映射的。往上看回我们的struts.xml文件,action gettingStarted的<result>标签配置的是first_action_input.jsp的相对于webapp根目录的完整路径,当我们浏览器敲入http://host:port/appName/gettingStarted.action,struts根据配置,把视图转向了所配置的jsp去了。然后看看另一个action myFirstAction,<result>标签中多了个属性name,这个其实就是Action类的方法返回的字符串了,<result>标签主要包括name和type属性,name默认是"success",所以看到gettingStarted的result没有配置name,其实是默认了。type默认是dispatcher,普通分发而已,无需赘述。当然type还有redirect,plain text,chain等很多,这些深入的请看后面的文章,呵呵!
    现在的问题是,如何使得action myFirstAction执行呢?这就看看我们的first_action_input.jsp代码吧,页面中我使用了struts的tags,请从struts-core包META-INF目录下将struts-tags.tld拷贝到WEB-INF目录下,在页面用taglib将其导入。页面有主要由一个form组成,form里面有一个input文本框和一个提交按钮,文本框和提交按钮我都用的struts的tag,当然也可以不用的,关于struts-tags的更多内容可以参考后面的文章。
    <s:form action="myFirstAction" namespace="/" method="post">
        
<s:textfield name="myName"></s:textfield>
        
<s:submit value="提交"></s:submit>
    
</s:form>
看到这段,是不是已经豁然开朗了?呵呵!看到myName了吧,这就是我们Action类中的域了!那么这个myName是如何设置到Action类中的呢?这就要归功于伟大的拦截器机制了,关于拦截器的更多内容,请参看后面的文章,呵呵!
    提交数据后,struts找到myFirstAction的配置,把结果导向到了first_action_result.jsp中,结果页面通过<s:property />标签将myName打印到页面上了。
    看了这篇文章,应该觉得struts2开发很简单吧?
    下一篇文章将深入介绍struts.xml,敬请关注。
posted on 2009-10-22 20:49 Mickey.Shao 阅读(620) 评论(0)  编辑  收藏 所属分类: struts2

只有注册用户登录后才能发表评论。


网站导航: