版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第八課,Servlet,Author: huangjy Email:,本課內(nèi)容,Servlet概述 Servlet的基本概念 Servlet和JSP的區(qū)別 Servlet的生命周期 Servlet基本方法 經(jīng)典設(shè)計模式 會話跟蹤,Author: huangjy Email:,Servlet的基本概念,Servlet是服務(wù)器端的Java小程序,用于響應(yīng)客戶機(jī)的請求。在默認(rèn)情況下,Servlet采用一種無狀態(tài)的請求-響應(yīng)處理方式。 Servlet一般會把處理的結(jié)果以HTML的形式返回,在客戶端形成動態(tài)網(wǎng)頁。 在Servlet API中提供了大量的方法,供編寫Servlet時調(diào)用。 關(guān)于Servle
2、t API的內(nèi)容,請參照SUN J2EE幫助文檔,Author: huangjy Email:,Servlet 的工作內(nèi)容,讀取客戶端顯式傳遞來的數(shù)據(jù)(form data) 讀取客戶端隱式傳遞來的數(shù)據(jù)(request header) 生成結(jié)果 向客戶端發(fā)送顯式數(shù)據(jù)(html) 向客戶端發(fā)送隱式數(shù)據(jù)(response header,狀態(tài)號等),Author: huangjy Email:,Servlet和JSP的區(qū)別,一個網(wǎng)絡(luò)項目至少分為三層:數(shù)據(jù)層、業(yè)務(wù)邏輯層和表現(xiàn)層。 數(shù)據(jù)層通過數(shù)據(jù)庫保存數(shù)據(jù); 業(yè)務(wù)邏輯層用來完成數(shù)據(jù)計算、數(shù)據(jù)分析、數(shù)據(jù)庫連接等處理工作; 表現(xiàn)層用來完成HTML頁面的輸出。
3、 Servlet和JSP的區(qū)別是: JSP更加注重頁面的表現(xiàn),而Servlet更注重業(yè)務(wù)邏輯的實(shí)現(xiàn),且編寫Servlet較難; 同時,JSP只能處理瀏覽器的請求,而Servlet還可以處理客戶端的應(yīng)用程序請求, 可以認(rèn)為Servlet加強(qiáng)了Web服務(wù)器的功能。,Author: huangjy Email:,Servlet的生命周期,Servlet的生命周期分為初始化、處理客戶端的請求和銷毀三個階段。 當(dāng)服務(wù)器裝載一個Servlet的時候,服務(wù)器創(chuàng)建一個Servlet實(shí)例并且調(diào)用Servlet的init()方法。在初始化階段,Servlet初始化參數(shù)被傳遞給Servlet配置對象。 在服務(wù)器裝載
4、和初始化Servlet后,服務(wù)器會創(chuàng)建特定的“請求”對象和一個“響應(yīng)”對象。服務(wù)器調(diào)用Servlet的service()方法,用于傳遞“請求”和“響應(yīng)”對象。service()方法從“請求”對象獲得請求信息,處理該請求并用“響應(yīng)”對象的方法將響應(yīng)返回客戶端。service()方法可以調(diào)用其它方法來處理請求,例如doGet()、doPost()等方法。 如果服務(wù)器不再需要或重新裝入Servlet實(shí)例時,服務(wù)器會調(diào)用Servlet的destroy()方法以終止請求。,Author: huangjy Email:,Servlet基本方法,主要介紹javax.servlet.http提供的HTTP S
5、ervlet應(yīng)用編程接口,包含init()、destroy()、service()等方法 。 init() 在Servlet的生命周期中,init()方法僅執(zhí)行一次。它是在服務(wù)器裝入Servlet時執(zhí)行的。 缺省的init()方法通常是符合要求的,但也可以對其重寫,典型的做法是在該方法中編寫代碼管理服務(wù)器端資源。缺省的init()方法設(shè)置了Servlet的初始化參數(shù),并用它的ServletConfig對象參數(shù)來啟動配置,因此所有重寫init()方法的Servlet應(yīng)調(diào)用super.init()以確保執(zhí)行這些任務(wù)。在調(diào)用service()方法之前,應(yīng)確保已完成了init() 方法。 servic
6、e() service()方法是Servlet的核心。每當(dāng)客戶端請求一個Servlet實(shí)例時,該實(shí)例的service()方法就會被調(diào)用。缺省的是調(diào)用與HTTP請求方法相應(yīng)的do功能。如果HTTP請求方法是GET,則缺省情況下調(diào)用doGet()方法;如果HTTP請求方法是POST,則缺省情況下調(diào)用doPost()方法。 destroy() destroy()方法只執(zhí)行一次,即在服務(wù)器停止并卸載Servlet時被調(diào)用。缺省的destroy()方法通常是符合要求的,但也可以重寫,典型的例子是管理服務(wù)器端的資源。,Author: huangjy Email:,我的第一個Servlet,文件名稱:Sim
7、pleServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SimpleServlet extends HttpServlet public SimpleServlet()super(); /重寫doPost方法 public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException res.setContentType(
8、text/html); / 首先設(shè)置頭信息 PrintWriter out = res.getWriter();/ 用 writer方法返回響應(yīng)數(shù)據(jù) out.println(); out.println(+ The first Servet,So simple!);,Author: huangjy Email:,我的第一個Servlet,out.println(You can see that this output is from the SimpleServlet.); out.println(); out.close(); /重寫doGet方法 public void doGet(Htt
9、pServletRequest req, HttpServletResponse res)throws ServletException,IOException doPost(req,res); 將編譯后的字節(jié)碼文件復(fù)制到Tomcat目錄下的“webappsmyjspWEB-INFclasses”目錄。,Author: huangjy Email:,Servlet基本方法,Servlet需繼承javax.servlet.http.HttpServlet類。 Servlet需重寫父類javax.servlet.http.HttpServlet的相應(yīng)方法,常用處理HTTP請求的方法有: (1)do
10、Get()方法:響應(yīng)客戶端的Get請求 (2)doPost():響應(yīng)客戶端的Post請求 提示: 在客戶端的瀏覽器中,如果form中提交的信息量較小,可以采用GET方式提交,當(dāng)數(shù)據(jù)量較大時,需采用POST方式提交,否則,可能造成數(shù)據(jù)的丟失。 編譯后的Servlet只被裝載一次,因此,當(dāng)源程序修改并編譯后,需重新啟動Tomcat。 Servlet類的修飾符必須為public。,Author: huangjy Email:,為什么不應(yīng)該覆蓋service方法,之后可以通過加入doPut,doTrace等支持其他服務(wù)。 通過添加getLastModified方法,就可以支持修改日期。 service
11、方法自動提供下述支持: HEAD請求 OPTIONS請求 TRACE請求 其他方案:讓doPost調(diào)作doGet,Author: huangjy Email:,使用小結(jié),主要的servlet代碼都在doGet或doPost中: HttpServletRequest包含輸入信息 HttpServletResponse允許我們設(shè)置發(fā)送出去的信息 調(diào)用setContentType指定MIME類型 調(diào)用getWriter獲取針對客戶的Writer 一次性的設(shè)置代碼放在init中 servlet僅僅初始化并載入一次 servlet被多次調(diào)用 初始化參數(shù)在web.xml中設(shè)定,Author: huangj
12、y Email:,運(yùn)行和修改Servlet時的注意事項,運(yùn)行和修改Servlet時的注意事項: 在Tomcat和WTP環(huán)境下, 是自動重新加載的 其他服務(wù)器, 或者Tomcat正式環(huán)境下, 有可能不是自動加載的, 主要是出于性能和安全的考慮.,Author: huangjy Email:,Servlet和Web頁面的簡單交互,范例名稱:使用Servlet和Web頁面進(jìn)行交互 文件名稱:TestServlet.htm Test HTML 請輸入姓名: 您的興趣: ,Author: huangjy Email:,Servlet和Web頁面的簡單交互,Sleep Dance Travel 將該文件復(fù)
13、制到Tomcat的“webappsmyjsp”目錄下,然后,通過瀏覽器訪問如下地址: http:/localhost:8080/myjsp/TestServlet.htm,Author: huangjy Email:,Servlet和Web頁面的簡單交互,文件名稱:TestServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class TestServlet extends HttpServlet /重寫doPost方法 public void doPost(Htt
14、pServletRequest req, HttpServletResponse res) throws ServletException, IOException res.setContentType(text/html); PrintWriter out = res.getWriter(); out.println(); out.println(name: + req.getParameter(myname);,Author: huangjy Email:,Servlet和Web頁面的簡單交互,out.println(); out.println(love: + req.getParame
15、ter(love); out.println(); out.close(); /重寫doGet方法 public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,IOException doPost(req,res); 編譯Servle并將編譯后的Servlet字節(jié)碼文件TestServlet.class復(fù)制到Tomcat的“myjspWEB-INFclasses”目錄下。,Author: huangjy Email:,從JSP到Servlet的信息傳遞,范例名稱:JSP頁面
16、和Servlet之間的信息傳遞 文件名稱:FromJspToServlet.jsp 通過jsp:forward動作將頁面轉(zhuǎn)向了上節(jié)編寫的Servlet,Author: huangjy Email:,從Servlet到JSP的信息傳遞,在Servlet中,通過以下語句將信息由Servlet傳遞到了JSP: request.setAttribute (servletName, servletToJsp); 注意:應(yīng)將Servlet字節(jié)碼文件和JSP文件分別放置在不同的目錄下 在該范例中 ,將編譯后的Servlet復(fù)制到Tomcat目錄的“webappsmyjspWEB-INFclasses”目錄下
17、,將hello.jsp復(fù)制到Tomcat目錄下的“webappsmyjsp”目錄。 重新啟動Tomcat,訪問如下地址: http:/localhost:8888/myjsp/servlet/servletToJsp,Author: huangjy Email:,從Servlet到JSP的信息傳遞,文件名稱:servletToJSP.java import javax.servlet.*; import javax.servlet.http.*; public class servletToJsp extends HttpServlet public void doGet (HttpServl
18、etRequest request, HttpServletResponse response) try / Set the attribute and Forward to hello.jsp request.setAttribute (servletName, servletToJsp); getServletConfig().getServletContext().getRequestDispatcher(/MyServlet/01/hello.jsp).forward(request, response); catch (Exception ex) ex.printStackTrace
19、 (); ,Author: huangjy Email:,從Servlet到JSP的信息傳遞,文件名稱:hello.jsp Servlet使用JSP Servlet使用JSP的例子: 這個頁面是被 這個Servlet調(diào)用的. ,Author: huangjy Email:,經(jīng)典設(shè)計模式,模式一:JSP + JavaBean模式 模式二:MVC模式,Author: huangjy Email:,模式一:JSP + JavaBean模式,在前面章節(jié)中一直采用了這種模式,在該模式中,JSP頁面響應(yīng)請求并將處理結(jié)果返回客戶,所有的數(shù)據(jù)庫操作和復(fù)雜業(yè)務(wù)邏輯操作通過JavaBean來實(shí)現(xiàn)。 使用此模式,常
20、會導(dǎo)致在JSP頁面中嵌入較多的Java代碼,當(dāng)需要處理的商業(yè)邏輯非常復(fù)雜時,情況就會變得很糟糕。大量的Java代碼使得JSP頁面變得非常臃腫,前端的頁面設(shè)計人員稍有不慎,就有可能破壞有關(guān)商業(yè)邏輯的代碼。 這種模式只適用于中小規(guī)模的項目。,Author: huangjy Email:,模式二:MVC模式,“MVC”模式即是:“Model-View-Controller”模式。 Servlet充當(dāng)了控制器(Controller即“C”)的角色,負(fù)責(zé)響應(yīng)客戶對業(yè)務(wù)邏輯的請求并根據(jù)用戶的請求行為,決定將調(diào)用的JSP頁面。 JSP頁面處于表現(xiàn)層,也就是視圖(View即“V”)的角色。 JavaBean負(fù)
21、責(zé)數(shù)據(jù)的處理,也就是模型(Model即“M”)的角色。 在開發(fā)中,采用模式二,可以具有更清晰的邏輯劃分,能夠有效的區(qū)分不同的角色,避免彼此間的互相影響,充分發(fā)揮每位開發(fā)人員的特長。 該模式在開發(fā)大型項目時表現(xiàn)出的優(yōu)勢尤其突出。,Author: huangjy Email:,會話跟蹤,為什么要進(jìn)行會話跟蹤 當(dāng)客戶在在線商店中向他們的購物車中添加商品時,服務(wù)器如何才能知道購物車中已經(jīng)有什么商品了呢? 當(dāng)客戶決定結(jié)賬時,服務(wù)器如何能夠確定客戶對應(yīng)之前創(chuàng)建的哪個購物車呢?,Author: huangjy Email:,會話跟蹤的三種實(shí)現(xiàn),進(jìn)行會話跟蹤:cookie 進(jìn)行會話跟蹤:URL重寫 進(jìn)行會話跟
22、蹤:隱藏的表單域,Author: huangjy Email:,進(jìn)行會話跟蹤:cookie, 思想:把cookie與服務(wù)器上的數(shù)據(jù)關(guān)聯(lián)起來 String sessionID = makeUniqueString(); HashMap sessionInfo = new HashMap(); HashMap globalTable = findTableStoringSessions(); globalTable.put(sessionID, sessionInfo); Cookie sessionCookie = new Cookie(JSESSIONID, sessionID); respo
23、nse.addCookie(sessionCookie); 接下來要做的是: 提取出存儲會話標(biāo)識符的cookie 為cookie設(shè)置合適的過期時間 將散列表與每個請求關(guān)聯(lián)起來 生成唯一的會話標(biāo)識符,Author: huangjy Email:,進(jìn)行會話跟蹤:URL重寫, 思想 客戶程序在每個URL的尾部添加一些額外的數(shù)據(jù)來標(biāo)識會話 服務(wù)器將這個標(biāo)識符與它所存儲的有關(guān)會話的數(shù)據(jù)關(guān)聯(lián)起來 例如,http:/host/path/file.jsp;jsessionid=1234 優(yōu)點(diǎn) cookie被禁用或者根本不支持的情況下依舊能夠工作 缺點(diǎn) 必須對所有指向您的網(wǎng)站的URL進(jìn)行編碼 所有頁面必須動態(tài)生
24、成 不能使用預(yù)先記錄下來的URL進(jìn)行訪問,或者從其他網(wǎng)站鏈接進(jìn)行訪問,Author: huangjy Email:,進(jìn)行會話跟蹤:隱藏的表單域, 思想: 優(yōu)點(diǎn) cookie被禁用或者根本不支持的情況下依舊能夠工作 缺點(diǎn) 涉及許多冗長的處理工作 所有的頁面必須是表單提交之后的結(jié)果,Author: huangjy Email:,Java的會話跟蹤, 會話對象生存于服務(wù)器上 會話自動通過cookie或URL重寫與客戶關(guān)聯(lián)起來 使用request.getSession來得到會話 后臺:系統(tǒng)檢查cookie或附加在URL上的額外信息,看看是否與之前存儲的會話對象的鍵相匹配。如果匹配,它返回該對象,如果不
25、匹配,則創(chuàng)建新的對象,指定一個cookie或URL信息作為它的鍵,并返回新創(chuàng)建的會話對象。 類散列表機(jī)制允許我們將任何對象存儲到會話中 setAttribute存儲值 getAttribute讀取值,Author: huangjy Email:,會話跟蹤基礎(chǔ), 訪問會話對象 調(diào)用request.getSession獲取HttpSession對象 這是一個與用戶相關(guān)聯(lián)的散列表 查找與會話相關(guān)聯(lián)的信息 調(diào)用HttpSession對象的getAttribute,將返回的值轉(zhuǎn)換成合適的類型,要注意檢查結(jié)果是否為null。 將信息存入會話 使用setAttribute給出相應(yīng)的鍵和值。 廢棄會話數(shù)據(jù) 調(diào)
26、用removeAttribute廢棄指定的值。 調(diào)用invalidate廢棄整個會話。 調(diào)用logout 將客戶從Web/應(yīng)用服務(wù)器注銷。,Author: huangjy Email:,會話跟蹤基礎(chǔ):示例代碼,HttpSession session = request.getSession(); SomeClass value = (SomeClass)session.getAttribute(someID); if (value = null) value = new SomeClass(.); session.setAttribute(someID, value); doSomething
27、With(value); 如果被修改的值為同一對象,(在對值做出修改后)不需要再次調(diào)用setAttribute。但是,如果值是不可變的,那么修改后的值將會是新對象的引用,我們必須再次調(diào)用setAttribute。,Author: huangjy Email:,如果服務(wù)器使用URL重寫有哪些變化?, 會話跟蹤代碼: 沒有變動 生成鏈接到同一網(wǎng)站的超鏈接的代碼: 將URL傳給response.encodeURL處理。 如果服務(wù)器使用cookie,它原封不動地返回URL。 如果服務(wù)器使用URL重寫,它將會話信息附加到URL上。 例如: String url = order-page.html; ur
28、l = response.encodeURL(url); sendRedirect到自己網(wǎng)站的代碼: 將URL傳遞給response.encodeRedirectURL,Author: huangjy Email:,HttpSession的方法, getAttribute 從會話對象中提取出一個之前存儲的值。如果沒有找到與給定名稱相關(guān)聯(lián)的值,則返回null。 setAttribute 把值與名稱關(guān)聯(lián)起來。更改的監(jiān)控:讓值實(shí)現(xiàn)HttpSessionBindingListener。 removeAttribute 移除與名稱關(guān)聯(lián)的值。 getAttributeNames 返回會話中所有屬性的名稱。
29、 getId 返回惟一的標(biāo)識符。,Author: huangjy Email:,HttpSession的方法, isNew 確定會話對于客戶(不是針對頁面)來說是否為新創(chuàng)建的 getCreationTime 返回會話初次創(chuàng)建的時間 getLastAccessedTime 返回客戶端最近一次發(fā)送會話的時間 getMaxInactiveInterval, setMaxInactiveInterval 取得或設(shè)置在未被訪問的情況下多長時間應(yīng)該將會話置為無效 invalidate 廢棄當(dāng)前的會話 logout 廢棄與用戶相關(guān)聯(lián)的所有會話,Author: huangjy Email:,顯示客戶訪問計數(shù)的
30、servlet,public class ShowSession extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html); HttpSession session = request.getSession(); String heading; Integer accessCount =(Integer)session.
31、getAttribute(accessCount); if (accessCount = null) accessCount = new Integer(0); heading = Welcome, ; else heading = Welcome Back; accessCount = new Integer(accessCValue() + 1); session.setAttribute(accessCount, accessCount); out.println (docType + n + ,Author: huangjy Email:,顯示客戶訪問計數(shù)的servle
32、t,PrintWriter out = response.getWriter(); out.println (docType + n + + title + n + n + n + + heading + n + Information on Your Session:n + n + n + Info TypeValuen + Number of Previous Accessesn + + accessCount + n + n + );,Author: huangjy Email:,進(jìn)行會話跟蹤小結(jié), 會話并不跨網(wǎng)絡(luò)傳遞 傳遞的只是唯一標(biāo)識符 獲取會話 request.getSession
33、 從會話中提取數(shù)據(jù) session.getAttribute 進(jìn)行類型轉(zhuǎn)換,并注意檢查結(jié)果是否為null 將數(shù)據(jù)存入會話 session.setAttribute,Author: huangjy Email:,Filter 工作原理,Author: huangjy Email:,編寫filter,實(shí)現(xiàn)類必須實(shí)現(xiàn)javax.servlet.Filter 接口,其中包含三個方法: void init(FilterConfig config) throws ServletException:這是容器所調(diào)用的初始化方法。它保證了在第一次 doFilter() 調(diào)用前由容器調(diào)用。它能獲取在 web.xm
34、l 文件中指定的filter初始化參數(shù)。 void destroy():完成過濾行為后系統(tǒng)自動調(diào)用的方法 void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException: 完成具體的過濾工作。,Author: huangjy Email:,Filter應(yīng)用舉例,public class EncodingFilter implements Filter private FilterConfig config = null; private
35、String targetEncoding = ASCII; / default to ASCII public void init(FilterConfig config) throws ServletException this.targetEncoding = config.getInitParameter(encoding); /在過濾器中實(shí)現(xiàn)字符集編碼轉(zhuǎn)化 public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain) throws IOException, Ser
36、vletException HttpServletRequest request = (HttpServletRequest)srequest; request.setCharacterEncoding(targetEncoding); / move on to the next chain.doFilter(srequest,sresponse); public void destroy() . ,Author: huangjy Email:,Filter 對應(yīng)配置,filterfilter-nameEncodingFilter/filter-namedisplay-nameEncoding
37、 Filter/display-namedescriptionno description/descriptionfilter-classcom.sun.j2ee.blueprints.encodingfilter.web.EncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-valueinit-param/filter filter-mappingfilter-nameEncodingFilter/filter-nameurl-pattern/admin/*/url-p
38、attern /filter-mapping,Author: huangjy Email:,使用Filter的步驟,創(chuàng)建一個類實(shí)現(xiàn) Filter 接口 實(shí)現(xiàn)方法: doFilter, init, destroy 將過濾行為放到doFilter方法中 參數(shù):ServletRequest, ServletResponse, FilterChain 調(diào)用 FilterChain的 doFilter方法 調(diào)用下一個過濾器或者實(shí)際資源 將過濾器注冊到對應(yīng)jsp或Servlet上 利用web.xml 中的filter 和 filter-mapping 使調(diào)用Servlet失效,Author: huangjy Email:,案例:簡單的filter,public class ReportFilter
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)機(jī)構(gòu)內(nèi)部審核制度
- 駕駛員培訓(xùn)學(xué)校規(guī)章制度
- 培訓(xùn)班考生考勤管理制度
- 口才培訓(xùn)班內(nèi)部管理制度
- 農(nóng)民工安全培訓(xùn)制度
- 搶救儀器培訓(xùn)制度
- 培訓(xùn)前臺接待制度
- 雙減培訓(xùn)班退費(fèi)制度
- 每周例行培訓(xùn)制度
- 入職培訓(xùn)考勤制度
- 2026凱翼汽車全球校園招聘(公共基礎(chǔ)知識)綜合能力測試題附答案
- 山東省威海市環(huán)翠區(qū)2024-2025學(xué)年一年級上學(xué)期1月期末數(shù)學(xué)試題
- 2025年手術(shù)室護(hù)理實(shí)踐指南知識考核試題及答案
- 外貿(mào)公司采購專員績效考核表
- 彩禮分期合同范本
- 胸腺瘤伴重癥肌無力課件
- 十五五安全生產(chǎn)規(guī)劃思路
- 一年級地方課程教案
- 剪刀車專項施工方案
- 授信合同與借款合同(標(biāo)準(zhǔn)版)
- 2024-2025學(xué)年四川省綿陽市七年級(上)期末數(shù)學(xué)試卷
評論
0/150
提交評論