<action name="helloworld" class="cn.itcast.action.HelloWorld">
<result >/WEB-INF/page/jello.jsp</result>
</action>
如果没有为action指定class,默认值为ActionSupport
如果没有指定method,默认值为execute
如果没有为result指定name属性,默认值为success
result配置类似与struts1中的forward,但struts2提供了多种结果的类型,常用类型有:dispatcher(默认值)、redirect(重定向)、redirectAction(重定向action)、plainText(以源码形式显示,一般用于需要显示技术网站显示源码)
1、dispatcher(转发)
public class HelloWorld { private String msg; public String getMessage() { return msg; } public String execute() { msg= "第一个Struts2例子"; return "success"; } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Struts2例子</title> </head> <body> ${message} </body> </html>
前台获取的属性值,指的是getXxx()方法中的xxx,而不是定义的变量。
2、redirect(重定向)
<action name="helloworld" class="cn.itcast.action.HelloWorld">
<result type="redirect">/hello.jsp?username=${username}</result>
</action>
重新发送请求,在struts2中,每发一次请求都会new一个新的action类,而struts1每次都使用同一个action类
在result中可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性,action中的属性指的是getXxx()方法中的xxx,而不是定义的变量。
public class HelloWorld { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String execute() { try { this.username = URLEncoder.encode("传智播客", "UTF-8");//汉字struts2会译成ISO8859-1的二进制格式,要想显示成汉字,就要进行编码 } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "success"; } }
形成的连接地址:
http://localhost:8080/structs2/hello.jsp?username=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2 前台显示汉字会乱码,所以进行如下操作。
1.<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*,java.net.URLDecoder" 2. pageEncoding="UTF-8"%> 3.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4.<html> 5.<head> 6.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7.<title>Struts2例子</title> 8.</head> 9.<body> 10.<!-- 获取汉字参数 11.request.getParameter("username").getBytes("ISO8859-1") 获取汉字 12.new String (request.getParameter("username").getBytes("ISO8859-1"),"UTF-8") 转成utf-8 13.URLDecoder.decode(new String (request.getParameter("username").getBytes("ISO8859-1"),"UTF-8"),"UTF-8") 进行解码 14. --> 15. <%=URLDecoder.decode(new String (request.getParameter("username").getBytes("ISO8859-1"),"UTF-8"),"UTF-8") %> 16. <br> 17.<!--获取英文参数 此种方式获取汉字,会出现乱码--> 18. ${param.username} 19.</body> 20.</html>
3、redirectAction(重定向action)
同一包中:
<action name="helloworld" class="cn.itcast.action.HelloWorld">
<result type="redirect">/hello.jsp?username=${username}</result>
</action>
<!-- 重定向action -->
<action name="redirectAction">
<result type="redirectAction"> helloworld</result>
</action>
不同包中:通过指定param实现
<package name="itcast" namespace="/test" extends="struts-default">
<!-- 重定向action -->
<action name="redirectAction">
<result type="redirectAction">
<param name="actionName">helloworld</param>
<param name="namespace">/test123</param>
</result>
</action>
</package>
<package name="it" namespace="/test123" extends="struts-default">
<action name="helloworld" class="cn.itcast.action.HelloWorld">
<result>/WEB-INF/page/hello.jsp</result>
</action>
</package>
4、plainText(以源码形式显示,一般用于需要显示技术网站显示源码)
<action name="plainText">
<result type="plainText">
<param name="location">/index.jsp</param>
<param name="charset">UTF-8</param>
</result>
</action>
另外说明一下全局视图,和为action 注入属性
全局视图:
<package name="itcast" namespace="/test" extends="base">
<global-results>
<result name="message">/WEB-INF/page/message.jsp</result>
</global-results>
<action name="manage" class="cn.itcast.action.HelloWorld"
method="add">
</action>
</package>
public class HelloWorld { public String add() { return "message"; } }
这种方式只能在该包内的action可以调用全局视图,所以要对其进行更改。使用包继承。
<package name="base" extends="struts-default">
<global-results>
<result name="message">/WEB-INF/page/message.jsp</result>
</global-results>
</package>
<package name="itcast" namespace="/test" extends="base">
<action name="manage" class="cn.itcast.action.HelloWorld"
method="add">
</action>
</package>
<package name="it" namespace="/test123" extends="base">
<action name="manage" class="cn.itcast.action.HelloWorld"
method="add">
</action>
</package>
这样所有的包就都可以进行访问了。
action注入属性
<action name="list" class="cn.itcast.action.HelloWorld"
method="execute">
<param name="savePath">xxxxxx</param>
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
public class HelloWorld { private String savePath; public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } public String add() { return "message"; } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Struts2例子</title> </head> <body> ${savePath } </body> </html>