Spring MVC項目快速搭建
示例
pom.xml |
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wisely</groupId> <artifactId>hightlight_springmvc4</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <jsp.version>2.2</jsp.version> <jstl.version>1.2</jstl.version> <servlet.version>3.1.0</servlet.version> <spring-framwork.version>4.1.5.RELEASE</spring-framwork.version> <logback.version>1.0.13</logback.version> <slf4j.version>1.7.5</slf4j.version> </properties> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring-framwork.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>${jsp.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring-framwork.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>${logback.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>${logback.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin>
</plugins>
</build> </project> |
logback.xml |
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="1 seconds"> <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> <restJUL>true</restJUL> </contextListener> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>logback: %d{yyyy-MM-dd HH:mm:ss.SSS} %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="org.springframework.web" level="DEBUG"> <root level="info"> <appender-ref ref="console"/> </root> </logger>
</configuration> |
在src/main/resources下建立views目錄,並在此目錄下新建index.jsp |
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <pre>Welcome to Spring MVC world</pre> </body> </html> |
SpringMVC配置 |
package hightlight_springmvc4;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView;
@Configuration @EnableWebMvc @ComponentScan("hightlight_springmvc4") public class MyMvcConfig {
public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/classes/views/"); viewResolver.setSuffix(".jsp"); viewResolver.setViewClass(JstlView.class); return viewResolver; }
}
|
Web配置 |
package hightlight_springmvc4;
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet;
/** * 1.WebApplicationInitializer是Spring提供用來配置Servlet3.0+配置接口,從而實現了替代web.xml的位置。實現此接口將會自動被SpringServletContainerInitializer獲取到 * 2.新建WebApplicationContext,註冊配置類,並將其和當前servletContext關聯。 * 3.註冊Spring MVC的DispatcherServlet * */ public class WebInitializer implements WebApplicationInitializer {
@Override public void onStartup(ServletContext servletContext) throws ServletException { //1 AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(MyMvcConfig.class); ctx.setServletContext(servletContext); //2 Dynamic servlet =servletContext.addServlet("dispatcher", new DispatcherServlet(ctx)); //3 servlet.addMapping("/"); servlet.setLoadOnStartup(1); }
}
|
簡單的控制器 |
package hightlight_springmvc4;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;
/** * 1.利用Controller註解聲明是一個控制器。 * 2.利用@RequestMapping配置URL和方法之間的映射 * 3.通過ViewResolver的Bean配置,返回值爲index,說明我們的頁面放置的路徑爲/WEB-INF/classes/views/index.jsp * */ @Controller //1 public class HelloController { @RequestMapping("/index") //2 public String hello() { return "index"; //3 } }
|
Spring MVC的常用註解
1.點睛
Spring MVC常用以下幾個註解。
(1)@Controller
@Controller註解在類上,表明這個類是Spring MVC裏的Controller,將其聲明爲Spring的一個Bean,Dispatcher Servlet會自動掃描註解了此註解的類,並將Web請求映射到註解了@RequestMapping的方法上。這裏特別指出,在聲明普通Bean的時候,使用@Component、@Service、@Repository、@Controller都組合了@Compoment元註解;但在Spring MVC聲明控制器Bean的時候,只能使用@Controller。
(2)@RequestMapping
@RequestMapping註解是用來映射web請求、處理類和方法的。@RequestMapping可註解在類或方法上。註解在方法上的@RequestMapping路徑會繼承註解在類上的路徑,@RequestMapping支持Servlet的request和response作爲參數,也支持對request和response的媒體類型進行配置。
(3)@ResponseBody
@ResponseBody支持將返回值放在response體內,而不是返回一個頁面。外面在很多基於ajax程序的時候,可以以此註解返回數據而不是頁面;此註解可放置在返回值前或者方法上。
(4)@RequestBody
@RequestBody允許request的參數在request體中,而不是直接連接在地址後面。此註解放置在參數前。
(5)@PathVariable
@PathVariable用來接收路徑參數,如/news/001,看接收001作爲參數,此註解放置在參數前。
(6)@RestController
@RestController是一個組合註解,組合了@Controller和@ResponseBody,着就意味着當你只開發一個和頁面交互數據的控制的時候,需要使用此註解。若沒有此註解,要想實現上述功能,則需自己在代碼中加@Controller和@ResponseBody兩個註解。
Spring Boot快速搭建
定製Banner
在Spring Boot啓動的時候會有一個默認圖案,在src/main/resources下新建一個banner.txt,通過改變文件內容可以改變啓動圖案。(http://patorjk.com/software/taag)
Spring Boot的配置文件
Spring Boot使用一個全局的配置文件Application.properties放置在src/main/resources目錄或者類路徑的/config下。
#端口號修改爲80 server.port=80 #將默認的訪問路徑/修改爲/helloboot server.context-path=/helloboot |
使用XML配置
Spring Boot提倡零配置,即無xml配置,但是在實際項目中,可能有一些特殊的要求你必須使用xml配置,這時我們可以通過Spring提供的@ImportResource來加載xml配置。例如:
@ImportResources({“classpath:some-context.xml”,”classpath:another-context.xml”})
常規屬性配置
通過@PropertySource指明properties文件的位置,然後通過@value注入值。在SpringBoot中,我們只需要在application.properties定義屬性,直接使用@Value注入即可。
Thymeleaf基礎知識
Thymeleaf是一個java類庫,他是一個xml/xhtml/html5的引擎末班,可以作爲MVC的web應用的view層。Thymeleaf還提供了額外的模塊與Spring MVC集成,所以我們可以使用Thymeleaf完全替代JSP。
引入Thymeleaf
下面的代碼是一個基本Thymeleaf模版頁面,在這裏我們引入Bootstrap(作爲樣式控制)和jQuary(Dom操作),當然他們不是必須的。
代碼解釋
通過xmlns:th=http://www.thymeleaf.org 命名空間,將鏡頭頁面轉換爲動態視圖。需要進行動態處理的元素使用“th:“爲前綴;
通過“@{}“引用web靜態資源,這在jsp下是極易出錯的。
訪問model中的數據
通過“${}“訪問model中的屬性,這和JSP極爲相似。
代碼解釋
(1)使用<span th:test=”${singelPerson.name}”></span>訪問model中的singlePerson的name屬性。注意:需要處理的動態內容需要加上“th”前綴。
在JavaScript中訪問model
在項目中,外面經常需要在javaScript訪問model中的值,在Thymeleaf裏實現代碼如下:
<title>Insert title here</title> <script th:inline="javascript"> var single=[[${singlePerson}]]; </script> |
代碼解釋
·通過th:inline=”javascript”添加到script標籤,這樣JavaScript代碼即可訪問model中的屬性;
·通過”[[${}]]”格式獲得實際的值。