本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明。

web开发

spring boot web开发非常的简单,其中包括常用的json输出、filters、property、log等

json 接口开发

在以前的spring 开发的时候需要我们提供json接口的时候需要做那些配置呢

添加 jackjson 等相关jar包

配置spring controller扫描

对接的方法添加@ResponseBody

就这样我们会经常由于配置错误,导致406错误等等,spring boot如何做呢,只需要类添加 @RestController 即可,默认类中的方法都会以json的格式返回

@RestControllerpublic classHelloWorldController {

@RequestMapping("/getUser")publicUser getUser() {

User user=newUser();

user.setUserName("小明");

user.setPassWord("xxxx");returnuser;

}

}

如果我们需要使用页面开发只要使用@Controller ,下面会结合模板来说明

自定义Filter

我们常常在项目中会使用filters用于录调用日志、排除有XSS威胁的字符、执行权限验证等等。Spring Boot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,并且我们可以自定义Filter。

两个步骤:

实现Filter接口,实现Filter方法

添加@Configurationz 注解,将自定义Filter加入过滤链

好吧,直接上代码

@Configurationpublic classWebConfiguration {

@BeanpublicRemoteIpFilter remoteIpFilter() {return newRemoteIpFilter();

}

@BeanpublicFilterRegistrationBean testFilterRegistration() {

FilterRegistrationBean registration= newFilterRegistrationBean();

registration.setFilter(newMyFilter());

registration.addUrlPatterns("/*");

registration.addInitParameter("paramName", "paramValue");

registration.setName("MyFilter");

registration.setOrder(1);returnregistration;

}public classMyFilter implements Filter {

@Overridepublic voiddestroy() {//TODO Auto-generated method stub

}

@Overridepublic voiddoFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)

throws IOException, ServletException {//TODO Auto-generated method stub

HttpServletRequest request =(HttpServletRequest) srequest;

System.out.println("this is MyFilter,url :"+request.getRequestURI());

filterChain.doFilter(srequest, sresponse);

}

@Overridepublic voidinit(FilterConfig arg0) throws ServletException {//TODO Auto-generated method stub

}

}

}

自定义Property

在web开发的过程中,我经常需要自定义一些配置文件,如何使用呢

配置在application.properties中

com.neo.title=lancecom.neo.description=share everything

自定义配置类

@Componentpublic classNeoProperties {

@Value("${com.neo.title}")privateString title;

@Value("${com.neo.description}")privateString description;//省略getter settet方法

}

log配置

配置输出的地址和输出级别

logging.path=/user/local/log

logging.level.com.favorites=DEBUG

logging.level.org.springframework.web=INFO

logging.level.org.hibernate=ERROR

path为本机的log地址,logging.level 后面可以根据包路径配置不同资源的log级别

数据库操作

在这里我重点讲述mysql、spring data jpa的使用,其中mysql 就不用说了大家很熟悉,jpa是利用Hibernate生成各种自动化的sql,如果只是简单的增删改查,基本上不用手写了,spring内部已经帮大家封装实现了。

下面简单介绍一下如何在spring boot中使用

1、添加相jar包

org.springframework.boot

spring-boot-starter-data-jpa

mysql

mysql-connector-java

2、添加配置文件

spring.datasource.url=jdbc:mysql://localhost:3306/test

spring.datasource.username=root

spring.datasource.password=root

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.properties.hibernate.hbm2ddl.auto=update

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

spring.jpa.show-sql= true

其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构,有四个值:

create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。

update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。

validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

dialect 主要是指定生成表名的存储引擎为InneoDB

show-sql 是否打印出自动生产的SQL,方便调试的时候查看

3、添加实体类和Dao

@Entitypublic classUser implements Serializable {private static final long serialVersionUID = 1L;

@Id

@GeneratedValueprivateLong id;

@Column(nullable= false, unique = true)privateString userName;

@Column(nullable= false)privateString passWord;

@Column(nullable= false, unique = true)privateString email;

@Column(nullable= true, unique = true)privateString nickName;

@Column(nullable= false)privateString regTime;//省略getter settet方法、构造方法

}

dao只要继承JpaRepository类就可以,几乎可以不用写方法,还有一个特别有尿性的功能非常赞,就是可以根据方法名来自动的生产SQL,比如findByUserName 会自动生产一个以 userName 为参数的查询方法,比如 findAlll 自动会查询表里面的所有数据,比如自动分页等等。。

Entity中不映射成列的字段得加@Transient 注解,不加注解也会映射成列

public interface UserRepository extends JpaRepository {

User findByUserName(String userName);

User findByUserNameOrEmail(String username, String email);

4、测试

@RunWith(SpringJUnit4ClassRunner.class)

@SpringApplicationConfiguration(Application.class)public classUserRepositoryTests {

@AutowiredprivateUserRepository userRepository;

@Testpublic voidtest() throws Exception {

Date date= newDate();

DateFormat dateFormat=DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);

String formattedDate=dateFormat.format(date);

userRepository.save(new User("aa1", "aa@126.com", "aa", "aa123456",formattedDate));

userRepository.save(new User("bb2", "bb@126.com", "bb", "bb123456",formattedDate));

userRepository.save(new User("cc3", "cc@126.com", "cc", "cc123456",formattedDate));

Assert.assertEquals(9, userRepository.findAll().size());

Assert.assertEquals("bb", userRepository.findByUserNameOrEmail("bb", "cc@126.com").getNickName());

userRepository.delete(userRepository.findByUserName("aa1"));

}

}

当让 spring data jpa 还有很多功能,比如封装好的分页,可以自己定义SQL,主从分离等等,这里就不详细讲了

thymeleaf模板

Spring boot 推荐使用来代替jsp,thymeleaf模板到底是什么来头呢,让spring大哥来推荐,下面我们来聊聊

Thymeleaf 介绍

Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。

好了,你们说了我们已经习惯使用了什么 velocity,FreMaker,beetle之类的模版,那么到底好在哪里呢?

比一比吧

Thymeleaf是与众不同的,因为它使用了自然的模板技术。这意味着Thymeleaf的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档。模板还可以用作工作原型,Thymeleaf会在运行期替换掉静态值。Velocity与FreeMarker则是连续的文本处理器。

下面的代码示例分别使用Velocity、FreeMarker与Thymeleaf打印出一条消息:

Velocity:

$message

FreeMarker:

${message}

Thymeleaf:

Hello World!

注意,由于Thymeleaf使用了XML DOM解析器,因此它并不适合于处理大规模的XML文件。

URL

URL在Web应用模板中占据着十分重要的地位,需要特别注意的是Thymeleaf对于URL的处理是通过语法@{...}来处理的。Thymeleaf支持绝对路径URL:

Thymeleaf

条件求值

Login

for循环

Onions2.41yes

就列出这几个吧

页面即原型

在Web开发过程中一个绕不开的话题就是前端工程师与后端工程师的写作,在传统Java Web开发过程中,前端工程师和后端工程师一样,也需要安装一套完整的开发环境,然后各类Java IDE中修改模板、静态资源文件,启动/重启/重新加载应用服务器,刷新页面查看最终效果。

但实际上前端工程师的职责更多应该关注于页面本身而非后端,使用JSP,Velocity等传统的Java模板引擎很难做到这一点,因为它们必须在应用服务器中渲染完成后才能在浏览器中看到结果,而Thymeleaf从根本上颠覆了这一过程,通过属性进行模板渲染不会引入任何新的浏览器不能识别的标签,例如JSP中的,不会在Tag内部写表达式。整个页面直接作为HTML文件用浏览器打开,几乎就可以看到最终的效果,这大大解放了前端工程师的生产力,它们的最终交付物就是纯的HTML/CSS/JavaScript文件。

Gradle 构建工具

spring 项目建议使用Gradle进行构建项目,相比maven来讲 Gradle更简洁,而且gradle更时候大型复杂项目的构建。gradle吸收了maven和ant的特点而来,不过目前maven仍然是Java界的主流,大家可以先了解了解。

一个使用gradle配置的项目

buildscript {

repositories {

maven { url"http://repo.spring.io/libs-snapshot"}

mavenLocal()

}

dependencies {

classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE")

}

}

apply plugin:'java' //添加 Java 插件, 表明这是一个 Java 项目

apply plugin: 'spring-boot' //添加 Spring-boot支持

apply plugin: 'war' //添加 War 插件, 可以导出 War 包

apply plugin: 'eclipse' //添加 Eclipse 插件, 添加 Eclipse IDE 支持, Intellij Idea 为 "idea"

war {

baseName= 'favorites'version= '0.1.0'}

sourceCompatibility= 1.7 //最低兼容版本 JDK1.7

targetCompatibility = 1.7 //目标兼容版本 JDK1.7

repositories {//Maven 仓库

mavenLocal() //使用本地仓库

mavenCentral() //使用中央仓库

maven { url "http://repo.spring.io/libs-snapshot" } //使用远程仓库

}

dependencies {//各种 依赖的jar包

compile("org.springframework.boot:spring-boot-starter-web:1.3.6.RELEASE")

compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.3.6.RELEASE")

compile("org.springframework.boot:spring-boot-starter-data-jpa:1.3.6.RELEASE")

compile group:'mysql', name: 'mysql-connector-java', version: '5.1.6'compile group:'org.apache.commons', name: 'commons-lang3', version: '3.4'compile("org.springframework.boot:spring-boot-devtools:1.3.6.RELEASE")

compile("org.springframework.boot:spring-boot-starter-test:1.3.6.RELEASE")

compile'org.webjars.bower:bootstrap:3.3.6'compile'org.webjars.bower:jquery:2.2.4'compile("org.webjars:vue:1.0.24")

compile'org.webjars.bower:vue-resource:0.7.0'}

bootRun {

addResources= true}

WebJars

WebJars是一个很神奇的东西,可以让大家以jar包的形式来使用前端的各种框架、组件。

什么是WebJars

什么是WebJars?WebJars是将客户端(浏览器)资源(JavaScript,Css等)打成jar包文件,以对资源进行统一依赖管理。WebJars的jar包部署在Maven中央仓库上。

为什么使用

我们在开发Java web项目的时候会使用像Maven,Gradle等构建工具以实现对jar包版本依赖管理,以及项目的自动化管理,但是对于JavaScript,Css等前端资源包,我们只能采用拷贝到webapp下的方式,这样做就无法对这些资源进行依赖管理。那么WebJars就提供给我们这些前端资源的jar包形势,我们就可以进行依赖管理。

如何使用

1、 WebJars主官网 查找对于的组件,比如Vuejs

org.webjars.bower

vue

1.0.21

2、页面引入

就可以正常使用了!

java web 框架整合开发_SpringBoot(二)Web整合开发相关推荐

  1. Python Web框架Django学习(二)

    python web框架Django学习(二) 目录:  三.Django创建APP  四.创建登录页面,实现用户交互,后台管理用户(非数据库方式) ========================= ...

  2. 电商生鲜网站开发(二)——后台开发:用户模块

    电商生鲜网站开发(二)--后台开发:用户模块 文章目录 电商生鲜网站开发(二)--后台开发:用户模块 接口设计 开发任务与知识点 案例:注册接口 统一处理异常 Java异常体系 案例:登录接口 接口设 ...

  3. Go实战--也许最快的Go语言Web框架kataras/iris初识二(TOML、Cache、Cookie)

    生命不止,继续 go go go!!! 昨天介绍了iris框架,介绍了如何使用basic认证.Markdown.YAML.Json等:  Go实战–也许最快的Go语言Web框架kataras/iris ...

  4. IDEA中Java项目删除Web框架后无法再次添加Web框架解决办法

    1.首先在IntelliJ IDEA 2021.2版本下添加Web框架 (1)鼠标右击项目Suke-->选择:Add Framework Support... (2)勾选Web Applicat ...

  5. WEB框架研究笔记六(Spring WEB)

    原先计划使用Struts,后来发现Spring也提供了和Web集成的一些功能,先研究一下.因为如果前台用Extjs来开发,就不需要用到Web的MVC框架,WEB框架只要能提供页面跳转和对http请求的 ...

  6. git web框架搭建_Git,Python Web框架,AI,机器学习,Android,Linux和更多必读内容

    git web框架搭建 上周最受关注的是Kedar Vijay Kulkarni编写的新Git系列中的最新一期,随后是Nicholas Hunt-Walker编写的 Python Web框架系列中的最 ...

  7. 【nginx+lua高性能web应用开发(二):开发评论模块(ssi+mysql)】

    开发这个模块,是为了解决项目中的实际问题,思考设计的 . 本文原文连接: http://blog.csdn.NET/freewebsys/article/details/16944917 转载请注明出 ...

  8. python web 框架的flash消息_python web开发-flask中消息闪现flash的应用

    Flash中的消息闪现,在官方的解释是用来给用户做出反馈.不过实际上这个功能只是一个记录消息的方法,在某一个请求中记录消息,在下一个请求中获取消息,然后做相应的处理,也就是说flask只存在于两个相邻 ...

  9. java类库支持_第十二章:开发支持类库

    UUID类 UUID(since 1.5   java.util.UUID)是一种生成无重复字符串的程序类,这种程序类的主要功能是根据时间戳实现一个自动的无重复的字符串定义.所谓的无重复只出现概率很低 ...

  10. python web框架 多线程_Django基础知识 web框架的本质详解

    姑娘,你好,我是Jaden,请问约吗?嘻嘻~~ alert('这是我们第一个网页')

最新文章

  1. 备份集过期时间_TiDB备份恢复方式你知多少?
  2. 从CTO到创始人 孙元浩基础软件破局之路
  3. 中间层通讯 Socket? Remoting? WCF?
  4. 润乾报表列太多导致渲染速度慢_报表自动化: 如何选择可视化大屏开发利器
  5. [Swift]LeetCode884. 两句话中的不常见单词 | Uncommon Words from Two Sentences
  6. mysql存储map数据结构_map数据结构
  7. Mac 16进制编辑器Hex Friend
  8. angular.isString()
  9. 转:Jquery json的超强组合(DataTable2JSON)
  10. iOS 防键盘遮挡
  11. 计算机开机速度慢是什么原因,电脑开机慢是什么原因?怎么处理?
  12. 数码相机图像处理原理
  13. React Native微信分享
  14. python学习笔记1-环境安装
  15. 华为p10关闭更新_华为p10系统更新,华为emui5.0能否手撕emui4.1
  16. parallels 激活window7
  17. MIRO BAPI_INCOMINGINVOICE_CREATE1 报错 MRM_INVOICE_TAXES_SAVE
  18. Java中DecimalFormat的用法!
  19. 逆向学习fastjson反序列化始
  20. 2022-2028全球植物奶油行业调研及趋势分析报告

热门文章

  1. 最大矩阵(简单DP)
  2. copy elison RVO NRVO
  3. sql根据某个字段拼接另外字段
  4. Java多线程,实现卖电影票的业务
  5. 常用的Javascript设计模式
  6. 虚拟机下安装vmware tools
  7. android 高级画布绘图
  8. 如何理解IIS 7的两种应用程序池的管道模式(Managed Pipeline Mode)
  9. ANSI C中的sizeof详解
  10. Caliburn笔记-基本Command(wpf框架)