MAVEN结构下SSH注解映射 JETTY|TOMCAT
来源:互联网 发布:c语言 strtok s 编辑:程序博客网 时间:2024/06/06 05:48
相对与mybatis,很多同学会觉得hibernate现在用的少,不好用,其实不然,实习阶段遇到很多都是基于hibernate的项目,对于其优劣性有了基础的认识,
在resources下我们需要简历如下几个文件
spring-mvc.xml,很多同学在配置的时候会发现静态资源加载不进去,在此我做了简单测试,古老的方法是控制层采用.do或者.action的后缀方法去识别,未免觉得不好,所以我们去掉后缀之后,必须在xml配置静态资源的加载,否则会被系统过滤。
spring.xml
然后我们在此目录下书写一些demo程序
UserDao.java
UserService.java
controller代码
至此,框架已搭建完成,初始jdk可能默认1.5,同学们自行设置
之前忙着没什么时间,当然也是懒啊,这几天正好利用空闲时间查阅参考资料 整理搭建了一套ssh的demo 希望对初入职场的小伙伴们有所帮助
1.相信大家已经搭建好了java的开发环境了,这边不做说明(百度很多教程)
2.这个demo搭建平台为eclipse,工作中用的多,当然其他idea也可参考,下面进入搭建正题:
首先我们需要new一个基础的maven项目
group id 为包名 arifact id 为项目名
搭建之后的基础结构目录如下图所示
此时java resources 下目录结构是不完整的 来 我们对其进行手动添加,右击java resources即可java resources。
对了 添加 java时可能会出现报错(为什么不深究),其实它是存在的,可以先命名为javas,新建后对其改名。
强迫症患者可以调整顺序,哈哈,我也是。
至此,一个项目结构OK了,接下来我们添加必要的文件。
首先是web.xml的配置,相关说明已打注释
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name></display-name> <!-- spring hibernate --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml,classpath:spring-hibernate.xml</param-value> </context-param> <!-- openSessionInView配置 --> <filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <!--spring mvc 配置 --> <servlet> <servlet-name>ssh_01</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ssh_01</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- encodeing --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <!-- encoding filter for jsp page --> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> </web-app>
pom.xml 选用maven的一个好处就是可以自动下载依赖包,如果下载过慢,也可以自己配置国内镜像,例如阿里巴巴的资源库
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ssh_01</groupId> <artifactId>ssh_01</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>ssh_01 Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2.1-b03</version> <scope>provided</scope> </dependency> <!-- 文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.2</version> </dependency> <!-- fastJson json数组有关的 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.26</version> </dependency> <!-- 使用 Jackson 把 Java 对象转换成 JSON 字串 --> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.11</version> </dependency> <!-- MySQL database driver --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.9</version></dependency><!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>0.2.9</version> </dependency> <!-- aspectjweaver.jar这是Spring AOP所要用到的包 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.7.1</version> </dependency> <!-- hibernate4 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.5.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.2.5.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-ehcache</artifactId> <version>4.2.5.Final</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <version>1.0.1.Final</version> </dependency> <!-- spring mvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.0.RELEASE</version> </dependency> <!-- spring3 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.0.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.26</version> <configuration> <scanIntervalSeconds>3</scanIntervalSeconds> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>8888</port> </connector> </connectors> <scanTargetPatterns> <scanTargetPattern> <directory>src/main/webapp/WEB-INF</directory> <excludes> <exclude>**/*.jsp</exclude> </excludes> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </scanTargetPattern> </scanTargetPatterns> </configuration> </plugin><!-- <plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>8888</port><path>/ssh_01</path><uriEncoding>UTF-8</uriEncoding><finalName>mgr</finalName><server>tomcat7</server></configuration></plugin> --></plugins> <finalName>ssh_01</finalName> </build></project>
config.properties为数据库配置信息
#mysqlhibernate.dialect=org.hibernate.dialect.MySQLDialecthibernate.hbm2ddl.auto=update hibernate.show_sql=truehibernate.format_sql=truesessionInfoName=sessionInfo uploadFieldName=filedatauploadFileMaxSize=20971520uploadFileExts=txt,rar,zip,doc,docx,xls,xlsx,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid uploadDirectory=attached validationQuery=SELECT 1 jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=gbkjdbc.username=rootjdbc.password=rootlog4j.properties是日志记录,file会在项目根目录下生成日志文件
log4j.rootLogger=INFO,A1,R log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.Target=System.out log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%c]%m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=run.log log4j.appender.R.MaxFileSize=10MB log4j.appender.R.Threshold=ALL log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%nspring-hibernate.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "> <!-- 配置数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="0" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="20" /> <!-- 连接池最大空闲 --> <property name="maxIdle" value="20" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="0" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000" /> <!-- <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> --> <property name="validationQuery" value="${validationQuery}" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> <!-- 监控数据库 --> <!-- <property name="filters" value="stat" /> --> <property name="filters" value="mergeStat" /> </bean> <!-- 配置hibernate session工厂 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop><prop key="hibernate.jdbc.batch_size">50</prop><prop key="hibernate.autoReconnect">true</prop> <!-- <prop key="hibernate.current_session_context_class">thread</prop> --><prop key="hibernate.transaction.auto_close_session">false</prop><prop key="hibernate.connection.release_mode">after_transaction</prop> <prop key="current_session_context_class">thread</prop></props></property><property name="packagesToScan" value="com.gyj.model"/></bean> <!-- 配置事务管理器 --> <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 注解方式配置事物 --> <!-- <tx:annotation-driven transaction-manager="transactionManager" /> --> <!-- 拦截器方式配置事物 --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" /> <tx:method name="save*" /> <tx:method name="update*" /> <tx:method name="modify*" /> <tx:method name="edit*" /> <tx:method name="delete*" /> <tx:method name="remove*" /> <tx:method name="repair" /> <tx:method name="deleteAndRepair" /> <tx:method name="get*" propagation="SUPPORTS" /> <tx:method name="find*" propagation="SUPPORTS" /> <tx:method name="load*" propagation="SUPPORTS" /> <tx:method name="search*" propagation="SUPPORTS" /> <tx:method name="datagrid*" propagation="SUPPORTS" /> <tx:method name="*" propagation="SUPPORTS" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="transactionPointcut" expression="execution(* com.gyj.service..*impl.*(..))" /> <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" /> </aop:config> </beans>
spring-mvc.xml,很多同学在配置的时候会发现静态资源加载不进去,在此我做了简单测试,古老的方法是控制层采用.do或者.action的后缀方法去识别,未免觉得不好,所以我们去掉后缀之后,必须在xml配置静态资源的加载,否则会被系统过滤。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 静态文件夹 --><mvc:resources location="/static/" mapping="/static/**"/> <!-- 注解扫描包 --> <context:component-scan base-package="com.gyj.controller" /> <!-- 开启mvc注解 --> <mvc:annotation-driven /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 静态资源映射 --><mvc:resources mapping="/static/**" location="/"/></beans>
spring.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-- 引入属性文件 --> <context:property-placeholder location="classpath:config.properties" /> <!-- 自动扫描dao和service包(自动注入) --> <context:component-scan base-package="com.gyj.dao" /> <context:component-scan base-package="com.gyj.service" /> </beans>
然后我们在此目录下书写一些demo程序
User.java
package com.gyj.model;import java.io.Serializable; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.AccessType; import org.hibernate.annotations.GenericGenerator; @javax.persistence.Entity @javax.persistence.Table(name = "User") @AccessType("field") public class User implements Serializable{ private static final long serialVersionUID = 1L; /** * 用户ID */ @Id @Column(name = "ID", length = 32) @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "uuid") private String id; /** * 用户名 */ @Column(name = "NAME", length = 10) private String name;/** * 用户密码 */@Column(name = "PASSWORD", length = 10) private String password; public String getId(){ return this.id; } public void setId(String id){ this.id=id; } public String getName(){ return this.name; } public void setName(String name){ this.name=name; }public String getPassword() {return password;}public void setPassword(String password) {this.password = password;} }
UserDao.java
package com.gyj.dao;import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional;import com.gyj.model.User; @Repository public class UserDao { @Autowired private SessionFactory sessionFactory; /** * * 获取用户 List */ public List<User> getuserList(){ Session session = sessionFactory.openSession(); String hql = "from User"; Query query = session.createQuery(hql); List<User> userList = query.list(); session.close(); return userList; } /** * * 根据id删除用户 */ public void deleteUser(String userId){ Session session = sessionFactory.openSession(); String hql = "delete from User where id = ? "; Query query = session.createQuery(hql); query.setString(0, userId); query.executeUpdate(); session.close(); } /** * * 保存用户 */ @Transactional public void saveOrUpdate(User user,String userId){ if(!"".equals(userId)&&null!=userId){ user.setId(userId); } Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); session.saveOrUpdate(user); tx.commit(); } /** * 获取用户 */ public User getUser(String userId){ Session session = sessionFactory.openSession(); return (User) session.get(User.class, userId); } }
UserService.java
package com.gyj.service;import java.util.List;import com.gyj.model.User; public interface UserService { public List<User> getUserList(); public void deleteUser(String userId); public void saveOrUpdateUser(User user,String userId); public User getUser(String userId); }UserServiceImpl.java 业务层接口实现
package com.gyj.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import com.gyj.dao.UserDao;import com.gyj.model.User;import com.gyj.service.UserService;@Repositorypublic class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic List<User> getUserList() {return userDao.getuserList();}@Overridepublic void deleteUser(String userId) {userDao.deleteUser(userId);}@Overridepublic User getUser(String userId) {return userDao.getUser(userId);}@Overridepublic void saveOrUpdateUser(User user, String userId) {userDao.saveOrUpdate(user, userId);}}
controller代码
package com.gyj.controller;import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;import com.gyj.model.User;import com.gyj.service.UserService; @Controller public class UserController { @Autowired private UserService service; /** * 获取用户列表 */ @RequestMapping("/getUserList") public String getUserList(Model model){ List<User> userlist = service.getUserList(); model.addAttribute("userlist", userlist); return "UserList"; } /** * 根据id删除用户 */ @RequestMapping("/deleteUser") public String deleteUser(String userId){ service.deleteUser(userId); return "redirect:/getUserList"; } /** * * 新增 编辑用户 */ @RequestMapping("/addOreditUser") public String toAddUserPage(String userId,Model model){ User user = new User(); if(!"".equals(userId)&&null!=userId){ user = service.getUser(userId); }else{ user = null; } model.addAttribute("user", user); return "addUserPage"; } /** *保存用户 */ @RequestMapping("/saveOrupdateUser") public String saveOrUpdateUser(User user,String userId){ service.saveOrUpdateUser(user,userId); return "redirect:/getUserList"; } }
至此,框架已搭建完成,初始jdk可能默认1.5,同学们自行设置
在pom.xml我进行了jetty和tomcat的两中配置
jetty示例访问:
为什么要配置两种访问方式?
Jetty更轻量级。这是相对Tomcat而言的。具体就不阐述了,哈哈,我也是小白。
本文结束,亲测可行,希望对大家的工作学习之路有所帮助。
这是git源码地址:https://git.oschina.net/gaoyaojun/ssh.git
阅读全文
1 0
- MAVEN结构下SSH注解映射 JETTY|TOMCAT
- ssh(maven+jetty)二
- maven jetty部署正常转到tomcat下乱码
- SSH关联映射注解
- maven下使用jetty
- jetty(maven-jetty-plugi)端口/tomcat (tomcat-maven-plugin)端口
- Maven集成tomcat/jetty插件
- Maven+Spring+MVC结构中,jetty/tomcat是如何启动项目的
- Maven+Spring+MVC结构中,jetty/tomcat是如何启动项目的
- Maven+Spring+MVC结构中,jetty/tomcat是如何启动项目的
- Maven+Spring+MVC结构中,jetty/tomcat是如何启动项目的
- Maven+Spring+MVC结构中,jetty/tomcat是如何启动项目的
- ssh(maven+jetty)三(完)
- 在eclipse的tomcat下运行webx(maven)工程(区别于jetty下的项目运行)
- Maven jetty tomcat 运行web项目
- jetty,tomcat maven插件配置数据源
- eclipse+maven+tomcat/jetty进行远程调试
- maven插件启动tomcat和jetty
- python学习笔记(关键字)
- 震惊!高德地图助力高考学子选学校
- Docker容器日志清理
- Vue.js应用笔记
- Math常用方法(学习笔记(2017-6-9))
- MAVEN结构下SSH注解映射 JETTY|TOMCAT
- JSP数据交换(2)
- [JavaWeb]DBUtils中的QueryRunner
- 浏览器如何自定义缩影图标
- 2.1Java基础语法(运算符、键盘录入、流程控制语句)
- Cocos2dx 版本下载方法
- codecademy python lesson1
- sqoop1.99.7搭建和使用
- ajax无刷新分页实现 带实例呦
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
理论实践
校内实践
实践是
实践内容
社会实践报告
让儿子实践一下
社会实践体会
社会实践活动记录表
大学生社会实践报告
社会实践活动
敬老院社会实践心得
实践论读后感
社会实践报告2000字
社会实践心得
大学生实践报告
新时代文明实践
小学综合实践活动
社会实践总结
暑期社会实践报告
社会实践报告3000字范文通用
暑假实践报告
大一社会实践报告2000字
社会实践经历
暑假社会实践报告
新时代文明实践中心
实践部面试自我介绍
综合实践活动
社会实践报告范文
暑期社会实践心得
三下乡社会实践活动报告
社会实践内容
实践的反义词
关于实践的名言
寒假社会实践报告
免费女贝实践图片
女贝贝实践网
社会实践报告图片
毛概实践报告
社会实践部面试技巧
理论和实践都证明
实践单位意见