第17章Struts2、Hibernate、Spring的整合应用实例_第1页
第17章Struts2、Hibernate、Spring的整合应用实例_第2页
第17章Struts2、Hibernate、Spring的整合应用实例_第3页
第17章Struts2、Hibernate、Spring的整合应用实例_第4页
第17章Struts2、Hibernate、Spring的整合应用实例_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第17章

Struts2、Hibernate、Spring的整合应用实例17.1Spring与Struts2的整合17.2Spring与Hibernate整合17.3Struts2、Hibernate与Spring的整合17.1Spring与Struts2的整合首先,创建Web项目,命名为Spring_Struts。添加Struts2所需的5个类库:struts2-core-2.0.14.jar,xwork-2.0.4.jar,ognl-2.6.11.ar,common-logging-1.0.4.jar,freemarker-2.3.8.jar。然后修改web.xml,代码如下:

<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5" xmlns="/xml/ns/javaee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd">

<filter> <filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

</filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>17.1Spring与Struts2的整合接着创建login.jsp登录页面,该页面非常简单,代码如下:

<%@pagelanguage="java"pageEncoding="utf-8"%><%@tagliburi="/struts-tags"prefix="s"%><html><head> <title>登录界面</title></head><body> <s:formaction="login.action"method="post"> <s:textfieldname="username"label="学号"/> <s:passwordname="password"label="口令"/> <s:submitvalue="登录"/></s:form></body></html>17.1Spring与Struts2的整合创建Action类LoginAction.java代码。配置struts.xml文件,代码如下:

<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts> <includefile="struts-default.xml"/><packagename="default"extends="struts-default"> <actionname="login"class="org.action.LoginAction"> <resultname="success">/login_success.jsp</result> </action> </package></struts>17.1Spring与Struts2的整合创建login_success.jsp,代码如下:

<%@pagecontentType="text/html;charset=gb2312"%><%@taglibprefix="s"uri="/struts-tags"%><html><body><h2>您好!<s:propertyvalue="xh"/>欢迎您登录成功

</h2></body></html>17.1Spring与Struts2的整合部署运行项目,测试Struts2是否正常运行,在浏览器中输入“http://localhost:8080/Spring_Struts/login.jsp”,在登录框和密码框中输入任意值,单击“登录”按钮,转向登录成功界面,并输出登录名。到此为止,我们仅开发了一个Struts2的程序,下面介绍如何将Spring融入到项目中。首先,添加Spring框架所需的类库,这里要添加Spring的类库“Spring2.5CoreLibraries”及“Spring2.5WebLibraries”,同时要添加Spring支持的Jar包struts2-spring-plugin.jar。该包位于Struts2的lib文件夹下,该Jar文件用于支持Spring与Struts2的整合。在WEB-INF下创建Spring的核心配置文件applicationContext.xml,代码如下:

<?xmlversion="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd"> ...//这里将配置Bean</beans>17.1Spring与Struts2的整合修改web.xml内容,使得项目增加对Spring的支持,代码修改。在项目的src下创建文件perties,编辑代码内容如下:

struts.objectFactory=spring

上述代码表示Struts2的对象的生成交由Spring来完成,修改applicationContext.xml,代码如下:

<?xmlversion="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd">

<beanid="loginAction"class="org.action.LoginAction"></bean></beans>17.1Spring与Struts2的整合完成以后,修改struts.xml如下:

<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts><includefile="struts-default.xml"/><packagename="default"extends="struts-default"> <!--使用Spring生成的类对象

--><actionname="login"class="loginAction"><resultname="success">/login_success.jsp</result></action></package></struts>17.2Spring与Hibernate整合1.创建项目首先,创建Web项目,命名为“Spring_Hibernate”。2.添加Spring的开发能力在MyEclipse中有对Spring框架的支持,右击项目名,依次选择“MyEclipse”→“AddSpringCapabilities…”,出现如图17.1所示的对话框,选中要应用的Spring的版本及所需的类库文件。注意,本书用的Spring版本为Spring2.5,选择Spring的类库Spring2.5CoreLibraries、Spring2.5WebLabraries、Spring2.5AOPLibraries、Spring2.5PersistenceCoreLibraries和Spring2.5PersistenceJDBCLibraries。图17.1添加SpringCapabilities17.2Spring与Hibernate整合单击“Next”按钮,提示是否建立Spring配置文件,在默认情况下选择applicationContext.xml文件的存放路径,选择在WEB-INF文件夹下,如图17.2所示,然后单击“Finish”按钮,完成Spring框架的添加。图17.2创建applicationContext.xml文件17.2Spring与Hibernate整合3.添加Hibernate框架MyEclipse也有对Hibernate框架的支持,右击项目名,依次选择“MyEclipse”→“AddHibernateCapabilities…”菜单项,出现如图17.3所示的对话框,选择Hibernate版本及需要的类库。图17.3添加Hibernate库17.2Spring与Hibernate整合单击“Next”按钮,出现如图17.4所示的对话框,提示是用Hibernate的配置文件还是用Spring的配置文件进行SessionFactory的配置,选择使用Spring来对Hibernate进行管理。这样,最后生成的工程中就不包含hibernate.cfg.xml,可以用Spring来对数据源及SessionFactory进行依赖注入。用Spring对Hibernate的数据源及SessionFactory进行管理图17.4定义Hibernate配置17.2Spring与Hibernate整合单击“Next”按钮,出现如图17.5所示的对话框,提示是否创建一个新的Hibernate配置文件或是使用已有的配置文件。使用已经存在的Spring配置文件为SessionFactory的ID起名图17.5定义Spring-Hibernate配置17.2Spring与Hibernate整合单击“Next”按钮,出现要求选择数据库连接信息的对话框。这里选择前面创建的“MBOOKCONN”,在BeanId中填写“datasource”数据源的Bean名称。在DBDriver中选择“MBOOKCONN”,下面的输入栏会自动填充,出现如图17.6所示的对话框。为DataSourceID起名

图17.6指定新的Spring数据源连接信息17.2Spring与Hibernate整合单击“Next”按钮,出现如图17.7所示的对话框,提示是否创建SessionFactory类,由于本程序是由Spring注入sessionFactory,所以不用创建,单击“Finish”按钮。图17.7定义SessionFactory属性17.2Spring与Hibernate整合生成与数据库表对应的POJO类和对应的映射文件。打开MyEclipse的DatabaseExplorerperspective,打开“MBOOKCONN”,依次选择“MBOOK”→“dbo”→“TABLE”展开数据库表,本项目选择对“book”表的增、删、改、查操作来讲解Spring与Hibernate的整合,故只需生成“book”表的POJO类及对应的映射文件。右击该表名,选择“HibernateReverseEngineering”菜单项,出现如图17.8所示的界面,选择要生成的文件及文件存放的包。图17.8Hibernate映射文件和POJO类17.2Spring与Hibernate整合查看项目的目录结构,在org.vo包中,出现了“Book.java”,代码为。

还有一个映射文件Book.hbm.xml,代码为。在src文件夹下建立包org.dao,在该包下建立接口,命名为“BookDao”,代码如下:

packageorg.dao;importorg.vo.Book;publicinterfaceBookDao{ publicvoidsave(Bookbook); publicvoiddelete(StringISBN); publicvoidupdate(Bookbook); publicBookselect(StringISBN);}17.2Spring与Hibernate整合在src文件夹下建立包org.dao.impl,在该包下建立类,命名为“BookDaoImpl”,代码。修改Spring配置文件applicationContext.xml,将关系映射注册在该文件中,并依赖注入DAO。代码修改。17.2Spring与Hibernate整合4.测试结果准备工作完成后,就可以编写测试类对其进行测试了。在src文件夹下建立包test,在该包下建立类Test,代码。运行该测试类后,查看控制台信息,如图17.9所示。图17.9控制台输出结果17.3Struts2、Hibernate与Spring的整合17.3.1项目创建首先,创建一个Web工程,命名为“Struts2_Hibernate_Spring”,然后修改web.xml文件,代码修改为。17.3.2添加项目开发所需的JARs在添加项目开发所需的JARs前,首先介绍如何在MyEclipse中自定义UserLabraries。右击项目名,依次选择“BuildPath”→“ConfigureBuildPath”,出现如图17.10所示的对话框,然后单击“AddLibrary…”按钮,出现如图17.11所示的对话框。

图17.10PropertiesforStruts2_Hibernate_Spring对话框

图17.11AddLibrary对话框17.3.2添加项目开发所需的JARs选中“UserLibrary”后,单击“Next”按钮,出现如图17.12所示的对话框。图17.12用户定义Library对话框17.3.2添加项目开发所需的JARs单击“UserLibraries…”按钮,出现如图17.13所示的对话框。图17.13添加UserLibraries对话框

17.3.2添加项目开发所需的JARs单击“New”按钮,出现如图17.14所示的对话框。命名后单击“OK”按钮,就会在图17.13中多出刚才自定义的Library,但是该Library中还没有任何的Jar包,所以要为该Library添加Jar包。选中hibernate3,即刚创建的Library,单击“AddJARs…”按钮,找到要添加的Jar包路径,选中这些Jar包后,单击“OK”按钮,就为该Library添加了Jar包。

图17.14“EditUserLibrary”对话框17.3.2添加项目开发所需的JARs现在可以为项目添加开发类库了。选择“MyEclipse”→“AddSpringCapabilities…”,出现选择版本及类库的对话框,如图17.15所示。选择“UserLibraries”选项,也就是用户自定义的Libraries,这里的“UserLibraries”包括了项目开发用到的所有的JARs,所以在后面为项目添加Hibernate开发能力时,可以不添加任何Jar包。图17.15Spring选择类库17.3.3实现Hibernate持久层添加Hibernate的开发框架,右击项目名,依次选择“MyEclipse”→“AddHibernateCapabilities…”。前面说过,在添加Spring开发能力时,已经把所需的JARs全部添加进去,所以这里不用再添加Hibernate类库,故在选择Hibernate类库时,无须选择任何类库,单击“Next”按钮即可,添加Hibernate框架、Hibernate的反向工程及文件修改与17.2节中的第3步相同,读者可以自行操作,这里就不再列举了。17.3.4编写DAO接口及实现类“登录”的DAO接口LoginDao.java代码为:

packageorg.dao;importorg.vo.Login;publicinterfaceLoginDao{ //查询信息 publicLogincheckLogin(Stringname,Stringpassword);}17.3.4编写DAO接口及实现类LoginDao的实现类LoginDaoImpl.java代码为:

packageorg.dao.impl;importjava.util.List;importorg.dao.LoginDao;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;importorg.vo.Login;publicclassLoginDaoImplextendsHibernateDaoSupportimplementsLoginDao{ publicLogincheckLogin(Stringusername,Stringpassword){ String[]str={username,password}; Listlist=this.getHibernateTemplate().find("fromLoginwherename=?andpassword=?",str); Loginlogin=null; if(list.size()>0){ login=(Login)list.get(0); } returnlogin; }}17.3.4编写DAO接口及实现类“图书”的DAO接口BookDao.java代码为:

packageorg.dao;importorg.vo.Book;publicinterfaceBookDao{ //保存图书信息 publicvoidaddBook(Bookbook); //删除图书信息 publicvoiddeleteBook(StringISBN); //修改图书信息 publicvoidupdateBook(Bookbook); //查询图书信息 publicBookselectBook(StringISBN);}17.3.4编写DAO接口及实现类BookDao的实现类BookDaoImpl.java的代码为。“读者”的DAO接口StudentDao.java代码为:

packageorg.dao;importorg.vo.Student;publicinterfaceStudentDao{ publicStudentselectStudent(StringreaderId);//查询读者信息}17.3.4编写DAO接口及实现类StudentDao接口的实现类StudentDaoImpl.java代码为:

packageorg.dao.impl;importjava.util.List;importorg.dao.StudentDao;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;importorg.vo.Student;publicclassStudentDaoImplextendsHibernateDaoSupportimplementsStudentDao{ publicStudentselectStudent(StringreaderId){ Listlist=this.getHibernateTemplate().find("fromStudentwherereaderId=?",readerId); Studentstudent=null; if(list.size()>0) student=(Student)list.get(0); returnstudent; }}17.3.4编写DAO接口及实现类“借书”接口LendDao.java的代码为:

packageorg.dao;importjava.util.List;importorg.vo.Book;importorg.vo.Lend;importorg.vo.Student;publicinterfaceLendDao{ //分页查询指定借书证号的读者所借图书的信息 publicListselectBook(StringreaderId,intpageNow,intpageSize); //查询指定借书证号的读者所借图书的总数 publicintselectBookSize(StringreaderId); //借书 publicvoidaddLend(Lendlend,Bookbook,Studentstudent); //根据图书ID查询Lend信息 publicLendselectByBookId(StringbookId); //根据图书ISBN查询Lend信息 publicLendselectByBookISBN(StringISBN);}LendDao接口的实现类LendDaoImpl.java代码为。17.3.5编写业务逻辑接口及实现类“登录”的业务逻辑接口LoginService.java为:

packageorg.service;importorg.vo.Login;publicinterfaceLoginService{ publicLogincheckLogin(Stringusername,Stringpassword);}17.3.5编写业务逻辑接口及实现类LoginService的实现类LoginServiceImpl.java为:

packageorg.service.impl;importorg.dao.LoginDao;importorg.service.LoginService;importorg.vo.Login;publicclassLoginServiceImplimplementsLoginService{ privateLoginDaologinDao; publicLogincheckLogin(Stringusername,Stringpassword){ returnloginDao.checkLogin(username,password);

} publicLoginDaogetLoginDao(){ returnloginDao; } publicvoidsetLoginDao(LoginDaologinDao){ this.loginDao=loginDao; }}

17.3.5编写业务逻辑接口及实现类“图书”的业务逻辑接口BookService.java为:

packageorg.service;importjava.util.List;importorg.vo.Book;publicinterfaceBookService{ //查询图书信息 publicBookselectBook(StringISBN); //添加图书 publicvoidaddBook(Bookbook); //删除图书 publicvoiddeleteBook(StringISBN); //修改图书 publicvoidupdateBook(Bookbook);} BookService.java的实现类BookServiceImpl.java为。17.3.5编写业务逻辑接口及实现类“读者”的业务逻辑接口StudentService.java为:

packageorg.service;importorg.vo.Student;publicinterfaceStudentService{ //查 publicStudentselectStudent(StringreaderId);}17.3.5编写业务逻辑接口及实现类StudentService.java的实现类StudentServiceImpl.java为:

packageorg.service.impl;importorg.dao.StudentDao;importorg.service.StudentService;importorg.vo.Student;publicclassStudentServiceImplimplementsStudentService{ privateStudentDaostudentDao; publicStudentselectStudent(StringreaderId){ returnstudentDao.selectStudent(readerId); } publicStudentDaogetStudentDao(){ returnstudentDao; } publicvoidsetStudentDao(StudentDaostudentDao){ this.studentDao=studentDao; }}

17.3.5编写业务逻辑接口及实现类“借书”的业务逻辑接口LendService.java为:

packageorg.service;importjava.util.List;importorg.vo.Book;importorg.vo.Lend;importorg.vo.Student;publicinterfaceLendService{ publicListselectBook(StringreaderId,intpageNow,intpageSize); publicintselectBookSize(StringreaderId); publicvoidaddLend(Lendlend,Bookbook,Studentstudent); publicLendselectByBookId(StringbookId); publicLendselectByBookISBN(StringISBN);}

LendService.java的实现类LendServiceImpl.java为。17.3.5编写业务逻辑接口及实现类完成了DAO及业务逻辑的编写后,需要在Spring的配置文件中进行依赖注入,以便于应用,故Spring的配置文件applicationContext.xml文件修改为。完成了对DAO及业务逻辑的注入后,还需要在该配置文件中配置事务支持,所以在配置文件中加入下面的Bean配置。17.3.6“登录”功能的实现在实现功能之前,先做一些简单的准备工作,先创建Struts2的配置文件struts.xml文件,编写代码如下:

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts> <packagename="default"extends="struts-default"> ...//这里后面将添加action配置 </package></struts>

还有就是Struts2与Spring之间整合所需的perties文件:

struts.objectFactory=spring17.3.6“登录”功能的实现“登录”功能的页面如图17.16所示,页面的代码见12.3节中所讲的“index.jsp”代码。图17.16系统主界面(包含登录)17.3.6“登录”功能的实现在head.jsp中登录功能的部分代码如下:

<s:formtheme="simple"action="login"method="post"> <tr><td><inputname=""type="text"class="style1"/></td> <td><imgsrc="images/password.jpg"width="42"height="15"/></td> <td><inputname="login.password"type="password"class="style2"/></td> <td><inputtype="image"src="images/login.jpg"style="width:57;height=15"></td> </tr></s:form>

提交到了“login.action”,在struts.xml文件中action配置为:

<!--登录

--><actionname="login"class="loginAction"> <resultname="success">/index.jsp</result> <resultname="input">/index.jsp</result> </action>17.3.6“登录”功能的实现Action类LoginAction.java实现为。在Spring配置文件中对LoginAction进行依赖注入:

<beanid="loginAction"class="org.action.LoginAction"> <propertyname="loginservice"ref="loginservice"></property> </bean>17.3.7“查询已借图书”功能的实现要“查询已借图书”,首先要进入到“借书”功能的页面,如图17.17所示,界面实现的代码见第12章的12.3.2节的“lend.jsp”。图17.17借书的主界面17.3.7“查询已借图书”功能的实现在输入借书证号后,单击“查询”按钮,查询出该读者的所有借书信息,如输入“081101”,出现如图17.18所示的界面。图17.18查询已借图书页面17.3.7“查询已借图书”功能的实现该功能的页面提交借书证号代码为:

<s:formaction="selectBook"method="post"theme="simple"> <tableborder="1"width="200"cellspacing=1class="font1"> <trbgcolor="#E9EDF5"> <td>内容选择</td> </tr> <tr><tdalign="left"valign="top"height="400"> <br>借书证号:<br><br> <s:textfieldname="lend.readerId"size="15"></s:textfield> <s:submitvalue="查询"></s:submit></td></tr> </table></s:form>17.3.7“查询已借图书”功能的实现提交到了“selectBook.action”,相应地在struts.xml中的配置为:

<!--查询已借图书

--> <actionname="selectBook"class="lendAction"method="selectAllLend"> <resultname="success">/lend.jsp</result> </action>LendAction.java中实现的方法代码为。在Spring配置文件中对LendAction进行依赖注入:

<beanid="lendAction"name=""class="org.action.LendAction"> <propertyname="lendservice"ref="lendservice"></property> <propertyname="bookservice"ref="bookservice"></property> <propertyname="studentservice"ref="studentservice"></property></bean>17.3.8“借书”功能的实现在某读者查询过已借的图书信息后,就可以继续借书了,输入正确的ISBN及图书ID后,单击“借书”按钮,可以完成借书,如图17.19所示。图17.19借书成功页面17.3.8“借书”功能的实现借书功能的页面代码为。这里做了一个判断,前面也已经讲解,就是若“readerId”没有值就让输入框不可编辑,这是因为如果没有“readerId”就不知道谁要借书了。当输入了借书证号查询后,此时“readerId”就被传递到页面中,输入图书的ISBN及图书ID,单击“借书”按钮,请求提交到“lendBook.action”,struts.xml中相应地配置为:

<!--借书

--><actionname="lendBook"class="lendAction"method="lendBook"> <resultname="success">/lend.jsp</result></action>在LendAction.java中的方法实现为。17.3.9“图书管理”功能的实现图书管理界面如图17.20所示,页面实现代码与第12章12.3.4节中的“bookmanage.Jsp”相同。图17.20图书管理界面17.3.9“图书管理”功能的实现在“bookmanage.jsp”页面中,该界面实现了图书的增、删、改、查功能,在逐一介绍之前,先回顾一下该表单的内容:

<s:formtheme="simple"action="book"method="post"enctype="multipart/form-data"validate="true"> <td><tableborder="1"width="200"cellspacing=1class="font1"> <trbgcolor="#E9EDF5"><td>功能选择</td></tr> <tr><tdalign="center"valign="top"height="400"> <br> <s:submitvalue="图书追加"method="addBook"></s:submit> <br><br> <s:submitvalue="图书删除"method="deleteBook"></s:submit> <br><br> <s:submitvalue="图书修改"method="updateBook"></s:submit> <br><br> <s:submitvalue="图书查询"method="selectBook"></s:submit></td> </tr> </table> </td> <td> ...//这里是要提交的表单输入框部分 </td> ...17.3.9“图书管理”功能的实现1.图书追加图书追加是向数据库中添加数据,页面的提交代码为:

<s:submitvalue="图书追加"method="addBook"></s:submit>

在提交标签中定义了“method”属性,指定了该请求应用的Action类中的方法为“addBook”,故当4个按钮都提交给“book.action”时,在指定的Action类中就可以找到相应的方法进行处理。struts.xml中的配置为:

<!--图书管理--><actionname="book"class="bookAction"> <resultname="success">/bookmanage.jsp</result> <resultname="input">/bookmanage.jsp</result> <interceptor-refname="defaultStack"> <paramname="validation.excludeMethods">*</param> <paramname="validation.includeMethods">addBook,updateBook</param> </interceptor-ref></action>17.3.9“图书管理”功能的实现BookActon.java中相应的处理方法为。

在Spring的配置文件中对BookAction进行依赖注入:

<beanid="bookAction"class="org.action.BookAction"> <propertyname="bookservice"ref="bookservice"></property> <propertyname="lendservice"ref="lendservice"></property></bean>17.3.9“图书管理”功能的实现2.图书删除因为图书删除也是提交给了“book.action”,而且在提交标签中定义了使用的方法:

<s:submitvalue="图书删除"method="deleteBook"></s:submit>

所以,直接在BookAction.java中编写方法即可:

publicStringdeleteBook()throwsException{ if(book.getISBN()==null||book.getISBN().equals("")){ this.setMessage("请输入ISBN号"); returnSUCCESS; }elseif(bookservice.selectBook(book.getISBN())==null){ this.setMessage("您输入的ISBN号不存在"); returnSUCCESS; }elseif(lendservice.selectByBookISBN(book.getISBN())!=null){ this.setMessage("该图书已经被借出,故不能删除图书信息!"); returnSUCCESS; } bookservice.deleteBook(book.getISBN()); this.setMessage("删

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论