本文共 5975 字,大约阅读时间需要 19 分钟。
提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下Spring Boot 怎么集成JSP开发,以及生产环境的详细部署方法。
具体集成方法如下:
在src/main目录下创建目录webapp/WEB-INF/jsp用于存放jsp页面,如下图:
application.properties为全局配置文件,里面可以设置很多信息,比如设置日志、设置缓存、设置Spring、Spring SESSION等信息,我们本文只需要设置JSP的目录文件,以及文件后缀,代码如下:
spring.mvc.view.prefix=/WEB-INF/jspspring.mvc.view.suffix=.jsp
更多application.properties设置信息,查看官方文档:
在pom.xml需要添加3个组件:
具体代码如下:
org.springframework.boot spring-boot-starter-web javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper provided
注意:tomcat-embed-jasper的scope(作用域)值为provided,表示打包的时候不用打包进去,其他设备会提供,如果打包进去会和外部Tomcat提供的jar冲突,导致项目启动失败。
经过前3步的配置,项目配置部分已经完成的差不多了,接下来就是代码的编写了,代码的编写和Spring MVC一样,分为两部分Java类编写与标识注解,JSP模板创建与编写。为了更好的演示Spring Boot 的功能,我们会尽可能的简化业务逻辑,在这个示例中我们创建一个Cat类,设置标签hi="Hello Cat",在页面输出标签即可。
package com.hellospringboot.hellospringboot;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controller@RequestMapping("/cat") //创建路由规则http://xxxx/catpublic class Cat { /** * 默认路由方法 * * @return */ @RequestMapping("") public ModelAndView index() { ModelAndView modelAndView = new ModelAndView("/index"); //设置对应JSP的模板文件 modelAndView.addObject("hi", "Hello,Cat"); //设置${hi}标签的值为Hello,Cat return modelAndView; }}
Spring MVC注解解读
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title ${hi}
这个jsp只做了一件事,把java类里面的${hi}标签的值显示出来。
到此为止,如果您使用的是IDEA开发工具,那么现在就可以运行调试程序了,直接运行Index.jsp或者启动文件,或者启动文件(Application.java)即可,然后在浏览器输入: 即可查看。
下载地址:
如下图所示:
Windows下载:64-bit Windows zip | Linux下载:tar.gz
注意:如果是Windows版下载的免安装版如果放到C盘的话,注意给文件夹分配足够的权限,不然启动之后访问页面显示400或者505类似的问题。
如果要进行生产环境部署,需要单独配置一下Spring Boot 的入口类,需要继承SpringBootServletInitializer类,重写configure方法,因为默认情况外部Tomcat不能读取到Spring Boot 入口类的main方法启动程序加载,使用需要继承,代码如下:
package com.hellospringboot.hellospringboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;/** * 启动类,程序入口 */@SpringBootApplicationpublic class HelloSpringBootApplication extends SpringBootServletInitializer{ /** * 重写configure方法,加载启动类 * @param application * @return */ @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(HelloSpringBootApplication.class); } /** * Spring Boot 默认main方法 * @param args */ public static void main(String[] args) { SpringApplication.run(HelloSpringBootApplication.class, args); }}
需要配置一下pom.xml,排除一下内置tomcat的jar包,防止打包之后与外面Tomcat jar 包冲突,导致项目启动失败,配置如下:
org.springframework.boot spring-boot-starter-tomcat provided
主要的代码是<scope>provided</scope>,设置打包不会包含进去,由其他设施提供。
找到:
<packaging>jar</packaging>
修改为:
<packaging>war</packaging>
为什么需要修改jar包格式为war,因为如果打包为jar包的时候,不会包含JSP文件,所以访问的时候回404,而打包为war的时候回包含JSP文件,所以需要把打包格式修改为war.
jar和war的区别?
所以从jar和war的区别来看,网页程序打包成war格式也是很合适的。
如果需要修改生成文件的文件名称,可以设置build下的finalName属性,代码如下:
name
选择菜单栏Build => Build Artifacts.. => 点击Rebuild,即可生成war包,如图:
生成完之后,在项目的target目录下找到生成war文件,如下图:
在Host标签内添加Context设置,docBase属性填写war文件名称,配置如下:
运行bin/shutdown.bat文件,启动tomcat
输入地址: 访问。
到此项目部署成功,虽然本人部署到Windows服务器了,Linux也是一样的步骤。
虽然上文我们详细介绍了JSP在Spring Boot 中使用,但是Spring Boot官方并不推荐使用JSP(原因见下文)。
如下图所示:
Spring官方不推荐使用JSP的原因有这么几个:
更多详情,点击查看:
总结:按照官方的说法,如果你有数百个JSP页面,我们并不建议您应该立即抛弃它们,重新使用Thymeleaf,但是,如果您开始开发一个新项目,强烈鼓励您比较其他模板引擎和JSP,以确认哪一个更适合您。
开发Web应用之JSP篇:
欢迎扫码,加入圈子讨论交流
转载于:https://blog.51cto.com/2188001/2164672