一聚教程网:一个值得你收藏的教程网站

热门教程

Spring + Spring MVC + Mybatis 高性能web构建教程

时间:2022-06-30 16:10:31 编辑:袖梨 来源:一聚教程网

用最合适的技术去实现,并不断追求最佳实践。这就是架构之道。

  希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法。

  源码地址:https://github.com/Eliteams/quick4j 点击打开

  源码地址:https://github.com/Eliteams/quick4j 点击打开

  源码地址:https://github.com/Eliteams/quick4j 点击打开

  看我们的项目结构:

Spring + Spring MVC + Mybatis 高性能web构建实例教程详解 三联

  是一个典型的Maven 项目 :

  src/main/Java:存放java源文件

  src/main/resources:存放程序资源、配置文件

  src/test/java:存放测试代码文件

  src/main/webapp:web根目录

  pom.xml : maven项目配置文件,管理依赖,编译,打包

  主要的后端架构:spring + Spring MVC + Mybatis + Apache Shiro

  前端界面主要使用MetroNic 模板,

  先看我们搭建完成,跑起来的效果,这样你才有兴趣看下去:

  你可以 在github 上 checkout quick4j项目 查看 ,并跟下面步骤 来搭建:

  强烈建议你,checkout https://github.com/Eliteams/quick4j ,在本地跑起来,再试着自己搭建框架

  1、首先创建 maven 项目 ,用 idea 、eclipse 或 mvn 命令行都行

  2、配置 pom.xml ,添加框架依赖

4.0.0com.eliteamsquick4jwar1.0.0quick4j Apphttps://github.com/starzou/quick4jquick4jorg.mybatis.generatormybatis-generator-maven-plugin${plugin.mybatis.generator}${mybatis.generator.generatorConfig.xml}truetrueorg.apache.maven.pluginsmaven-compiler-plugin${plugin.maven-compiler}${project.build.jdk}${project.build.jdk}${project.build.sourceEncoding}src/main/resources<includes>**/*.properties**/*.xmltruesrc/main/java**/*.properties**/*.xmltrueUTF-8zh_CN1.7${basedir}/src/test/resources/generatorConfig.xmlfile:///${basedir}/src/test/resources/generatorConfig.properties1.3.13.14.114.0.2.RELEASE3.2.21.2.25.1.309.1-901.jdbc41.6.61.2.124.1.21.9.130.9.1.21.0.5<tomcat.jdbc.version>7.0.531.21.03.11.2.31.3.11.93.31.6.124.0.18.Final5.1.1.Finaljunitjunit${junit.version}org.springframeworkspring-core${spring.version}org.springframeworkspring-web${spring.version}org.springframeworkspring-oxm${spring.version}org.springframeworkspring-tx${spring.version}org.springframeworkspring-jdbc${spring.version}org.springframeworkspring-webmvc${spring.version}org.springframeworkspring-aop${spring.version}org.springframeworkspring-context-support${spring.version}org.springframeworkspring-test${spring.version} org.mybatismybatis${mybatis.version}org.mybatismybatis-spring${mybatis.spring.version} mysqlmysql-connector-java${mysql.connector.version}com.alibabadruid${druid.version}org.codehaus.jacksonjackson-mapper-asl${jackson.version}log4jlog4j${log4j.version}org.slf4jslf4j-api${slf4j.version}org.slf4jslf4j-log4j12${slf4j.version} javax.servletjavax.servlet-api3.0.1providedjavax.servletjstl${jstl.version}commons-fileuploadcommons-fileupload${commons.fileupload.version}org.apache.httpcomponentshttpclient${httpclient.version}commons-codeccommons-codec${commons.codec.version}commons-netcommons-net${commons.net.version}commons-loggingcommons-logging1.1.3commons-collectionscommons-collections3.2.1 com.google.collectionsgoogle-collections${google.collections.version}cglibcglib-nodep${cglib.version}org.apache.shiroshiro-spring${shiro.version}org.apache.shiroshiro-ehcache${shiro.version}org.apache.shiroshiro-core${shiro.version}org.apache.shiroshiro-web${shiro.version}org.apache.shiroshiro-quartz${shiro.version}org.aspectjaspectjweaver${aspectj.version}org.aspectjaspectjrt${aspectj.version}org.hibernatehibernate-validator${hibernate.validator.version}io.nettynetty-all${netty.version}org.mybatis.generatormybatis-generator-core1.3.2jartest

3、配置web.xml

web.xml是一个项目的核心,看看它的一些配置:

配置 ContextLoaderListener 监听器

配置Spring字符编码过滤器

配置shiro 安全过滤器

配置Spring MVC 核心控制器 DispatcherServlet

配置一些页面

spring 和 apache shiro 是由一个 ContextLoaderListener 监听器 加载的配置文件,并初始化

contextConfigLocationclasspath*:applicationContext.xml classpath*:applicationContext-shiro.xmlorg.springframework.web.context.ContextLoaderListener encodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncodingtrueencodingFilter/*shiroFilterorg.springframework.web.filter.DelegatingFilterProxytruetargetFilterLifecycletrueshiroFilter/*log4jConfigLocationclasspath:log4j.propertieslog4jRefreshInterval60000org.springframework.web.util.Log4jConfigListenerdispatcherorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath*:spring-mvc.xml1dispatcher/rest/*rest/index404/rest/page/404500/rest/page/500org.apache.shiro.authz.AuthorizationException/rest/page/401

4、spring配置:

applicationContext.xml

classpath*:application.properties

application.properties

##JDBC Global Setting jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/quick4j?useUnicode=true&characterEncoding=utf-8 jdbc.username=root jdbc.password=admin123 ##DataSource Global Setting #配置初始化大小、最小、最大 ds.initialSize=1 ds.minIdle=1 ds.maxActive=20 #配置获取连接等待超时的时间 ds.maxWait=60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 ds.timeBetweenEvictionRunsMillis=60000 #配置一个连接在池中最小生存的时间,单位是毫秒 ds.minEvictableIdleTimeMillis=300000

ehcache.xml

5、Apache Shiro 配置 : 要配置realms bean

apache shiro配置 /app/** = anon /assets/** = anon /rest/user/login = anon /** = authc

ehcache-shiro.xml

6、MyBatis 配置

7、Spring MVC 配置

classpath:messagesclasspath:org/hibernate/validator/ValidationMessagestext/plain;charset=UTF-8application/json;charset=UTF-8 jsp">

messages.properties : hibernate-validator 配置文件,国际化资源文件

#user user.username.null=用户名不能为空 user.password.null=密码不能为空 log4j.properties : [plain] view plain copy print?在CODE上查看代码片派生到我的代码片 # DEBUG,INFO,WARN,ERROR,FATAL LOG_LEVEL=INFO log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Encoding=utf-8 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.FILE.File=${catalina.base}/logs/quick4j.log log4j.appender.FILE.Encoding=utf-8 log4j.appender.FILE.DatePattern='.'yyyy-MM-dd log4j.appender.FILE.layout=org.apache.log4j.PatternLayout #log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n

quick4j.sql

/* SQLyog 企业版 - MySQL GUI v8.14 MySQL - 5.5.27 : Database - quick4j ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; CREATE DATABASE /*!32312 IF NOT EXISTS*/`quick4j` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `quick4j`; /*Table structure for table `permission` */ DROP TABLE IF EXISTS `permission`; CREATE TABLE `permission` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '权限id', `permission_name` varchar(32) DEFAULT NULL COMMENT '权限名', `permission_sign` varchar(128) DEFAULT NULL COMMENT '权限标识,程序中判断使用,如"user:create"', `description` varchar(256) DEFAULT NULL COMMENT '权限描述,UI界面显示使用', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='权限表' /*Data for the table `permission` */ insert into `permission`(`id`,`permission_name`,`permission_sign`,`description`) values (1,'用户新增','user:create',NULL); /*Table structure for table `role` */ DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id', `role_name` varchar(32) DEFAULT NULL COMMENT '角色名', `role_sign` varchar(128) DEFAULT NULL COMMENT '角色标识,程序中判断使用,如"admin"', `description` varchar(256) DEFAULT NULL COMMENT '角色描述,UI界面显示使用', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='角色表' /*Data for the table `role` */ insert into `role`(`id`,`role_name`,`role_sign`,`description`) values (1,'admin','admin','管理员'); /*Table structure for table `role_permission` */ DROP TABLE IF EXISTS `role_permission`; CREATE TABLE `role_permission` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '表id', `role_id` bigint(20) unsigned DEFAULT NULL COMMENT '角色id', `permission_id` bigint(20) unsigned DEFAULT NULL COMMENT '权限id', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='角色与权限关联表' /*Data for the table `role_permission` */ insert into `role_permission`(`id`,`role_id`,`permission_id`) values (1,2,1); /*Table structure for table `user` */ DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(50) DEFAULT NULL COMMENT '用户名', `password` char(64) DEFAULT NULL COMMENT '密码', `state` varchar(32) DEFAULT NULL COMMENT '状态', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='用户表' /*Data for the table `user` */ insert into `user`(`id`,`username`,`password`,`state`,`create_time`) values (1,'starzou',Ǝd969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92',NULL,񟭎-07-17 12:59:08'); /*Table structure for table `user_role` */ DROP TABLE IF EXISTS `user_role`; CREATE TABLE `user_role` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '表id', `user_id` bigint(20) unsigned DEFAULT NULL COMMENT '用户id', `role_id` bigint(20) unsigned DEFAULT NULL COMMENT '角色id', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='用户与角色关联表' /*Data for the table `user_role` */ insert into `user_role`(`id`,`user_id`,`role_id`) values (1,1,1); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

热门栏目