任务
使用struts1完成两个数的加减乘除,计算成功,则跳入计算成功页面返回算术表达式,计算失败则返回计算失败
要点
1.使用idea搭建Struts环境
2.开发流程梳理
3.struts元素介绍(ActionServlet、Action、ActionForword、ActionForm)
4.配置文件介绍(web.xml、Struts_config.xml)
5.ActionForm类与Action类的开发
6.jsp页面元素的补充了解
1.使用idea搭建Struts环境
使用idea构建mavenwebapp项目

导入必备架包

这样环境就搭建完了
2.开发流程梳理
1.涉及三个页面,输入页面、成功页面、失败页面
2.配置文件配置:
web.xml配置servlet
Struts_config配置actionForm、action、actionForward
3.action、actionForm、转向页面开发
计算器包含三个字段,param1、param2(两个数字)、flag(一个运算符)==》放入ActionForm中
取输入值、计算数值、转向页面 ==》放入Action中
inut.jsp、success.jsp、error.jsp开发
3.struts元素介绍(ActionServlet、Action、ActionForword、ActionForm)
ActionServlet:继承Servlet类,根据页面元素一些标识,向对应的Action做转发,交由Action处理httpRequest和httpResponse
Action:在strut1中,处理页面的输入元素,一般而言调用Model层的service处理完后,将结果放入request中,通过ActionForword进行转向页面
ActionForword:用于转向页面,可在struts_config中配置
ActionForm:用户获取页面输入信息,将其做类型的转换,例如页面是String===>int
4.配置文件介绍(web.xml、Struts_config.xml)
web.xml与struts相关的配置
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
一些常用标签总结:
servlet:相关servlet的配置
servlet-name:该servlet的名字也是唯一标识
servlet-class:servlet使用的类,由于struts中有自己框架中的ActionServlet,使用jar包路径
load-on-startup:启动servlet的优先级,如果存在多个servlet的时候,设计优先级,对于非负数据而言,数值越小,越先加载
servlet-mapping:servlet的映射关系 servlet-name:对哪个servlet进行配置 url-pattern:尾缀为哪个值的请求,会被servlet处理struts_config相关的配置
<struts-config>
<form-beans>
<form-bean name="calculatorActionForm" type="ActionForm.calculatorActionForm"/>
</form-beans>
<action-mappings>
<action path="/util/cal"
type="Action.CalculatorAction"
name="calculatorActionForm"
validate="false"
attribute="calculatorActionForm"
scope="request">
<forward name="success" path="/operate_error.jsp"/>
<forward name="error" path="/operate_success.jsp"/>
</action>
</action-mappings>
</struts-config>
struts-config:struts的总配置
form-Beans:用于配置ActionForm的全限定类名,支持多个form-Bean配置
action-mapping:用于配置Action的全限定类名
action:关于Action的配置
path:页面url截取规则,识别哪个url由哪个action处理
vaildate:默认是false,进行vaildate校验,配置为true则跳过vaildate校验
attribute:别名,action可用该名字取调用,配置则不能再用name标签的名字调用
scope:包装成什么,默认是session,一般配置成request
forward:关于转向信息的配置
5.ActionForm类与Action类的开发
ActionForm:用于收集表单数据,类似于一个domain类
public class calculatorActionForm extends ActionForm {
private double param1;
private double param2;
private String operator;
public double getParam1() {
return param1;
}
public void setParam1(double param1) {
this.param1 = param1;
}
public double getParam2() {
return param2;
}
public void setParam2(double param2) {
this.param2 = param2;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
}
注意事项:
1.这些私有变量就是如果jsp上要调用时所需要的变量名
2.必须要继承ActionForm类
3.必须要有get、set方法
Action类:作为中间的桥梁,用于将前台数据交给model层处理,将model的处理结果返回给request中,处理转向
public class CalculatorAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
calculatorActionForm cActionForm = (calculatorActionForm)form;
double a = cActionForm.getParam1();
double b = cActionForm.getParam2();
String operator = cActionForm.getOperator();
double rightRst = 0.0;
try{
if("+".equals(operator)){
rightRst = a + b;
}else if("-".equals(operator)){
rightRst = a - b;
}else if("*".equals(operator)){
rightRst = a * b;
}else if("/".equals(operator)){
rightRst = a / b;
}
request.setAttribute("result",rightRst);
mapping.findForward("success");
}catch (Exception e){
e.printStackTrace();
}
return mapping.findForward("error");
}
}
1.需要重写execute的方法,将自己的逻辑写入其中
2.一般均通过ActionForm类,获取前台的数据
3.通过findForward处理转向信息,转向信息时通过配置文件中的name值来获取的
6.jsp页面元素的补充了解
input.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>简易计算机</title>
</head>
<body>
<form action="util/cal.action" method="post">
<input type="text" name="param1">
<select name="operator">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" name="param2">
<input type="submit" value="计算">
</form>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=GB18030" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<meta http-equiv="content-type" content="text/html"; charset="GB18030">
<head>
<title>Title</title>
</head>
<body>
${calculatorActionForm.param1 }
${calculatorActionForm.operator }
${calculatorActionForm.param2 }
=
${result }
</body>
</html>
error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<head>
<title>Title</title>
</head>
<body>
${calculatorActionForm.param1}
${calculatorActionForm.operator}
${calculatorActionForm.param2}
失败
</body>
</html>
重要html元素:
form:表单信息,可以用于提交数据
action:用于进行后台处理的识别,util/cal.action,红色为struts_config中配置的url截取规则,绿色为web.xml中配置的servlet进入规则
input:输入框,type为text,为文本输入框,type为submit,为提交框
select:下拉框,option,用于配置下拉的值
${}:ER表达式获取request中的元素