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