Struts2基础学习2
Struts2基础学习2
项目结构,测试页面与实体类
<%@ 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>Insert title here</title> </head> <body> request: ${requestScope.name}<br> session:${sessionScope.name}<br> application:${applicationScope.name}<br> </body> </html>
<%@ 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>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath}/Demo3Action"> 用户名:<input type="text" name="name" /><br> 年龄:<input type="text" name="age" /><br> 生日:<input type="text" name="birthday" /><br> <input type="submit" value="提交" /> </form> </body> </html>
<%@ 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>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath}/Demo4Action"> 用户名:<input type="text" name="user.name" /><br> 年龄:<input type="text" name="user.age" /><br> 生日:<input type="text" name="user.birthday" /><br> <input type="submit" value="提交" /> </form> </body> </html>
<%@ 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>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath}/Demo5Action"> 用户名:<input type="text" name="name" /><br> 年龄:<input type="text" name="age" /><br> 生日:<input type="text" name="birthday" /><br> <input type="submit" value="提交" /> </form> </body> </html>
<%@ 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>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath}/Demo6Action" method="post" > list:<input type="text" name="list" /><br> list:<input type="text" name="list[3]" /><br> map:<input type="text" name="map['key']" /><br> <input type="submit" value="提交" /> </form> </body> </html>
package com.struts2.pojo; import java.util.Date; /** * @author: 肖德子裕 * @date: 2018/11/20 18:39 * @description: */ public class User { private String name; private Integer age; private Date birthday; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "User [name=" + name + ", age=" + age + ", birthday=" + birthday + "]"; } }
测试Struts2的重定向与转发
package com.struts2.action; import com.opensymphony.xwork2.ActionSupport; /** * @author: 肖德子裕 * @date: 2018/11/20 10:25 * @description: 测试重定向与转发 * 之所以继承ActionSupport类,是因为该类实现了很多接口,我们可以直接使用 */ public class Demo1Action extends ActionSupport { public String index() throws Exception{ System.out.println("hello1"); return SUCCESS; } public String index2() throws Exception{ System.out.println("hello2"); return SUCCESS; } public String index3() throws Exception{ System.out.println("hello3"); return SUCCESS; } public String index4() throws Exception{ System.out.println("hello4"); return SUCCESS; } }
测试Struts2获取servlet api
package com.struts2.action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; import java.util.Map; /** * @author: 肖德子裕 * @date: 2018/11/20 14:05 * @description: 测试struts2获取原生servlet api * 每次请求都会创建一个ActionContext对象(数据中心),请求结束时销毁 * 可以通过该对象获取servlet api * 也可以通过ServletActionContext对象获取api(不推荐) * 也可以通过实现相应的接口获取(不推荐) * 3种方式都是从ActionContext中获取相应api */ public class Demo2Action extends ActionSupport { /** * 在本地线程ThreadLocal上绑定了创建的ActionContext对象 */ public String test() throws Exception{ //获取request(不推荐使用) Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request"); //可以直接保存值到request(推荐) ActionContext.getContext().put("name","request"); //获取session Map<String, Object> sessionScope = ActionContext.getContext().getSession(); sessionScope.put("name","session"); //获取application Map<String, Object> applicationScope = ActionContext.getContext().getApplication(); applicationScope.put("name","application"); return SUCCESS; } }
测试Struts2获取参数的方式
package com.struts2.action; import com.opensymphony.xwork2.ActionSupport; import java.util.Date; /** * @author: 肖德子裕 * @date: 2018/11/20 14:39 * @description: 测试struts2属性获取参数 * 每次请求都会创建一个新的action实例对象 * servlet是线程不安全的;action是线程安全的,可以使用成员变量接收参数 * 参数支持自动转换,如字符串转日期,字符串转int */ public class Demo3Action extends ActionSupport { private String name; private Integer age; private Date birthday; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getParam(){ System.out.println(name+" "+age+" "+birthday); return SUCCESS; } }
package com.struts2.action; import com.opensymphony.xwork2.ActionSupport; import com.struts2.pojo.User; /** * @author: 肖德子裕 * @date: 2018/11/20 18:40 * @description: 测试struts2对象获取参数 */ public class Demo4Action extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getParam(){ System.out.println(user); return SUCCESS; } }
package com.struts2.action; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import com.struts2.pojo.User; /** * @author: 肖德子裕 * @date: 2018/11/20 18:47 * @description: 测试struts2模型驱动获取参数 */ public class Demo5Action extends ActionSupport implements ModelDriven<User> { private User user=new User(); public String getParam(){ System.out.println(user); return SUCCESS; } @Override public User getModel() { return user; } }
package com.struts2.action; import com.opensymphony.xwork2.ActionSupport; import java.util.List; import java.util.Map; /** * @author: 肖德子裕 * @date: 2018/11/20 19:05 * @description: 封装集合类型参数 */ public class Demo6Action extends ActionSupport { private List<String> list; private Map<String,String> map; public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } public String getParams(){ System.out.println(list); System.out.println(map); return SUCCESS; } }
核心配置文件(注意web.xml中要配置过滤器)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="demo1" namespace="/" extends="struts-default" > <!-- 测试转发(默认) --> <action name="Demo1Action" class="com.struts2.action.Demo1Action" method="index" > <result name="success" type="dispatcher" >/index.jsp</result> </action> <!-- 测试重定向 --> <action name="Demo1Action2" class="com.struts2.action.Demo1Action" method="index2" > <result name="success" type="redirect" >/index.jsp</result> </action> <!-- 测试链式转发跳转 --> <action name="Demo1Action3" class="com.struts2.action.Demo1Action" method="index3" > <result name="success" type="chain" > <param name="namspace">/</param> <param name="actionName">Demo1Action</param> </result> </action> <!-- 测试链式重定向 --> <action name="Demo1Action4" class="com.struts2.action.Demo1Action" method="index4" > <result name="success" type="redirectAction" > <param name="namspace">/</param> <param name="actionName">Demo1Action</param> </result> </action> </package> <package name="demo2" namespace="/" extends="struts-default" > <!-- 测试获取servlet api --> <action name="Demo2Action" class="com.struts2.action.Demo2Action" method="test" > <result name="success" type="dispatcher" >/api.jsp</result> </action> </package> <package name="demo3" namespace="/" extends="struts-default" > <!-- 测试属性获取参数 --> <action name="Demo3Action" class="com.struts2.action.Demo3Action" method="getParam" > <result name="success" type="dispatcher" >/form1.jsp</result> </action> </package> <package name="demo4" namespace="/" extends="struts-default" > <!-- 测试对象获取参数 --> <action name="Demo4Action" class="com.struts2.action.Demo4Action" method="getParam" > <result name="success" type="dispatcher" >/form2.jsp</result> </action> </package> <package name="demo5" namespace="/" extends="struts-default" > <!-- 测试模型驱动获取参数 --> <action name="Demo5Action" class="com.struts2.action.Demo5Action" method="getParam" > <result name="success" type="dispatcher" >/form3.jsp</result> </action> </package> <package name="demo6" namespace="/" extends="struts-default" > <!-- 测试集合获取参数 --> <action name="Demo6Action" class="com.struts2.action.Demo6Action" method="getParams" > <result name="success" type="dispatcher" >/form4.jsp</result> </action> </package> </struts>