Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
b36ec81
Merge pull request #1 from gxstrap/master
cherishPhoebe Oct 30, 2017
5248b69
修改README
Oct 30, 2017
e3e0480
添加用户资料页面,以及在教课程页面
Oct 30, 2017
71c5540
更新SQL语句
Oct 30, 2017
b8f7daf
添加3张表:私信表、会话表、私信和会话关系表
Oct 30, 2017
058456c
增加用户资料页面个人介绍页,添加用户tab类型枚举
Oct 30, 2017
b44778c
实现用户关注/粉丝页面,增加了friend表
Oct 30, 2017
479841b
右上角头像显示问题处理
Oct 30, 2017
4f08325
更新SQL语句
Oct 30, 2017
f3ed576
Merge pull request #11 from cherishPhoebe/master
cherishPhoebe Oct 31, 2017
40f8f13
Merge pull request #2 from gxstrap/pre
cherishPhoebe Oct 31, 2017
e283cd5
用户资料页显示关注用户的数量和粉丝的数量#10
cherishPhoebe Nov 2, 2017
971a514
添加微博登录功能
caiyuyux Nov 3, 2017
045827f
修改时间字段为空的问题
caiyuyux Nov 3, 2017
3e2c6b6
Update AppTest.java
Nov 4, 2017
ce929b5
merge
Nov 4, 2017
4ec239e
Merge remote-tracking branch 'origin/pre' into pre
Nov 4, 2017
6c575e8
merge
Nov 4, 2017
f7bb016
merge
Nov 4, 2017
cd894ce
Update AppTest.java
Nov 4, 2017
1a93f49
merge
Nov 4, 2017
a77dcab
Merge remote-tracking branch 'origin/pre' into pre
Nov 4, 2017
85c66f9
Update AppTest.java
Nov 4, 2017
f5b202f
merge
Nov 4, 2017
71258ae
Merge remote-tracking branch 'origin/pre' into pre
Nov 4, 2017
ddbcac8
增加查询关注数和粉丝数的方法
Nov 4, 2017
5ad18b6
完成微博绑定功能
caiyuyux Nov 4, 2017
226d7a7
Merge branch 'pre' of https://github.com/gxstrap/xstrap into pre
caiyuyux Nov 4, 2017
017e2ec
修改init-db.sql文件
caiyuyux Nov 4, 2017
b7941a8
修复mysql语句版本兼容问题
caiyuyux Nov 5, 2017
07e67ef
Merge branch 'pre' into master
cherishPhoebe Nov 5, 2017
4acd66c
Merge pull request #14 from cherishPhoebe/master
cherishPhoebe Nov 5, 2017
5c76d6d
本次提交:
Nov 5, 2017
5faf8b6
Merge remote-tracking branch 'origin/pre' into pre
Nov 5, 2017
603d290
修改SQL语句
Nov 5, 2017
55c5876
修复小错误
Nov 5, 2017
437cb90
无关紧要的调整
Nov 5, 2017
98bb36b
美化登录验证码显示
Nov 5, 2017
a657730
增加错误页:404页和500页
Nov 5, 2017
f84e4b9
测试@ModelAttribute
Nov 6, 2017
5f76003
测试数据类型转换
Nov 6, 2017
d41b4cf
logo
zhangquancheng Nov 7, 2017
7fae8cb
更新druid配置
caiyuyux Nov 7, 2017
f7c2828
更新被覆盖的sql
caiyuyux Nov 7, 2017
6a4c9ff
Merge pull request #1 from gxstrap/pre
cherishPhoebe Nov 7, 2017
7e5f8d5
优化Shiro登录,使用MD5盐值加密
Nov 7, 2017
c1053cb
Merge remote-tracking branch 'origin/pre' into pre
Nov 7, 2017
f2603b2
解决冲突
zhangquancheng Nov 8, 2017
03a9070
解决冲突
zhangquancheng Nov 8, 2017
88a6540
解决冲突
zhangquancheng Nov 8, 2017
0eaf515
解决冲突
zhangquancheng Nov 8, 2017
29fc100
解决冲冲突时候留下的问题
zhangquancheng Nov 8, 2017
aa157e8
swagger 添加
zhangquancheng Nov 10, 2017
5d85489
添加视频链接封装处理
caiyuyux Nov 11, 2017
785b6f0
Merge branch 'pre' of https://github.com/gxstrap/xstrap into pre
caiyuyux Nov 11, 2017
c2efbcd
Merge pull request #18 from cherishPhoebe/master
cherishPhoebe Nov 11, 2017
08eb4c3
Merge branch 'pre' of https://github.com/gxstrap/xstrap into pre
caiyuyux Nov 11, 2017
cee4ecb
添加视频测试素材
caiyuyux Nov 11, 2017
7dbc9f8
使用第二种方式加载视频
caiyuyux Nov 11, 2017
fae79bb
Merge pull request #2 from gxstrap/pre
cherishPhoebe Nov 12, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
## xstrap

## 项目简介
该项目前端是高仿某在线教育网站,后端采用Java编写。包含登录、注册、课程列表、课程详情、课时、视频播放、订单等在线视频教育网站所有的模块。目前项目刚刚启动,很多模块都尚未实现,正在一步一步完善中……
该项目前端是高仿某在线教育网站,后端采用Java编写。包含登录、注册、个人设置、我的学习、我的账户、课程列表、课程详情、课时、视频播放、订单支付等在线视频教育网站所有的模块。目前项目刚刚启动,很多模块都尚未实现,正在一步一步完善中……

## 所用技术
SpringBoot、SpringData JPA、BootStrap、FreeMarker、MySQL。
SpringBoot、SpringData JPA、BootStrap、FreeMarker、MySQL、Maven
初步将该项目定位成一个互联网项目,目前演示站是放在腾讯云主机上(Linux,单台),数据库是MySQL,下一步打算使用redis代替本地缓存。
SpringData JPA搭配SpringBoot是史上最简组合,让代码简单到没朋友。BootStrap是一个强大的CSS框架,简洁强大,本人也在学习BootStrap。
FreeMarker语法简单,能生成静态页,互联网项目都在用。MySQL数据库是应用最广泛的开源数据库,上手简单。
项目目前就用到以上技术,后续不排除会加入其他技术,但为了避免项目臃肿,不会让项目变成一个技术的全家桶。

## 开发环境
统一使用IntelliJ IDEA 14.1.7及以上版本作为开发工具,JDK使用1.8,Maven使用3.2;

## 演示效果图

Expand Down Expand Up @@ -39,6 +41,7 @@ FreeMarker语法简单,能生成静态页,互联网项目都在用。MySQL
如果你是新手,参与开源项目将会对你的成长有很大帮助,如果你是老手,可以一起讨论技术选型和项目架构设计,希望能给这个项目注入新的设计思想;

联系邮件:490983587@qq.com
QQ群:680063547(申请入群关键字"xstrap")
或者扫描下面二维码,加我微信:

![](screenshot/weixin.jpg)
Expand Down
55 changes: 55 additions & 0 deletions doc/JSR303数据校验.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
JSR 303 是java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE 6.0中。
JSR 303 通过在Bean属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,
并通过标准的验证接口对Bean进行验证:
---------------------------------------------------------------------------
注解 说明
---------------------------------------------------------------------------
@Null 被注释的元素必须为null
@NotNull 被注释的元素不能为null
@AssertTrue 被注释的元素必须为true
@AssertFalse 被注释的元素必须为false
@Min(value) 被注释的元素必须是一个数字,其值必须>=指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须<=指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须>=指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须<=指定的最大值
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits(integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式

---------------------------------------------------------------------------
Hibernate Validation 是JSR 303 的一个参考实现,除支持所有的标准的校验注解之外,
它还支持以下的扩展注解:

注解 说明
@Email 被注释的元素必须是一个电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串必须非空
@Range 被注释的元素必须在合适的范围内
---------------------------------------------------------------------------
Spring 4.0 拥有自己独立的数据校验框架,同时支持JSR 303 标准的校验框架。
Spring 在进行数据绑定时,可同时调用校验框架完成数据校验工作。
在SpringMVC中, 可直接通过注解驱动的方式进行数据校验。
Spring 的LocalValidatorFactoryBean 既实现了Spring的Validator接口,
也实现了 JSR 303 的Validator接口。只要在Spring容器中定义一个
LocalValidatorFactoryBean,即可将其注入到需要数据校验的Bean中。
Spring本身并没有提供 JSR303 的实现,所以必须将 JSR303 的实现者的jar包
放到类路径下。

通过在处理方法的入参上标注 @Valid注解 即可让SpringMVC 在完成数据绑定之后执行数据校验的工作。
在已经标注了 JSR303 注解的表单/命令对象前标注一个 @Valid, SpringMVC 框架在将请求参数绑定到
该入参对象后,就会调用校验框架根据注解生命的校验规则实施校验。

SpringMVC 是用过对处理方法签名的规约来保存校验结果的:
前一个表单/命令对象的校验结果保存到随后的入参中,这个保存的校验结果的入参必须是 BindingResult
或 Errors 类型,这两个类都位于 org.springframework.validation 包中。


但是需要注意的一点:
需要校验的bean对象和其绑定结果的BindingResult对象必须成对出现,而且它们两个必须紧挨着,之间不能有
其他的入参。

BindingResutl 其实是 Errors的子类, Errors 接口提供了获取错误信息的方法,如 getErrorCount()
或 getFieldErrors(String field)。
BindingResult 扩展了 Errors 接口。
88 changes: 88 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,79 @@
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<!-- 文件上传 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>

<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.2</version>
</dependency>

<!-- shiro权限控制框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>

<!-- shiro+redis缓存插件 -->
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId>
<version>2.4.2.1-RELEASE</version>
</dependency>

<!-- 参数校验 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>

<!-- weibo API -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>weibo4j-oauth2</artifactId>
<version>2.1.1-beta2-3</version>
</dependency>

<!-- http request -->
<dependency>
<groupId>com.github.kevinsawicki</groupId>
<artifactId>http-request</artifactId>
<version>6.0</version>
</dependency>

<!-- common mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.3.8</version>
</dependency>

<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>

</dependencies>

<build>
Expand All @@ -101,5 +174,20 @@
</plugin>
</plugins>
</build>

<repositories><!-- 代码库 -->
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>

</project>
15 changes: 14 additions & 1 deletion src/main/java/com/xuebusi/XstrapApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,21 @@

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class})
@ServletComponentScan
@EnableScheduling
@EnableTransactionManagement
@EnableCaching
@EnableAsync
public class XstrapApplication {

public static void main(String[] args) {
Expand Down
9 changes: 0 additions & 9 deletions src/main/java/com/xuebusi/common/cache/InitDataCacheMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,6 @@ public class InitDataCacheMap {
*/
private static Map<String, Lesson> lessonCacheMap = new HashMap<>();

/**
* 缓存讲师信息
*/
private static Map<String, Teacher>teacherCacheMap = new HashMap<>();

/**
* 缓存用户基本信息
*/
Expand All @@ -57,10 +52,6 @@ public static Map<String, Lesson> getLessonCacheMap() {
return lessonCacheMap;
}

public static Map<String, Teacher> getTeacherCacheMap() {
return teacherCacheMap;
}

public static Map<String, User> getUserCacheMap() {
return userCacheMap;
}
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/com/xuebusi/common/config/DruidDataSourceConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.xuebusi.common.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

@Configuration
@EnableTransactionManagement
/**
* Druid的DataResource配置类
*/
public class DruidDataSourceConfig{


@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}


// 按照BeanId来拦截配置 用来bean的监控
@Bean(value = "druid-stat-interceptor")
public DruidStatInterceptor DruidStatInterceptor() {
DruidStatInterceptor druidStatInterceptor = new DruidStatInterceptor();
return druidStatInterceptor;
}

@Bean
public BeanNameAutoProxyCreator beanNameAutoProxyCreator() {
BeanNameAutoProxyCreator beanNameAutoProxyCreator = new BeanNameAutoProxyCreator();
beanNameAutoProxyCreator.setProxyTargetClass(true);
// 设置要监控的bean的id
beanNameAutoProxyCreator.setBeanNames("sysRoleMapper","loginController");
beanNameAutoProxyCreator.setInterceptorNames("druid-stat-interceptor");
return beanNameAutoProxyCreator;
}

}
38 changes: 38 additions & 0 deletions src/main/java/com/xuebusi/common/config/ErrorConfiguration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.xuebusi.common.config;

import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.servlet.ErrorPage;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;

/**
* Created by SYJ on 2017/11/5.
*/
@Configuration
public class ErrorConfiguration {

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {

return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400"));
container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500"));
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404"));
}
};
}










}
21 changes: 21 additions & 0 deletions src/main/java/com/xuebusi/common/config/FileUploadConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.xuebusi.common.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

/**
* 文件上传配置
* Created by SYJ on 2017/11/6.
*/
@Configuration
public class FileUploadConfig {

@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
resolver.setMaxUploadSize(5242880);
return resolver;
}
}
Loading