任务
使用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中的元素