<?xml version="1.0" encoding="GBK"?> <project name="struts" basedir="." default=""> <property name="dist" value="classes"/> <property name="src" value="src"/> <path id="classpath"> <fileset dir="lib"> <include name="*.jar"/> </fileset> <pathelement path="${dist}"/> </path> <target name="compile" description="Compile all source code"> <delete dir="${dist}"/> <mkdir dir="${dist}"/> <copy todir="${dist}"> <fileset dir="${src}"> <exclude name="**/*.java"/> </fileset> </copy> <javac destdir="classes" debug="true" includeantruntime="yes" deprecation="false" optimize="false" failonerror="true"> <src path="${src}"/> <classpath refid="classpath"/> </javac> </target> </project>
<?xml version="1.0" encoding="GBK"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 定义Struts 2的核心Filter --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- 让Struts 2的核心Filter拦截所有请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.i18n.encoding" value="GBK"/> <package name="lee" extends="struts-default"> <!-- 定义第一个Action,使用TagAction的 execute方法作为控制处理逻辑 --> <action name="tag1" class="org.crazyit.app.action.TagAction"> <result name="done">/WEB-INF/content/succ.jsp</result> </action> <!-- 定义第二个Action,使用TagAction的 login方法作为控制处理逻辑 --> <action name="tag2" class="org.crazyit.app.action.TagAction" method="login"> <result name="done">/WEB-INF/content/loginSucc.jsp</result> </action> <action name="*"> <result>/WEB-INF/content/{1}.jsp</result> </action> </package> </struts>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>被包含的页面</title> </head> <body> <h3>被包含的页面</h3> author参数值为:${param.author} </body> </html>
<%-- * @author yeeku.H.lee kongyeeku@163.com * @version 1.0 * <br/>Copyright (C), 2005-2008, yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: --%> <%@ page contentType="text/html; charset=GBK" language="java"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"/> <title>s:action的成功页面</title> </head> <body> <br/> <s:property value="author"/>,登录成功!! </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>使用s:action标签在页面中调用Action</title> </head> <body> 下面调用第一个Action,并将结果包含到本页面中。<br/> <s:action name="tag1" executeResult="true"/> <hr/> 下面调用第二个Action,并将结果包含到本页面中。<br/> 但阻止本页面请求参数传入Action。<br/> <s:action name="tag2" executeResult="true" ignoreContextParams="true"/> <hr/> 下面调用第三个Action,且并不将结果包含到本页面中。<br/> <s:action name="tag2" executeResult="false"/> 本页面是否可访问?<s:property value="author"/> </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>使用s:bean标签创建JavaBean的实例</title> </head> <body> <!-- 使用bean标签创建一个Person类的实例 --> <s:bean name="org.crazyit.app.dto.Person"> <!-- 使用param标签为Person类的实例传入参数 --> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> <!-- 因为在bean标签内,Person实例位于ValueStack的栈顶, 故可以直接访问lee.Person实例 --> Person实例的name为:<s:property value="name"/><br/> Person实例的age为:<s:property value="age"/> </s:bean> </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>使用s:bean标签创建JavaBean的实例</title> </head> <body> <!-- 使用bean标签创建一个Person类的实例,为其指定了var属性 --> <s:bean name="org.crazyit.app.dto.Person" var="p"> <!-- 使用param标签为Person类的实例传入参数 --> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> </s:bean> <!-- 根据JavaBean实例指定的var属性来访问JavaBean实例 --> Person实例的name为:<s:property value="#p.name"/><br/> Person实例的age为:<s:property value="#p.age"/><br/> ${requestScope.p} </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>使用s:date标签格式化日期</title> </head> <body> <s:bean var="now" name="java.util.Date"/> nice="false",且指定format="dd/MM/yyyy"<br/> <s:date name="#now" format="dd/MM/yyyy" nice="false"/><hr/> nice="true",且指定format="dd/MM/yyyy"<br/> <s:date name="#now" format="dd/MM/yyyy" nice="true"/><hr/> 指定nice="true"<br/> <s:date name="#now" nice="true" /><hr/> nice="false",且没有指定format属性<br/> <s:date name="#now" nice="false"/><hr/> nice="false",没有指定format属性,指定了var<br/> <s:date name="#now" nice="false" var="abc"/><hr/> ${requestScope.abc} <s:property value="#abc"/> </body> </html>
<%-- * @author yeeku.H.lee kongyeeku@163.com * @version 1.0 * <br/>Copyright (C), 2005-2008, yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: --%> <%@ page contentType="text/html; charset=GBK" language="java"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"/> <title>使用s:bean标签创建JavaBean的实例</title> </head> <body> <s:bean name="lee.Person" id="p"> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> </s:bean> <s:property value="#p.name"/><br/> <s:property value="#p.age"/> <s:debug/> </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>使用s:include标签来包含目标页面</title> </head> <body> <h2>使用s:include标签来包含目标页面</h2> <!-- 使用include标签来包含其他页面 --> <s:include value="included-file.jsp"/> <!-- 使用include标签来包含其他页面,并且传入参数 --> <s:include value="included-file.jsp"> <s:param name="author" value="'yeeku'"/> </s:include> </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>使用s:push来将某个值放入ValueStack的栈顶</title> </head> <body> <h2>使用s:push来将某个值放入ValueStack的栈顶</h2> <!-- 使用bean标签创建一个JavaBean实例, 指定var属性,并将其放入Stack Context中 --> <s:bean name="org.crazyit.app.dto.Person" var="p"> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> </s:bean> <!-- 将Stack Context中的p对象放入ValueStack栈顶--> <s:push value="#p"> <!-- 输出ValueStack栈顶对象的name和age属性 --> ValueStack栈顶对象的name属性:<s:property value="name"/><br/> ValueStack栈顶对象的age属性:<s:property value="age"/><br/> </s:push> </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>使用s:set设置一个新变量</title> </head> <body> <h2>使用s:set设置一个新变量</h2> <!-- 使用bean标签定义一个JavaBean实例 --> <s:bean name="org.crazyit.app.dto.Person" id="p"> <s:param name="name" value="'yeeku'"/> <s:param name="age" value="29"/> </s:bean> 将Stack Context中的p值放入默认范围(action)内。<br/> <s:set value="#p" name="xxx"/> Stack Context内xxx对象的name属性:<s:property value="#xxx.name"/><br/> Stack Context内xxx对象的age属性:<s:property value="#xxx.age"/><br/> request范围的xxx对象的name属性:${requestScope.xxx.name}<br/> request范围的xxx对象的age属性:${requestScope.xxx.age}<hr/> 将Stack Context中的p值放入application范围内。<br/> <s:set value="#p" name="yyy" scope="application"/> application范围的yyy对象的name属性:${applicationScope.yyy.name}<br/> application范围的yyy对象的age属性:${applicationScope.yyy.age}<hr/> 将Stack Context中的p值放入session范围内。<br/> <s:set value="#p" name="zzz" scope="session"/> session范围的zzz对象的name属性:${sessionScope.zzz.name}<br/> session范围的zzz对象的age属性:${sessionScope.zzz.age} </body> </html>
<%-- * @author yeeku.H.lee kongyeeku@163.com * @version 1.0 * <br/>Copyright (C), 2005-2008, yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: --%> <%@ page contentType="text/html; charset=GBK" language="java"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"/> <title>s:action的成功页面</title> </head> <body> <br/> <s:property value="author"/>,执行成功!! </body> </html>
<%-- 网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> author yeeku.H.lee kongyeeku@163.com version 1.0 Copyright (C), 2001-2016, yeeku.H.Lee This program is protected by copyright laws. Program Name: Date: --%> <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@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> <title>使用s:url来生成一个URL地址</title> </head> <body> <h2>s:url来生成一个URL地址</h2> 只指定value属性的形式。<br/> <s:url value="editGadget.action"/> <hr/> 指定action属性,且使用param传入参数的形式。<br/> <s:url action="showBook"> <s:param name="author" value="'yeeku'" /> </s:url> <hr/> 既不指定action属性,也不指定value属性,但使用param传入参数的形式。<br/> <s:url includeParams="get" > <s:param name="id" value="%{'22'}"/> </s:url> <hr/> 同时指定action属性和value属性,且使用param传入参数的形式。<br/> <s:url action="showBook" value="xxxx"> <s:param name="author" value="'yeeku'" /> </s:url> </body> </html>
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.i18n.encoding" value="GBK"/> <package name="lee" extends="struts-default"> <!-- 定义第一个Action,使用TagAction的 execute方法作为控制处理逻辑 --> <action name="tag1" class="org.crazyit.app.action.TagAction"> <result name="done">/WEB-INF/content/succ.jsp</result> </action> <!-- 定义第二个Action,使用TagAction的 login方法作为控制处理逻辑 --> <action name="tag2" class="org.crazyit.app.action.TagAction" method="login"> <result name="done">/WEB-INF/content/loginSucc.jsp</result> </action> <action name="*"> <result>/WEB-INF/content/{1}.jsp</result> </action> </package> </struts>
package org.crazyit.app.action; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ActionContext; /** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class TagAction extends ActionSupport { // 封装用户请求参数的author成员变量 private String author; // author的setter和getter方法 public void setAuthor(String author) { this.author = author; } public String getAuthor() { return this.author; } // 定义第一个处理逻辑 public String execute() throws Exception { return "done"; } // 定义第二个处理逻辑 public String login() throws Exception { ActionContext.getContext(). put("author", getAuthor()); return "done"; } }
package org.crazyit.app.dto; /** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class Person { private String name; private int age; // name的setter和getter方法 public void setName(String name) { this.name = name; } public String getName() { return this.name; } // age的setter和getter方法 public void setAge(int age) { this.age = age; } public int getAge() { return this.age; } }