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的代码:
在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类,代码如下:
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中配置动作类的代码:
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,代码如下
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
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
<%@ 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