到目前为止,我们经历了从静态页面到JSP,再到JSP+Servlet+JavaBean的学习过程,又在前面学习了Struts技术。
没有人知道宇宙是怎样开始的。有人推论... 啊,错了,跳到魔兽正史了。
纯JSP盛行的时代是乱世,那时候编写的HTML和JSP混用代码很少存活到今天。业务逻辑越来越复杂,JavaBean和Servlet开始广泛应用,这个世界里开始散发着文明的气息,事情开始变得有秩序。Struts出现的意义大致相当于《拿破仑法典》的颁发,框架的广泛使用铲除了杂乱和无序,还提供给人们各种方便。EJB王朝没落的时候,三层架构+Struts MVC开始了温和的统治,这个新的领袖虽然没有王冠(非jcp委员会) ,也没有权杖(不是jsr标准),但成为了 Java Web应用开发事实标准,得到了天下。
Struts是针对JSP+Servlet的一个MVC的解决方案。
使用开发的4个步骤:
1、给项目添加Struts支持
2、实现业务逻辑类(模型,Model)
3、添加Struts组件
开发ActionForm组件(视图组件,View)
开发Action组件(控制组件,Controller)
开发JSP页面
修改配置文件struts-config.xml,配置ActionForm和Action
4、调试运行
demo
下面我们写一个Calculator,简单练习下Struts框架:
创建项目,搭建框架,我们创建biz包
public class Calculator { public double addition(double num1,double num2) { return num1+num2; } public double subtract(double num1,double num2) { return num1-num2; } public double multiply(double num1,double num2) { return num1*num2; } public double divide(double num1,double num2) { return num1/num2; } }
添加Struts支持:
创建结果页面,修改index页面
Welcome to out website <br> <html:form action="/calc" method="post"> <input type="hidden" name="operate" /> Calculator<br/> num1: <input type="text" name="num1"><br/> num2: <input type="text" name="num2"><br/> <button onclick="doSubmit('doAddition')">加</button> <button onclick="doSubmit('doSubtract')">减</button> <button onclick="doSubmit('doMultiply')">×</button> <button onclick="doSubmit('dodDivide')">÷</button> </html:form>
<script> function doSubmit(opr){ document.forms[0].elements["operate"].value=opr; document.forms[0].submit(); } </script>
好,我们开始创建FormBean、action。
选择Formbean的基类
这里action的基类,我们选择DispatchAction,这就意味着struts-config.xml里,我们要添加属性parameter="operate",它是index页面加的隐藏域的值,这个,你懂的
好,下面要做的是修改Action:
public ActionForward doAddition(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { CalcForm calcForm = (CalcForm) form;// TODO Auto-generated method stub Calculator calculator = new Calculator(); double result; result= calculator.addition(Double.parseDouble(calcForm.getNum1()), Double.parseDouble(calcForm.getNum2())); request.setAttribute("result", result); return mapping.findForward("result"); } public ActionForward doSubtract(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { CalcForm calcForm = (CalcForm) form;// TODO Auto-generated method stub Calculator calculator = new Calculator(); double result; result= calculator.subtract(Double.parseDouble(calcForm.getNum1()), Double.parseDouble(calcForm.getNum2())); request.setAttribute("result", result); return mapping.findForward("result"); } public ActionForward doMultiply(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { CalcForm calcForm = (CalcForm) form;// TODO Auto-generated method stub Calculator calculator = new Calculator(); double result; result= calculator.multiply(Double.parseDouble(calcForm.getNum1()), Double.parseDouble(calcForm.getNum2())); request.setAttribute("result", result); return mapping.findForward("result"); } public ActionForward dodDivide(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { CalcForm calcForm = (CalcForm) form;// TODO Auto-generated method stub Calculator calculator = new Calculator(); double result; result= calculator.divide(Double.parseDouble(calcForm.getNum1()), Double.parseDouble(calcForm.getNum2())); request.setAttribute("result", result); return mapping.findForward("result"); }
输出页面,用el表达式、jstl都行。