版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、物联网工程综合实践第四讲:Java Web开发-2,物联网工程综合实践课程建设小组 北京大学 二零一一年,内容介绍,3.1 MVC架构 3.2 JSP技术 3.3 Servlet技术 3.4 Java Bean技术,3.1 MVC架构,MVC设计模式简介,MVC是一种软件设计模式,它是一种分离业务逻辑与显示界面的设计方法,至今已被广泛地应用; MVC的模型(Model)负责管理程序的业务数据,代表的是应用的业务逻辑,包含应用程序的核心功能,表示企业数据和业务规则,封装了应用程序的状态。 视图(View)负责显示界面,提供模型的表示。它是应用程序的外观,是用户看到并与之交互的界面。视图可以访问模
2、型的读方法,但不能访问写方法。 控制器(Controller)对用户的输入做出反应,创建并设置模型。控制器类似中转站,本身不处理和输出任何数据,从客户端接收请求,并选择执行相应的业务逻辑。,MVC功能模块的关系,一个视图可以查询多个模型,一个模型发生更改时可以通知多个视图,一个控制器可以操纵多个模型和视图。,MVC功能模块的关系,用户根据某个视图的显示信息进行操作,操作请求通过视图组件提交给控制器。控制器再根据请求信息调用模型组件的业务方法和修改模型的数据状态。控制器调用模型组件进行处理后,根据模型结果选择相应的视图组件来显示处理结果和模型中的数据,MVC功能模块的关系,另外,当模型组件的数据
3、发生改变后,它可以通知与之相关的视图组件更新显示,已保持与模型数据的状态同步。,JSP开发模式,为了帮助开发人员更好的利用JSP开发Web应用程序,Sun在早期的JSP规范中定义了两种使用JSP的模式: Model1(模式一); Model2 (模式二);,模式一,模式一主要采用JSP+JavaBean技术,JSP页面负责处理请求和输出相应结果,并将其中发生的一些业务逻辑交给JavaBean处理。,模式一,模式一最大的特点就是将一次请求的相应过程完全交给一个JSP页面负责,其典型的应用就是让创建表单的JSP页面同时负责处理该表单提交的请求,也就是JSP页面纪要输出创建表单的HTML代码,又要处
4、理表单提交的数据。 这种开发模式在进行快速和小规模的应用开发时有优势,但也有一些不足: 应用的实现是基于过程的,一组JSP页面实现一个业务流程,如果要进行改进,必须在多个地方进行修改。这样不利于应用扩展和更新 业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离,不利于应用系统业务的重用和改动。,模式二,模式二借鉴了MVC设计模式来实现显示内容和业务逻辑的完全分离,它综合采用Servlet+JSP+JavaBean技术,由Servlet处理请求和控制业务流程,由JSP输出相应结果,由JavaBean负责具体的业务数据和业务逻辑。,模式二,模式二与模式一最大区别就是将处理请求的功能与产生显示内
5、容的功能分配给两个独立的模块来完成,由Servlet负责接受用户请求和处理业务流程,由JSP产生显示页面。 在模式二中,servlet扮演着控制器的角色,当它接收到客户端请求后,首先创建和调用相应的JavaBean来完成具体的业务逻辑,然后调用合适的JSP页面来产生显示内容。,模式二,因为JSP页面可以直接使用模板元素来产生网页文档的内容,同时可以获取JavaBean中的数据,根据这一特点,JSP页面在模式二中专门负责视图表示层,JavaBean充当了数据模型的角色。由于模型位于Web服务器端,而最终的视图位于用户浏览器端,只有浏览器发出请求后,服务器才会做出相应,没有请求就没有响应,所以,在
6、Web应用中难以实现模型的“状态改变通知”事件,视图不能随模型的改变而自动更新。,模式二,因为在模式二中,Servlet不再负担生成显示内容的任务,只负责控制业务流程的任务,而JSP页面中没有任何业务流程和商业逻辑,只是简单的从Servlet先前创建好的JavaBean对象中检索数据,再将这些数据动态插入预定义的模板中,实现Java应用程序开发和网页制作者的有效分离 只要各个组件相互连接的接口不变,任意一个组件发生修改,其他组件都不用随之改变。,3.2 Servlet技术,Servlet技术,了解Servlet的功能 了解Servlet API 了解JavaWeb应用的生命周期 了解Servl
7、et的生命周期 掌握创建并发布HttpServlet的方法 理解ServletContext与JavaWeb应用的关系,Servlet简介,Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。 运行在Web服务器中的Servlet可完成如下功能: 动态生成HTML文档。 把请求转发给其他Servlet组件。 读取客户端的Cookie,以及向客户端写入Cookie。 访问其他服务器资源(如数据库服务器或基于Java的应用服务器)。,Ser
8、vlet API,Servlet的框架是由两个Java包组成: javax.servlet包:定义了所有的Servlet类都必须实现或扩展的通用接口和类,与任何网络应用层协议无关; javax.servlet.http包:定义了采用HTTP协议通信的HttpServlet类;,Servlet API类框图,Servlet容器为Servlet提供了: 请求对象(ServletRequest和HttpServletRequest):Servlet从该对象中获取来自客户端的请求信息。 响应对象(ServletResponse和HttpServletResponse):Servlet通过该对象来生成响
9、应结果。 Servlet配置对象(ServletConfig):当容器初始化一个Servlet对象时,会向Servlet提供一个ServletConfig对象,Servlet通过该对象来获取初始化参数信息以及ServletContext对象。 Servlet上下文对象(ServletContext):Servlet通过该对象来访问容器为当前Web应用提供的各种资源。,Servlet 接口,Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口。在Servlet接口中定义了五个方法,其中有三个方法在Servlet的生命周期的不同阶段被S
10、ervlet容器调用: init()方法:负责初始化Servlet对象; service()方法:负责响应客户的请求; destroy()方法:当Servlet对象退出生命周期时,负责释放占用的资源。 Servlet接口还定义了以下两个返回Servlet的相关信息的方法。JavaWeb应用中的程序代码可以访问Servlet的这两个方法,从而获得Servlet的配置信息以及其他相关信息: getServletConfig():返回一个ServletConfig对象,该对象中包含了Servlet的初始化参数信息。 getServletInfo():返回一个字符串,该字符串中包含了Servlet的创
11、建者、版本和版权等信息。,Servlet 接口及实现类,GenericServlet抽象类,public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable private transient ServletConfig config; public void destroy() public void init(ServletConfig config) throws ServletException this.config = config; /使当前Servlet对象与
12、Servlet容器传入的ServletConfig对象关联 this.init(); public void init() throws ServletException /子类可以重新实现该方法 public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; . public ServletContext getServletContext() return getServletConfig().getServletContext();,Ge
13、nericServlet抽象类,GenericServlet类尽管实现了Servlet接口中的destroy()方法,但什么也没做。GenericServlet类的具体子类可以覆盖该方法,从而为待销毁的当前Servlet对象释放所占用的各种资源(例如关闭文件输入流和输出流,关闭与数据库的连接等) GenericServlet类实现了ServletConfig接口中的所有方法。因此,GenericServlet类的子类可以直接调用在ServletConfig接口中定义的getServletContext()、getInitParameter()和getInitParameterNames()方法
14、。,HttpServlet抽象类,如果你的Servlet类扩展了HttpServlet类,你通常不必实现service方法,因为HttpServlet类已经实现了service方法,该方法的声明形式如下: protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; 在HttpServlet的service方法中,首先从HttpServletRequest对象中获取HTTP请求方式的信息,然后再根据请求方式调用相应的方法
15、。例如:如果请求方式为GET,那么调用doGet方法;如果请求方式为POST,那么调用doPost方法。,ServletRequest接口,ServletRequest接口中封装了客户请求信息,如客户请求方式、参数名和参数值、客户端正在使用的协议, 以及发出客户请求的远程主机信息等。ServletRequest接口还为Servlet提供了直接以二进制方式读取客户请求数据流的ServletInputStream。 ServletRequest的子类可以为Servlet提供更多的和特定协议相关的数据. 例如: HttpServletRequest 提供了读取HTTP Head信息的方法。,Serv
16、letRequest接口的主要方法,getContentType返回客户请求数据MIME类型 getInputStream返回以二进制方式直接读取客户请求数据的输入流 getParameter根据给定的参数名返回参数值 getRemoteAddr返回远程客户主机的IP地址 getRemoteHost返回远程客户主机名 getRemotePort返回远程客户主机的端口,HttpServletRequest接口,HttpServletRequest接口是ServletRequest接口的子接口,提供方法 getContextPath():返回客户端所请求访问的Web应用的URL入口。 getHea
17、der(String nmae):返回HTTP请求头部的特定项 getHeaderNames():返回一个Enumeration对象,包含了HTTP请求头部的所有项目; getMethods():返回HTTP请求方式 getRequestURI():返回HTTP请求的头部的第一行URI getQueryString():返回HTTP请求中的查询字符串,参加RequestInfoServlet.java http:/localhost:8080/helloapp04/info?username=Tom,ServletResponse 接口,ServletResponse 接口为Servlet提供
18、了生成响应结果的方法。它允许Servlet设置返回数据的长度和MIME类型, 并且提供输出流ServletOutputStream。 ServletResponse子类可以提供更多和特定协议相关的方法。例如: HttpServletResponse 提供设定HTTP HEAD信息的方法。,ServletResponse 接口的主要方法,getOutputStream 返回可以向客户端发送二进制数据的输出流对象ServletOutputStream getWriter 返回可以向客户端发送字符数据的PrintWriter对象 setCharacterEncoding设置Servlet发送的响应数
19、据的字符编码 setContentType设置Servlet发送的响应数据的MIME类型 getCharacterEncoding返回Servlet发送的响应数据的字符编码 getContentType返回Servlet发送的响应数据的MIME类型,ServletConfig接口,在ServletConfig接口中定义了以下方法: getInitParameter(String name) :根据给定的初始化参数名,返回匹配的初始化参数值。 getInitParameterNames():返回一个 Enumeration 对象,里面包含了所有的初始化参数名。 getServletContext
20、():返回一个 ServletContext 对象 getServletName():返回Servlet的名字,即web.xml文件中相应元素的子元素的值。如果没有为Servlet配置子元素,则返回Servlet类的名字。 每个初始化参数包括一对参数名和参数值。在web.xml文件中配置一个Servlet时,可以通过元素来设置初始化参数。元素的子元素设定参数名,子元素设定参数值。,ServletConfig接口,参加FontServlet类 http:/localhost:8080/helloapp04/font?word=HelloWorld,ServletContext接口,Servlet
21、Context是Servlet与Servlet容器之间直接通信的接口 Servlet容器在启动一个 Web 应用时,会为它创建一个 ServletContext 对象。每个 Web 应用都有唯一的ServletContext对象 ServletContext接口提供的方法可分为以下几种类型。 (1)用于在Web应用范围内存取共享数据的方法。 (2)访问当前Web应用的资源。 (3)访问Servlet容器中的其他Web应用。 (4)访问Servlet容器的相关信息。 (5)访问服务器端的文件系统资源。 (6)输出日志。,ServletContext接口,(1)用于在Web应用范围内存取共享数据的
22、方法。 setAttribute(String name, java.lang.Object object):把一个Java对象与一个属性名绑定,并把它存入到ServletContext中。参数name指定属性名,参数object表示共享数据。 getAttribute(String name):根据参数给定的属性名,返回一个Object类型的对象,它表示ServletContext中与属性名匹配的属性值。 getAttributeNames():返回一个 Enumeration 对象,该对象包含了所有存放在ServletContext中的属性名。 removeAttribute(String
23、 name):根据参数指定的属性名,从ServletContext中删除匹配的属性。,ServletContext接口,(2)访问当前Web应用的资源。 getContextPath():返回当前Web应用的URL入口。 getInitParameter(String name):根据给定的参数名,返回Web应用范围内的匹配的初始化参数值。在 web.xml文件中,直接在根元素下定义的元素表示应用范围内的初始化参数。 getInitParameterNames():返回一个Enumeration 对象,它包含了Web应用范围内的所有初始化参数名。 getServletContextName()
24、:返回 Web 应用的名字,即 web.xml文件中元素的值。元素的用法参见本书附录 B(web.xml文件)。 getRequestDispatcher(String path):返回一个用于向其他Web组件转发请求的RequestDispatcher对象。,ServletContext接口,(3)访问Servlet容器中的其他Web应用。 getContext(String uripath):根据参数指定的URI,返回当前Servlet容器中其他Web应用的ServletContext对象。 (4)访问Servlet容器的相关信息。 getMajorVersion():返回Servlet容
25、器支持的Java Servlet API的主版本号。 getMinorVersion():返回Servlet容器支持的Java Servlet API的次版本号。 getServerInfo():返回Servlet容器的名字和版本。,ServletContext接口,(5)访问服务器端的文件系统资源。 getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实的路径。 getResource(String path):返回一个映射到参数指定的路径的URL。 getResourceAsStream(String path):返回一个用于读取参数指定的文件的
26、输入流。 getMimeType(String file) :返回参数指定的文件的MIME类型。 (6)输出日志。 log(String msg):向Servlet的日志文件中写日志。 log(String message, java.lang.Throwable throwable):向Servlet的日志文件中写错误日志,以及异常的堆栈信息。,ServletContext接口,ContextTestServlet.java类 ContextTesterServlet 类调用 context.log()方法来输出日志。在默认情况下,context.log()方法把日志输出到/logs/loc
27、alhost.YYYY-MM-DD.log文件中,其中“YYYY-MM-DD”表示输出日志的日期。,JavaWeb应用的生命周期,启动阶段:加载Web应用的有关数据,创建ServletContext对象,对一些Servlet进行初始化。 运行时阶段:为客户端提供服务。 终止阶段:释放Web应用所占用的各种资源。,JavaWeb应用的启动阶段,Servlet容器在启动JavaWeb应用时,会完成以下操作: (1)把web.xml文件中的数据加载到内存中。 (2)为JavaWeb应用创建一个ServletContext对象。 (3)对所有的Filter进行初始化。 (4)对那些需要在Web应用启动
28、时就初始化的Servlet进行初始化。,Web应用被启动的时机,当Servlet容器启动时,会启动已经发布其中的所有Web应用 通过Tomcat的管理平台启动Web应用 如果Web应用发布到Tomcat中,可以为Web应用配置一个元素,该元素有一个reloadable属性。如果这个属性设为true,Tomcat在运行时会监视在Web应用的WEB-INF/classes 和WEB-INF/lib目录下的类文件的改动,以及监视Web应用的WEB-INF/web.xml文件的改动。如果监测到有类文件或web.xml文件被更新,Tomcat会自动重新启动Web应用。,Tomcat的管理平台,如何登入T
29、omcat的管理平台,从Tomcat的主页( http:/localhost:8080 )上选择Tomcat Manager链接,就会登入Tomcat的管理平台: http:/localhost:8080/manager/html 为了通过安全验证,必须先修改Tomcat根目录下conf/tomcat-users.xml文件: 重启Tomcat服务器,然后就能以用户名tomcat,口令tomcat进行登入。,Tomcat的管理平台,JavaWeb应用的运行时阶段,在这个阶段,它的所有Servlet都处于待命状态,随时可以响应客户端的特定请求,提供相应的服务。 假如客户端请求的Servlet还没
30、有被初始化,Servlet容器会先初始化Servlet,然后再调用它的service()服务方法。,JavaWeb应用的终止阶段,(1)销毁JavaWeb应用中所有处于运行时状态的Servlet。 (2)销毁JavaWeb应用中所有处于运行时状态的Filter。 (3)销毁所有与JavaWeb应用相关的对象,如ServletContext对象等,并且释放Web应用所占用的相关资源。,Servlet的生命周期,Servlet 的生命周期可以分为三个阶段: 初始化阶段 运行时阶段,可以响应客户请求 终止阶段 在javax.servlet.Servlet接口中定义了三个方法init(), servi
31、ce(), destroy(),它们将分别在Servlet的不同阶段被调用。,Servlet的初始化阶段,Servlet容器加载Servlet类,把它的.class文件中的数据读入到内存中。 Servlet容器创建ServletConfig对象。ServletConfig对象包含了特定Servlet的初始化配置信息,如Servlet的初始参数。此外,Servlet容器还会使得ServletConfig对象与当前Web应用的ServletContext对象关联。 Servlet容器创建Servlet对象。 Servlet容器调用Servlet对象的init(ServletConfig confi
32、g)方法。在Servlet接口的GenericServlet实现类的init(ServletConfig config)方法中,会建立Servlet对象与ServletConfig对象的关联关系。 ServletServletConfigServletContext,Servlet被初始化的时机,在下列情况之一,Servlet会进入初始化阶段: (1)当前Web应用处于运行时阶段,特定Servlet被客户端首次请求访问。多数Servlet都会在这种情况下被Servlet容器初始化。 (2)如果在web.xml文件中为一个Servlet设置了元素,那么当Servlet容器启动Servlet所属的
33、Web应用时,就会初始化这个Servlet。 myservlet MyServlet 1 ,Servlet被初始化的时机, servlet1 Servlet1 1 servlet2 Servlet2 2 servletX ServletX ,Servlet的运行时阶段,在这个阶段,Servlet可以随时响应客户端的请求。 对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用 Servlet 的 service方法。service方法从ServletRequest对象获得客户请求信息、处理该请求
34、,并通过ServletResponse对象来生成响应结果。,Servlet的终止阶段,当Web应用被终止,或Servlet容器终止运行时,Servlet容器会先调用 Servlet的destroy方法。在destroy方法中,可以释放Servlet所占用的资源(例如关闭文件输入流和输出流,关闭与数据库的连接等) 。,创建用户自己的HttpServlet类的步骤,(1) 扩展 HttpServlet 抽象类。 (2) 覆盖HttpServlet的doGet()或doPost()等方法。 (3) 获取HTTP 请求信息,例如通过HttpServletRequest 对象来检索 HTML 表单所提交
35、的数据或 URL 上的查询字符串。无论是HTML表单数据还是URL 上的查询字符串,在HttpServletRequest 对象中都以参数名/参数值的形式存放,你可以通过getParameter(String name)方法检索参数信息。 (4) 生成 HTTP 响应结果。通过HttpServletResponse 对象可以生成响应结果。HttpServletResponse 对象有一个 getWriter()方法,该方法返回一个 PrintWriter 对象。使用 PrintWriter 的 print()或 println()方法可以向客户端输出字符串数据。,创建HelloServlet类
36、,第一步: 扩展 HttpServlet 抽象类。 public class HelloServlet extends HttpServlet 第二步:覆盖doGet()方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException ,ServletException,参见sourcecode/helloapp/src/mypack/HelloServlet.java,创建HelloServlet类,第三步:获取HTTP 请求中的请求参数信息 String cli
37、entName=request.getParameter(clientName); if(clientName!=null) /字符编码转换 clientName=new String(clientName.getBytes(ISO-8859-1),GB2312); else clientName=我的朋友;,http:/localhost:8080/helloapp/hello?clientName=小芳,请求参数名=请求参数值,创建HelloServlet类,第四步:生成 HTTP响应结果 PrintWriter out; String title=HelloServlet; /设置响应正
38、文的类型 response.setContentType(text/html;charset=GB2312); /生成HTML正文 out = response.getWriter(); out.print(+title+); out.print(); out.println( +clientName+ : 您好); out.print(); /关闭输出流 out.close();,发布HelloServlet,HelloServlet的.class文件位于helloapp/WEB-INF/classes/mypack目录下。 在web.xml中为HelloServlet类加上如下和元素: H
39、elloServlet mypack.HelloServlet HelloServlet /hello ,运行HelloServlet,通过如下URL访问HelloServlet: http:/localhost:8080/helloapp/hello?clientName=小芳,ServletContext和Web应用关系,当Servlet容器启动Web应用时,并为每个Web应用创建惟一的ServletContext对象。 在ServletContext中可以存放共享数据,它提供了读取或设置共享数据的方法: setAttribute(String name,Object object)把一个
40、对象和一个属性名绑定,将这个对象存储在ServletContext中。 getAttribute(String name)根据给定的属性名返回所绑定的对象 可以把ServletContext看成是一个Web应用的服务器端组件的共享内存。,创建CounterServlet,CounterServlet在ServletContext中存放了一个count属性: ServletContext context = getServletContext(); / 从ServletContext读取count属性 Integer count = (Integer)context.getAttribute(c
41、ount); if ( count = null ) count = new Integer(0); context.setAttribute(count, new Integer(0); ,参见sourcecode/helloapp/src/mypack/CounterServlet.java,创建CounterServlet,每次访问CounterServlet,它会把count属性的值增1,然后把它存储到ServletContext中: / 创建新的count对象,其值增1 count = new Integer(Value() + 1); / 将新的count属性存储
42、到ServletContext中 context.setAttribute(count, count); response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println(); out.println(WebCounter); out.println(); / 输出当前的count属性值 out.println(The current COUNT is : + count + .); out.println();,测试CounterServlet,(1)通过如下URL访问Coun
43、terServlet: http:/localhost:8080/helloapp/counter 当你第一次访问该Servlet,你会在浏览器上看到count值为0。 (2)刷新该页面,你会看到每刷新一次count值增加1,假定最后一次刷新后count值为5。 (3)再打开一个新的浏览器,访问CounterServlet。此时count值为6。 (4)重新启动Tomcat服务器,然后再访问CounterServlet,你会看到count值又被初始化为0。,多线程运行Servlet的并发问题,Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。 由于Serv
44、let/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的并发问题。 如果在编写Servlet/JSP程序时不注意到多线程并发的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题,对于这类随机性的问题调试难度也很大。,会导致并发问题的HelloServlet1,public class HelloServlet1 extends HttpServlet String clientName=null; /clientName为实例变量,实例变量属于类的成员变量 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException ,ServletException clientName=request.getParameter(clientName); if(clientName!=n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保安员24小时工作制度
- 保洁公司工作制度范本
- 信息发布三审工作制度
- 健康体检科总评工作制度
- 健康知识宣传工作制度
- 儿科卫生院帮扶工作制度
- 儿童感统治疗室工作制度
- 全民健身体育场工作制度
- 企业客户关系维护工具开发方案
- 骨科病人静脉输液护理
- 四川三江招商集团有限公司2026年3月公开招聘工作人员考试参考试题及答案解析
- 【励志教育】主题班会:《张雪机车夺冠》从山村少年到世界冠军的缔造者【课件】
- 2026重庆酉阳自治县城区学校选聘教职工91人笔试模拟试题及答案解析
- 2026湖北松滋金松投资控股集团有限公司招聘28人笔试备考试题及答案解析
- 2026江苏无锡惠高新运产业招商发展有限公司招聘6人笔试备考题库及答案解析
- T∕CEA 3030-2026 乘运质量等级 第2部分:自动扶梯和 自动人行道
- 医院清明假期安全课件
- 2026年国海证券行测笔试题库
- 湖北省武汉市2026高三下学期3月调研考试化学试题 含答案
- (新教材)2026年部编人教版三年级下册语文 语文园地三 课件
- 2025年云南省中考数学-26题二次函数降次幂题35道
评论
0/150
提交评论