下面我将从1个简单点的计算器实例,介绍struts1的环境配置,和其重要的两个核心类:ActionForm和Action
简单计算器实现思路:
1.提供1个输入界面,输入两个数字和运算符(+、-、*、/),提交后将运算结果显示出来,如果出现毛病显示毛病页面,在正确页面和毛病页面需要显示出输入值、运算符和计算结果。
2.发送计算要求,需要Action处理这个要求,并将计算结果返回。另外,发要求需要传送数据才能计算,所以需要1个ActionForm来进行数据传送。表单上传送过来的数据都是字符串的,ActionForm可以进行数据类型转换。
步骤1:配置Struts环境
1.jar包
拷贝此路径下的所有jar包,并放置在项目的WebRootWEB-INFlib下
Strutsstruts⑴.2.9-binlib下所有的jar包
2.配置ActionServlet
找到Strutsstruts⑴.2.9-binwebappsstruts-blankWEB-INFweb.xml
将红框中的内容拷贝到项目的WebRootWEB-INFweb.xml下
3.配置struts核心配置文件
拷贝Strutsstruts⑴.2.9-binwebappsstruts-blankWEB-INF下的struts-config.xml文件到WebRootWEB-INF下
步骤2:代码实现
1.新建input.jsp页面:提供输入界面,输入两个数字和运算符
<body>
<h1>简易计算器</h1>
<hr>
<form action="cal.action" method="post">
<input type="text" name="value1">
<select name="flag">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" name="value2">
<input type="submit" value="计算">
</form>
</body>
2.新建CalActionForm页面并继承Struts的ActionForm:ActionForm将页面上的数据封转到Action业务类。
<pre name="code" class="java">/**
* ActionForm传送数据
* @author 火云
*
*/
@SuppressWarnings("serial")
public class CalActionForm extends ActionForm {
private int value1;
private String flag;
private int value2;
public int getValue1() {
return value1;
}
public void setValue1(int value1) {
this.value1 = value1;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public int getValue2() {
return value2;
}
public void setValue2(int value2) {
this.value2 = value2;
}
}
3.新建CalAction类并继承Struts的Action,并覆盖execute方法:Action处理每次要求
/**
* Action处理每次要求,继承Struts的Action,并覆盖execute方法
* @author 火云
*
*/
public class CalAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//取出表单数据
CalActionForm calform = (CalActionForm)form; //基于Struts对数据的封装传送,所以我们能强迫转换
int value1 = calform.getValue1();
String flag = calform.getFlag();
int value2 = calform.getValue2();
//处理数据
int result = 0;
try {
if("+".equals(flag)){
result = value1+ value2;
}else if("-".equals(flag)){
result = value1-value2;
}else if("*".equals(flag)){
result=value1*value2;
}else if ("/".equals(flag)){
result=value1/value2;
}
//转向成功页面
request.setAttribute("result", result);
return mapping.findForward("success");
} catch (Exception e) {
e.printStackTrace();
}
//转向毛病页面
return mapping.findForward("error");
}
}
4.配置流程:Struts-config文件
5.success.jsp页面:
<body>
${calform.value1 }
${calform.flag }
${calform.value2 }
=
${result }
</body>
6.error.jsp页面
<body>
${calform.value1 }
${calform.flag }
${calform.value2 }
失败!
</body>
其实,在DRP分销系统中我们接触过MVC开发模式,在MVC开发模式中Servlet扮演着控制器的角色。其主要功能:参数获得,业务逻辑调用,和页面转向。
Struts是基于MVC模式的1个web开发框架。对Servlet进行了封装。为何要进行封转呢。主要是我们在Servlet进行页面转向时,页面都是写死了,直接转到了jsp。如果我们更换jsp名称,就需要修改代码,而且从表单传过来的数据都是字符串类型,我们还需要根据实际的需求进行类型转换。例如(年龄,int类型),每次都需要先转。基于这些种种缘由,Struts对其进行了封转,提供了1种更加灵活的机制。
总结:
以上只是通过1个简单的小例子来对struts1的初步学习。这只是学习的第1阶段,对它的理解还需要看在以后的学习中是不是真实的用心,每种框架都有通的1面,所以只要用心学,多思考,再接触新的框架的时候,任何问题也都会迎刃而解。