最好的学习方式是断点调试框架源码
四种结果处理方式
请求转发(它悄悄替我们找hello.jsp借了钱)
http://localhost:8080/test_struts2/hello/Demo1_Action.action
请求重定向(它让我们去找hello.jsp借钱)
http://localhost:8080/test_struts2/hello/Demo2_Action.action
转发到Action
http://localhost:8080/test_struts2/hello/Demo3_Action.action
重定向到Action
http://localhost:8080/test_struts2/hello/Demo4_Action.action
获得servletAPI
通过ActionContext方式获得
import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; //如何在action中获得原生ServletAPI public class Demo5_Action extends ActionSupport { public String execute() throws Exception { //request域=> map (struts2并不推荐使用原生request域) //不推荐 Map<String, Object> requestScope = (Map<String, Object>) ActionContext.getContext().get("request"); //推荐 ActionContext.getContext().put("name", "requestTom"); //session域 => map Map<String, Object> sessionScope = ActionContext.getContext().getSession(); sessionScope.put("name", "sessionTom"); //application域=>map Map<String, Object> applicationScope = ActionContext.getContext().getApplication(); applicationScope.put("name", "applicationTom"); return SUCCESS; } }
http://localhost:8080/test_struts2/hello/Demo5_Action.action
通过ServletActionContext方式获得
import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; //如何在action中获得原生ServletAPI public class Demo6_Action extends ActionSupport { //并不推荐 public String execute() throws Exception { //原生request HttpServletRequest request = ServletActionContext.getRequest(); //原生session HttpSession session = request.getSession(); //原生response HttpServletResponse response = ServletActionContext.getResponse(); //原生servletContext ServletContext servletContext = ServletActionContext.getServletContext(); return SUCCESS; } }
实现Aware接口的方式获得
import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; //如何在action中获得原生ServletAPI public class Demo7_Action extends ActionSupport implements ServletRequestAware { private HttpServletRequest request; public String execute() throws Exception { System.out.println("原生request:"+request); return SUCCESS; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
http://localhost:8080/test_struts2/hello/Demo7_Action.action
参数获得方式
action生命周期&线程安全&MVC
http://localhost:8080/test_struts2/form1.jsp
(正确输入日期格式2020-04-27)
MVC设计思想 与 JavaEE三层架构
前者是设计思想
后者是解决方案
StrutsMVC
对象驱动&模型驱动
http://localhost:8080/test_struts2/form2.jsp
http://localhost:8080/test_struts2/form3.jsp
集合类型参数封装
http://localhost:8080/test_struts2/form4.jsp
练习
(jar重复,删除版本低的)
http://localhost:8080/test_struts2/jsp/customer/add.jsp