1. 程式人生 > >SpringBoot初探(二)——打成war和自動部署

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