文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>[zz]struts2入门之HelloWorld

[zz]struts2入门之HelloWorld

时间:2010-05-25  来源:huixiangtao

来源:http://www.blogjava.net/tczengjin/archive/2007/10/30/fwh.html

本文为本人第一次写作,当时正是本人准备考研时期(10月,我估计那时我疯了,线性代数还没看完呢!!!),哪怕写得再烂也请转载的给留个出处,谢谢!!!留两个QQ群,欢迎共同学习814047    47385435

    今天写篇关于struts2入门的文章吧,如有不妥或不对之处,请于http://bbs.heyjava.com/bbs/index.asp?boardid=2留言回复,我会尽快改正的,该文章主要参考struts2官方入门文档,原文请参看http://struts.apache.org/2.x/docs/bootstrap.html,我的系列文章会对原文做适当增改,以我这样的一个初学者的角度行文,那么还是照老规矩,我们的struts2旅程从Hello World开始吧!

     

首先简要介绍下我使用的开发环境吧:Eclipse3.3 IDE For Java EE Developers下载地址:http://www.eclipse.org/downloads/,JDK5或以上版本,Struts2.0.9(呵呵,在我写作的同时Struts2.0.11已经发布,下载地址http://struts.apache.org/download.cgi#struts206)将下载的struts-2.0.11-all.zip解压将struts2开发所必需的jar包加入你的classpath(在Eclipse wtp项目结构下拷贝到WebContent/WEB-INF/lib目录下即可),我的做法是在Eclipse下创建了一个struts库如图所示:

 

struts2-core.jar

 Struts2的核心api,也是我们以后打交道最多的

xwork.jar

Struts2(同Webwork一样)建立在XWork 2库的基础上

ognl.jar

Object Graph Navigation Language (OGNL), 类似于jsp2.0中EL表达式的一门用于访问对象的表达式语言

freemarker.jar

Struts2所有的ui标记的模板均使用freemarker编写,freemarker根据struts2 ui标记的模板渲染,可通过修改或重写模板使struts2的ui标记按你的要求渲染

commons-logging.jar

封装了通用的日志接口(在Log4J or JDK 1.4+日志api的基础上 )


    上图中Xwork和struts2 core展开的Source attaching和Javadoc location我分别配置了xwork和struts2 core的源代码和其文档的位置,方便开发中查看源代码和api函数的说明。如果你是按照我这样配置的话那么在Eclipse wtp下新建一个Dynamic Web Project取名为HelloWorld,选中该项目右键Build Path加入我们刚才配置好的Struts2库如下图

 

选择Add Library选择User Library加入Struts2所需的库。

见上图选择J2EE Module Dependencies勾选struts2库参看见下图


 

勾选struts2库后当Eclipse wtp将项目发布到Tomcat的时候strust2中的jar会拷贝项目WEB-INF下的lib目录下(以后的文章将不在强调,请切记将需要的库勾选,否则运行时会出现找不到某某类的错误,因为发布的时候Eclipse wtp不会将所需的jar拷贝到WEB-INF/lib目录下,所以程序在运行时位于该库的jar中的类会找不到)

 

<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <display-name>Hello World</display-name>
  <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>
</web-app>

在web.xml中注册一个FilterDispatcher该Filter拦截所有的请求(/*)使得struts2框架为您服务。

在项目src目录下新建一个struts.xml作为struts2的配置文件(项目发布到Tomcat的时候Eclipse会将src目录下的文件对应其目录结构中的文件拷贝到WEB-INF/classes下)如下所示:

 

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts><!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
    </package>
</struts>

  Package类似于Java中的package,其实就是可以将Action分类,划分到不同的package中。extends="struts-default"顾名思义继承,那么继承谁呢?请大家查看struts2-core.jar包里有个struts-default.xml文件里面为我们的应用程序提供了默认配置,应用程序从classpath加载struts.xml的时候会从classpath中加载struts2-core中并读取struts-default.xml,以后我也会经常涉及这个struts-default文件(呵呵,其实我也不全了解这个文件里的配置,大家努力!!!)

那么到此Struts2的基本环境配置的模板搭建好了!

那么新建一个index.jsp

 

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>首页</title>
</head>
<body>
<h2><s:form action="HelloWorld">
    <s:textfield name="message" label="你的姓名"></s:textfield>
    <s:submit value="提交"></s:submit>
</s:form></h2>
</body>
</html>

在这个页面中我将使用struts2标记,先注个册先如下:

<%@ taglib prefix="s" uri="/struts-tags"%>(在struts2-core.jar的META-INF/struts-tags.tld中的标记<uri>/struts-tags</uri>刚好与上面uri属性匹配, struts2的所有标记的配置信息估计都在这文件里,大家一起研究研究吧!)

  新建一个Action代码如下:

package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {

    public String execute() throws Exception {
        return this.SUCCESS;
    }

    private String message;

    public void setMessage(String message){
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

 

按我上面所说的struts.xml的package中把这个Action注册进去吧

 

        <action name="HelloWorld" class="tutorial.HelloWorld">

            <result name=”success”>/helloworld.jsp</result>

        </action>

 

我们回过头来看看表单:

<s:form action="HelloWorld">
    <s:textfield name="message" label="你的姓名"></s:textfield>
    <s:submit value="提交"></s:submit>
</s:form>

 

呵呵,看见message属性没,该表单发出的请求会被FilterDispatcher(web.xml配置的)拦截,然后读取struts.xml配置信息并找到HelloWorld这个Action

通过class属性找到tutorial.HelloWorld对象,由于表单有个message属性会调用set方法设置message的值(同webwork,hibernate的持久类不也是这样通过set对属性赋值,通过get对属性取值的吗,这里也是一样的)然后调用execute()方法返回一个字符串(我们在写Action的时候可以覆写这个方法,框架默认调用这个方法,当然我们也可以选择不覆写,定义自己的方法,以后在说好了),呵呵这个SUCCESS是个常量,它定义在所实现的Action接口中:public static final Sring SUCCESS = “success”;里面还定义了其它的常用的字符串,自己看看源码吧!(实际上HelloWorld继承ActionSupport而ActionSupport实现了Action接口,当然还有其它接口,有兴趣的去挖挖源码吧!)扯了半天就是execute()返回个”success的字符串”,然后从struts.xml的对应action配置中找到所匹配的result,然后将请求转发到/helloworld.jsp去(result中的name=”success”可以不写,默认的,老实说:到底struts默认了哪些东东,真希望官方搞张表全给我们列出来就好)

那么剩下的最后一个页面就是helloworld.jsp了

<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hello World</title>
</head>
<body>
你好:<s:property value="message" />!
</body>
</html>

 

<s:property value="message" />就这个东东了,很简单输出Action中的message属性值。

运行下看看结果:

 

提交下


 

呵呵,大功告成!!!我会接着写的,下次也是老套路登录,呵呵,请关注博客更新!!!

排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载