SpringBoot初探(二)——打成war和自動部署
打成war包
一般的war結構大致是這樣的
└── META-INFO
└── WEB-INFO
└── lib #一些依賴的jar包
└── classes #classpath目錄
└── web.xml
└── 其它配置檔案、屬性檔案等
└── 其它資原始檔
Servlet 3.0之後可以使用註釋定義Servlet和過濾器,就無需在web部署描述符(web.xml)中建立Servlet/過濾器配置了,tomcat7.0以上版本支援Servlet 3.0。
pom.xml
<!-- ... -->
<packaging >war</packaging>
<!-- ... -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 這裡指定打包的時候不再需要tomcat相關的包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- ... -->
</dependencies>
<build >
<plugins>
<!-- ... -->
<!-- maven打包的時候告訴maven不需要web.xml,否剛會報找不到web.xml錯誤 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
app.java
/**
* Hello world!
*
*/
@EnableAutoConfiguration //這個註解可以根據你依賴的包自動生成相關配置
@ComponentScan //這兩個註解可以使用SpringBootApplication替代
public class App extends SpringBootServletInitializer
{
public static void main( String[] args )
{
SpringApplication.run(App.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// TODO Auto-generated method stub
return builder.sources(App.class);
}
}
SpringBoot提供了一種以編碼的方式初始化Web配置。通過繼承SpringBootServletInitializer類 Spring Boot應用能夠使用嵌入的Spring上下文來註冊配置,這個Spring上下文是在容器初始化的時候建立的。
執行
執行mvn clean package spring-boot:repackage
打包,最後在target目錄下面生成一個HelloWord-0.1.0.war包。
這個命令先用maven打包,然後會根據Boot的一些配置再打包。
加入靜態檔案和jsp
靜態檔案
By default Spring Boot will serve static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath or from the root of the ServletContext.
預設情況下SpringBoot會從根目錄、classpath中的以上目錄作為靜態檔案目錄。
可以通過此配置修改靜態檔案路徑:
#spring.resources.static-locations=classpath:/static/
SpringBoot預設載入的配置檔案是 application.properties
所以你要修改一些預設配置只要calsspath目錄建一個application.properties
配置檔案,並把配置寫在檔案中就會生效。
JSP
在pom.xml中加入相關依賴:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
jsp頁面一般放在maven的預設目錄src/main/webapp
中,當然也可以入到上面的靜態檔案中,如果你將來執行的是一個jar包,就不建議放到這個目錄了。
還可以使用這些配置修改jsp的一些屬性:
spring.mvc.view.prefix=/views/ # Spring MVC view prefix.
spring.mvc.view.suffix=.jsp # Spring MVC view suffix.
最終的路徑如圖:
application.properties的配置:
spring.mvc.view.prefix: /views/
spring.mvc.view.suffix: .jsp
#spring.resources.static-locations=classpath:/static/ #預設支援的就有這個目錄
HelloController.java
@RestController //或者使用Controller
public class HelloController {
@RequestMapping("hello")
@ResponseBody
public String hello(@RequestParam(defaultValue="world") String name){
return "hello 11"+name+"!";
}
@RequestMapping("hello2")
public ModelAndView hellojsp(@RequestParam(defaultValue="world") String name,Model m){
m.addAttribute("text", "hello "+name);
return new ModelAndView("hello");
}
}
這裡如果使用@RestController
,返回一個字串它預設會以一下字串的形式返回,不會作為一個檢視,需要顯示的返回一個ModelAndView
。
在jsp頁面就可以使用${text}
顯示值了。
加入log4j
log4j.properties
log4j.rootLogger=INFO,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n