此文已由做者易国强受权网易云社区发布。
html
欢迎访问网易云社区,了解更多网易技术产品运营经验。前端
随着spring boot 框架的逐步使用,咱们指望对于一些已有的系统进行改造,作成通用的脚手架,方便在后续新项目中继续使用。java
本章主要介绍了如何采用Spring Boot改造传统的jsp项目。web
首先,Spring Boot + JSP的方式确定是可使用的。不过官方早就说过不推荐使用jsp来进行前端页面的开发,官方推荐的是Themeleaf,更加符合如今先后端分离的开发模式。spring
使用Spring Boot + JSP 的方式,主要是注意一下配置上的变化,下面一块儿来看下。apache
既然咱们选择Spring Boot的框架,仍是比较推荐采用jar的形式进行打包部署,这样开发人员能够更方便的控制tomcat容器(内置默认容器)的参数配置,应用部署也更加简单。后端
首先,项目pom.xml文件中的packaging类型确保是jar类型。示例以下:tomcat
<groupId>com.netease.ms</groupId><artifactId>common-ms</artifactId><packaging>jar</packaging><version>1.0.0</version>
spring boot的版本可根据使用需求而定,这里我使用的是目前最新的稳定版本1.5.9.RELEASE。示例以下:安全
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version></parent>
而后,引入starter-web组件,这个组件中会包含内置的tomcat容器。示例以下:mvc
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
此外,还须要加入内置tomcat对jsp文件解析的支持,若是有用到jstl标签的话,也一并加入相关的依赖。示例以下:
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId></dependency><dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version></dependency>
加入上述依赖后,注意在build插件中加入以下配置,须要注意的是,这里spring-boot-maven-plugin插件的版本指定的是1.4.2.RELEASE,本身有测试使用默认的1.5.9.RELEASE或其余1.5.x版本不行(IDEA直接运行启动没问题,打成jar包单独运行就会报404的错误,找不到相关的jsp页面),至于除1.4.2.RELEASE版本外其余版本是否可行,笔者并何尝试,有清楚缘由的读者欢迎指教。另一个比较关键的是,打成jar包后,其实是识别不了webapp目录的,因此咱们把webapp目录下的相关文件copy到META_INF/resources下面了。这样spring boot的fat jar在启动时是可以识别这个资源路径的。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.4.2.RELEASE</version> <configuration> <mainClass>test.Application</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <dependencies> <!-- spring热部署,非必须 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.6.RELEASE</version> </dependency> </dependencies> </plugin> <!-- 忽略无web.xml警告 若是打包成war则须要--> <!--<plugin>--> <!--<groupId>org.apache.maven.plugins</groupId>--> <!--<artifactId>maven-war-plugin</artifactId>--> <!--<configuration>--> <!--<failOnMissingWebXml>false</failOnMissingWebXml>--> <!--</configuration>--> <!--</plugin>--> </plugins> <resources> <!-- 打包时将jsp文件拷贝到META-INF目录下 --> <resource> <!-- 指定resources插件处理哪一个目录下的资源文件 --> <directory>src/main/webapp</directory> <!--注意必需要放在此目录下才能被访问到 --> <targetPath>META-INF/resources</targetPath> <includes> <include>**/**</include> </includes> </resource> <!-- 其余资源的拷贝 --> <resource> <directory>src/main/resources</directory> <includes> <include>**/**</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
完成上述配置后,pom.xml文件的必要配置就ok了,接下来咱们把项目中用到的静态资源由原来的webapp目录移到src/main/resources目录下,主要的目录结构以下图所示。
最后,咱们在application.properties文件中配置上jsp的解析前缀和后缀,以及静态资源的映射路径,以下所示,这里由于个人jsp存放路径是WEB-INF/views,因此前缀加上了这个路径,若是你本身项目下并没有此路径,作相应的修改便可,如spring.mvc.view.prefix=/
spring.mvc.view.prefix=/WEB-INF/views/ spring.mvc.view.suffix=.jsp #定义静态资源的映射路径 spring.mvc.static-path-pattern=/resources/**
另外传统的web项目中,确定是有web.xml文件的,关于这个文件,咱们主要是配置了一些servlet、filter以及listener,改为代码的方式配置也很简单,你们能够参照前面系列文章中介绍进行相应的改写便可,在此再也不赘述。
还有一个须要提下的地方,就是把咱们传统的项目改形成spring boot 项目时,每每会以为很麻烦,其缘由主要是在于spring boot的去xml化,若是把已有的xml中的配置再一点点的改为java代码的实现方式,确实会使人崩溃。因此,对于已有项目的改造,尽量的保留原有的xml配置方式,这样更简单方便。示例以下:
@ImportResource("classpath:spring/application-context.xml")@SpringBootApplication(scanBasePackages = {"......"})public class CommonMsApplication { ...... }
改造完成后,发现其实spring boot + jsp的方式使用并不复杂,只是在改造传统项目时,相应的配置须要作些变动。固然,每一个项目使用的组件不尽相同,也许在实际的改造过程当中,会遇到这样或那样的问题,耐下心来一步步找到问题缘由,相信也能很快解决的。
不足之处,欢迎指正,谢谢~
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 一个小需求引起的思考