上一篇Sping Boot 初探(一)— 一分钟构建SpringWeb我们用SpringBoot开发了一个非常简单的HelloWorld,这篇主要讲一下在上一篇的基础上如何打成war放到自已的tomcat上跑以及开发的时候如何实现热。
上一个示例代码 git://code.csdn.net/u010317202/springbootsamples.git
一般的war结构大致是这样的
└── META-INFO
└── WEB-INFO
└── lib #一些依赖的jar包
└── classes #classpath目录
└── web.xml
└── 其它配置文件、属性文件等
└── 其它资源文件
Servlet 3.0之后可以使用注释定义Servlet和过滤器,就无需在web部署描述符(web.xml)中建立Servlet/过滤器配置了,tomcat7.0以上版本支持Servlet 3.0。
<packaging>warpackaging>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<scope>providedscope>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-war-pluginartifactId>
<version>2.4version>
<configuration>
<failOnMissingWebXml>falsefailOnMissingWebXml>
configuration>
plugin>
plugins>
build>
/**
* 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的一些配置再打包。
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
配置文件,并把配置写在文件中就会生效。
在pom.xml中加入相关依赖:
<dependency>
<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-jasperartifactId>
<scope>providedscope>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>jstlartifactId>
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}
显示值了。
最后的pom.xml https://code.csdn.net/u010317202/springbootsamples/tree/0.2.0-war/HelloWorld/pom.xml
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
重新打包,放到tomcat的webapp目录就可以运行了,访问的时候要加war的名字 http://localhost:8080/HelloWord-0.1.0/hello2。
全部代码在https://code.csdn.net/u010317202/springbootsamples/tree/0.2.0-war