tczengjin

BlogJava 首页 新随笔 联系 聚合 管理
  2 Posts :: 0 Stories :: 9 Comments :: 0 Trackbacks
    本文为本人第一次写作,当时正是本人准备考研时期(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.0EL表达式的一门用于访问对象的表达式语言

freemarker.jar

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

commons-logging.jar

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


    上图中
Xworkstruts2 core展开的Source attachingJavadoc location我分别配置了xworkstruts2 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中注册一个FilterDispatcherFilter拦截所有的请求(/*)使得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.jarMETA-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.xmlpackage中把这个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属性没,该表单发出的请求会被FilterDispatcherweb.xml配置的)拦截,然后读取struts.xml配置信息并找到HelloWorld这个Action

通过class属性找到tutorial.HelloWorld对象,由于表单有个message属性会调用set方法设置message的值(同webworkhibernate的持久类不也是这样通过set对属性赋值,通过get对属性取值的吗,这里也是一样的)然后调用execute()方法返回一个字符串(我们在写Action的时候可以覆写这个方法,框架默认调用这个方法,当然我们也可以选择不覆写,定义自己的方法,以后在说好了),呵呵这个SUCCESS是个常量,它定义在所实现的Action接口中:public static final Sring SUCCESS = “success”;里面还定义了其它的常用的字符串,自己看看源码吧!(实际上HelloWorld继承ActionSupportActionSupport实现了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属性值。

运行下看看结果:

 

提交下


 

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


posted on 2007-10-30 16:06 爪哇园主 阅读(4901) 评论(6)  编辑  收藏

Feedback

# re: struts2入门之HelloWorld 2007-10-31 12:36 BeanSoft
十分感谢!  回复  更多评论
  

# re: struts2入门之HelloWorld 2007-10-31 15:17 jee新手
楼主能留一个email么 我有一个很简单struts hello 运行不了 能帮忙看一下么?  回复  更多评论
  

# re: struts2入门之HelloWorld 2007-10-31 19:58 爪哇园主
email:tczengjin@163.com  回复  更多评论
  

# re: struts2入门之HelloWorld 2007-11-07 10:32 吕布
论述的很好,感谢你的发表。我是一个新手,在这里我学到了很多。  回复  更多评论
  

# re: struts2入门之HelloWorld 2007-11-11 20:58 cricy
我也是按你的这样子做,可是我点那个提交,是提交到:http://localhost:186/HelloWord/HelloWord,为什么后面没有向你一样的.action?
如果我在后面加上action,就报HTTP Status 404 - There is no Action mapped for namespace / and action name HelloWord.错误,  回复  更多评论
  

# re: struts2入门之HelloWorld 2015-05-18 16:18 MAR
@cricy
我也是这个问题,你解决了吗  回复  更多评论
  


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


网站导航: