牧者

大风起兮云飞扬

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

1、相关JAR

struts2-core-2.0.11.1.jar
xwork-2.0.4.jar
commons-logging-1.0.4.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar

2、建立基于Struts1.x的Web程序的基本步骤。

步骤1、安装Struts2

在web.xml 中配置Struts2的代码:

View Code
在web.xml 中配置Struts2的代码:
<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>

步骤2、编写Action类

Struts2.x的动作类需要从com.opensymphony.xwork2.ActionSupport类继承。下面是计算两个整数代码和的Action类,代码如下:

View Code
 1 package action;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 public class FirstAction extends ActionSupport
 4 {
 5 private int operand1;
 6 private int operand2;
 7 public String execute() throws Exception
 8 {
 9 if (getSum() >= 0) // 如果代码数和是非负整数,跳到positive.jsp页面
10 {
11 return "positive";
12 }
13 else // 如果代码数和是负整数,跳到negative.jsp页面
14 {
15 - 3 -
16 return "negative";
17 }
18 }
19 public int getOperand1()
20 {
21 return operand1;
22 }
23 public void setOperand1(int operand1)
24 {
25 System.out.println(operand1);
26 this.operand1 = operand1;
27 }
28 public int getOperand2()
29 {
30 return operand2;
31 }
32 public void setOperand2(int operand2)
33 {
34 System.out.println(operand2);
35 this.operand2 = operand2;
36 }
37 public int getSum()
38 {
39 return operand1 + operand2; // 计算两个整数的代码数和
40 }
41 }

从上面的代码可以看出,动作类的一个特征就是要覆盖execute方法,只是Struts2的execute方法没有参数了,而Struts1.x的execute方法有四个参数。而且execute方法的返回值也不同的。Struts2只返回一个String,用于表述执行结果(就是一个标志)

步骤三、配置Action类

在struts2.x中的配置文件一般为struts.xml,放到WEB-INF"classes目录中。下面是在struts.xml中配置动作类的代码:

View Code
 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 <struts>
 6 <package name="struts2" namespace="/mystruts"
 7 extends="struts-default">
 8 <action name="sum" class="action.FirstAction">
 9 <result name="positive">/positive.jsp</result>
10 <result name="negative">/negative.jsp</result>
11 </action>
12 </package>
13 </struts>

在<struts>标签中可以有多个<package>,第一个<package>可以指定一个Servlet访问路径(不包括动作名),如“/mystruts”。extends属性继承一个默认的配置文件“struts-default”,一般都继承于它,大家可以先不去管它。<action>标签中的name属性表示动作名,class表
示动作类名。<result>标签的name实际上就是execute方法返回的字符串,如果返回的是“positive”,就跳转到positive.jsp页面,如果是“negative”,就跳转到negative.jsp页面。在<struts>中可以有多个<package>,在<package>中可以有多个<action>。我们可以用如下的URL来访问这个动作:http://localhost:8080/struts2/mystruts/sum.action注:Struts1.x的动作一般都以.do结尾,而Struts2是以.action结尾。

步骤四:编写用户录入接口(JSP页面)

1.主界面(sum.jsp)
在Web根目录建立一个sum.jsp,代码如下

View Code
 1 <%@ page language="java" import="java.util.*" pageEncoding="GBK" %>
 2 <%@ taglib prefix="s" uri="/struts-tags"%>
 3 <html>
 4 <head>
 5 <title>输入操作数</title>
 6 </head>
 7 <body>
 8 求代数和
 9 <br/>
10 <s:form action="mystruts/sum.action" >
11 <s:textfield name="operand1" label=" 操作数1"/>
12 <s:textfield name="operand2" label=" 操作数2" />
13 <s:submit value="代数和" />
14 </s:form>
15 </body>
16 </html>

在sum.jsp中使用了Struts2带的tag。在Struts2中已经将Struts1.x的好几个标签库都统一了,在Struts2中只有一个标签库/struts-tags。这里面包含了所有的Struts2标签。但使用Struts2的标签大家要注意一下。在<s:form>中最好都使用Struts2标签,尽量不要用HTML或普通文
本,大家可以将sum.jsp的代码改为如下的形式,看看会出现什么效果:... ...
求代数和
<br/>
<s:form action="mystruts/sum.action" >
操作数1:<s:textfield name="operand1" /><br/>
操作数2:<s:textfield name="operand1" /><br/>
<s:submit value="代数和" />
</s:form>
... ...
提示一下,在<s:form>中Struts2使用<table>定位

positive.jsp

View Code
 1 <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
 2 <%@ taglib prefix="s" uri="/struts-tags" %>
 3 <html>
 4 <head>
 5 <title>显示代数和</title>
 6 </head>
 7 <body>
 8 代数和为非负整数<h1><s:property value="sum" /></h1>
 9 </body>
10 </html>

negative.jsp

View Code
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>显示代数和</title>
</head>
<body>
代数和为负整数<h1><s:property value="sum" /></h1>
</body>
</html>

这两个jsp页面的实现代码基本一样,只使用了一个<s:property>标签来显示Action类中的sum属性值。<s:property>标签是从request对象中获得了一个对象中得到的sum属性,如我们可以使用如下的代码来代替<s:property value=”sum”/>:
<%
com.opensymphony.xwork2.util.OgnlValueStack ovs =(com.opensymphony.xwork2.util.OgnlValueStack)request.getAttribute("struts.valueStack");
out.println(ovs.findString("sum"));
%>
启动Tomcat后,在IE中输入如下的URL来测试这个例子:
http://localhost:8080/struts2/sum.jsp

 

posted on 2012-05-01 11:14  牧者.D  阅读(146)  评论(0编辑  收藏  举报