本篇內(nèi)容主要講解“Spring Boot中Web綜合開發(fā)示例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Spring Boot中Web綜合開發(fā)示例分析”吧!
十載的梁山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整梁山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“梁山網(wǎng)站設(shè)計(jì)”,“梁山網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。Spring Boot Web 開發(fā)非常的簡單,其中包括常用的 json 輸出、filters、property、log 等
在以前使用 Spring 開發(fā)項(xiàng)目,需要提供 json 接口時(shí)需要做哪些配置呢
添加 jackjson 等相關(guān) jar 包
配置 Spring Controller 掃描
對接的方法添加 @ResponseBody
就這樣我們會經(jīng)常由于配置錯(cuò)誤,導(dǎo)致406錯(cuò)誤等等,Spring Boot 如何做呢,只需要類添加 @RestController
即可,默認(rèn)類中的方法都會以 json 的格式返回
@RestControllerpublic class HelloController { @RequestMapping("/getUser") public User getUser() { User user=new User(); user.setUserName("小明"); user.setPassWord("xxxx"); return user; }}
如果需要使用頁面開發(fā)只要使用 @Controller
注解即可,下面會結(jié)合模板來說明
我們常常在項(xiàng)目中會使用 filters 用于錄調(diào)用日志、排除有 XSS 威脅的字符、執(zhí)行權(quán)限驗(yàn)證等等。Spring Boot 自動添加了 OrderedCharacterEncodingFilter 和 HiddenHttpMethodFilter,并且我們可以自定義 Filter。
兩個(gè)步驟:
實(shí)現(xiàn) Filter 接口,實(shí)現(xiàn) Filter 方法
添加
@Configuration
注解,將自定義Filter加入過濾鏈
好吧,直接上代碼
@Configuration
public class WebConfiguration {
@Bean
public RemoteIpFilter remoteIpFilter() {
return new RemoteIpFilter();
}
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("MyFilter");
registration.setOrder(1);
return registration;
}
public class MyFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(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);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
}
在 Web 開發(fā)的過程中,我經(jīng)常需要自定義一些配置文件,如何使用呢
com.neo.title=純潔的微笑com.neo.description=分享生活和技術(shù)
自定義配置類
@Component
public class NeoProperties {
@Value("${com.neo.title}")
private String title;
@Value("${com.neo.description}")
private String description;
//省略getter settet方法
}
配置輸出的地址和輸出級別
logging.path=/user/local/loglogging.level.com.favorites=DEBUGlogging.level.org.springframework.web=INFOlogging.level.org.hibernate=ERROR
path 為本機(jī)的 log 地址, logging.level
后面可以根據(jù)包路徑配置不同資源的 log 級別
在這里我重點(diǎn)講述 Mysql、spring data jpa 的使用,其中 Mysql 就不用說了大家很熟悉。Jpa 是利用 Hibernate 生成各種自動化的 sql,如果只是簡單的增刪改查,基本上不用手寫了,Spring 內(nèi)部已經(jīng)幫大家封裝實(shí)現(xiàn)了。
下面簡單介紹一下如何在 Spring Boot 中使用
org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java
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
其實(shí)這個(gè) hibernate.hbm2ddl.auto 參數(shù)的作用主要用于:自動創(chuàng)建|更新|驗(yàn)證數(shù)據(jù)庫表結(jié)構(gòu),有四個(gè)值:
create: 每次加載 hibernate 時(shí)都會刪除上一次的生成的表,然后根據(jù)你的 model 類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執(zhí)行,這就是導(dǎo)致數(shù)據(jù)庫表數(shù)據(jù)丟失的一個(gè)重要原因。
create-drop :每次加載 hibernate 時(shí)根據(jù) model 類生成表,但是 sessionFactory 一關(guān)閉,表就自動刪除。
update:最常用的屬性,第一次加載 hibernate 時(shí)根據(jù) model 類會自動建立起表的結(jié)構(gòu)(前提是先建立好數(shù)據(jù)庫),以后加載 hibernate 時(shí)根據(jù) model 類自動更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會刪除以前的行。要注意的是當(dāng)部署到服務(wù)器后,表結(jié)構(gòu)是不會被馬上建立起來的,是要等 應(yīng)用第一次運(yùn)行起來后才會。
validate :每次加載 hibernate 時(shí),驗(yàn)證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),只會和數(shù)據(jù)庫中的表進(jìn)行比較,不會創(chuàng)建新表,但是會插入新值。
dialect
主要是指定生成表名的存儲引擎為 InneoDBshow-sq
是否打印出自動生產(chǎn)的 SQL,方便調(diào)試的時(shí)候查看
@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@Column(nullable = false, unique = true)
private String userName;
@Column(nullable = false)
private String passWord;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = true, unique = true)
private String nickName;
@Column(nullable = false)
private String regTime;
//省略getter settet方法、構(gòu)造方法
}
dao 只要繼承 JpaRepository 類就可以,幾乎可以不用寫方法,還有一個(gè)特別有尿性的功能非常贊,就是可以根據(jù)方法名來自動的生產(chǎn) SQL,比如 findByUserName
會自動生產(chǎn)一個(gè)以 userName
為參數(shù)的查詢方法,比如 findAlll
自動會查詢表里面的所有數(shù)據(jù),比如自動分頁等等。。
Entity 中不映射成列的字段得加 @Transient 注解,不加注解也會映射成列
public interface UserRepository extends JpaRepository{ User findByUserName(String userName); User findByUserNameOrEmail(String username, String email);}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class UserRepositoryTests {
@Autowired
private UserRepository userRepository;
@Test
public void test() throws Exception {
Date date = new Date();
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"));
}
}
當(dāng)讓 Spring Data Jpa 還有很多功能,比如封裝好的分頁,可以自己定義 SQL,主從分離等等,這里就不詳細(xì)講了
Spring Boot 推薦使用 Thymeleaf 來代替 Jsp,Thymeleaf 模板到底是什么來頭呢,讓 Spring 大哥來推薦,下面我們來聊聊
Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 內(nèi)容的模板引擎。類似 JSP,Velocity,F(xiàn)reeMaker 等,它也可以輕易的與 Spring MVC 等 Web 框架進(jìn)行集成作為 Web 應(yīng)用的模板引擎。與其它模板引擎相比,Thymeleaf 大的特點(diǎn)是能夠直接在瀏覽器中打開并正確顯示模板頁面,而不需要啟動整個(gè) Web 應(yīng)用。
好了,你們說了我們已經(jīng)習(xí)慣使用了什么 Velocity,FreMaker,beetle之類的模版,那么到底好在哪里呢?
比一比吧
Thymeleaf 是與眾不同的,因?yàn)樗褂昧俗匀坏哪0寮夹g(shù)。這意味著 Thymeleaf 的模板語法并不會破壞文檔的結(jié)構(gòu),模板依舊是有效的XML文檔。模板還可以用作工作原型,Thymeleaf 會在運(yùn)行期替換掉靜態(tài)值。Velocity 與 FreeMarke r則是連續(xù)的文本處理器。 下面的代碼示例分別使用 Velocity、FreeMarker 與 Thymeleaf 打印出一條消息:
Velocity:$message
FreeMarker:${message}
Thymeleaf:Hello World!
注意,由于 Thymeleaf 使用了 XML DOM 解析器,因此它并不適合于處理大規(guī)模的 XML 文件。
URL 在 Web 應(yīng)用模板中占據(jù)著十分重要的地位,需要特別注意的是 Thymeleaf 對于 URL 的處理是通過語法 @{...}
來處理的。Thymeleaf 支持絕對路徑 URL:
Thymeleaf
Login
Onions 2.41 yes
就列出這幾個(gè)吧
在 Web 開發(fā)過程中一個(gè)繞不開的話題就是前端工程師與后端工程師的協(xié)作,在傳統(tǒng) Java Web 開發(fā)過程中,前端工程師和后端工程師一樣,也需要安裝一套完整的開發(fā)環(huán)境,然后各類 Java IDE 中修改模板、靜態(tài)資源文件,啟動/重啟/重新加載應(yīng)用服務(wù)器,刷新頁面查看最終效果。
但實(shí)際上前端工程師的職責(zé)更多應(yīng)該關(guān)注于頁面本身而非后端,使用 JSP,Velocity 等傳統(tǒng)的 Java 模板引擎很難做到這一點(diǎn),因?yàn)樗鼈儽仨氃趹?yīng)用服務(wù)器中渲染完成后才能在瀏覽器中看到結(jié)果,而 Thymeleaf 從根本上顛覆了這一過程,通過屬性進(jìn)行模板渲染不會引入任何新的瀏覽器不能識別的標(biāo)簽,例如 JSP 中的 ,不會在 Tag 內(nèi)部寫表達(dá)式。整個(gè)頁面直接作為 HTML 文件用瀏覽器打開,幾乎就可以看到最終的效果,這大大解放了前端工程師的生產(chǎn)力,它們的最終交付物就是純的 HTML/CSS/JavaScript 文件。
Spring 項(xiàng)目建議使用 Maven/Gradle 進(jìn)行構(gòu)建項(xiàng)目,相比 Maven 來講 Gradle 更簡潔,而且 Gradle 更適合大型復(fù)雜項(xiàng)目的構(gòu)建。Gradle 吸收了 Maven 和 Ant 的特點(diǎn)而來,不過目前 Maven 仍然是 Java 界的主流,大家可以先了解了解。
一個(gè)使用 Gradle 配置的項(xiàng)目
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 插件, 表明這是一個(gè) Java 項(xiàng)目
apply plugin: 'spring-boot' //添加 Spring-boot支持
apply plugin: 'war' //添加 War 插件, 可以導(dǎo)出 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 //目標(biāo)兼容版本 JDK1.7
repositories { // Maven 倉庫
mavenLocal() //使用本地倉庫
mavenCentral() //使用中央倉庫
maven { url "http://repo.spring.io/libs-snapshot" } //使用遠(yuǎn)程倉庫
}
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 是一個(gè)很神奇的東西,可以讓大家以 Jar 包的形式來使用前端的各種框架、組件。
WebJars 是將客戶端(瀏覽器)資源(JavaScript,Css等)打成 Jar 包文件,以對資源進(jìn)行統(tǒng)一依賴管理。WebJars 的 Jar 包部署在 Maven 中央倉庫上。
我們在開發(fā) Java web 項(xiàng)目的時(shí)候會使用像 Maven,Gradle 等構(gòu)建工具以實(shí)現(xiàn)對 Jar 包版本依賴管理,以及項(xiàng)目的自動化管理,但是對于 JavaScript,Css 等前端資源包,我們只能采用拷貝到 webapp 下的方式,這樣做就無法對這些資源進(jìn)行依賴管理。那么 WebJars 就提供給我們這些前端資源的 Jar 包形勢,我們就可以進(jìn)行依賴管理。
1、 WebJars主官網(wǎng) 查找對于的組件,比如 Vuejs
org.webjars vue 2.5.16
2、頁面引入
就可以正常使用了!
到此,相信大家對“Spring Boot中Web綜合開發(fā)示例分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!