javaSpringBoot(二)集成Jsp与生产环境部署个人文章

在src/main目录下创建目录webapp/WEB-INF/jsp用于存放jsp页面,如下图:

application.properties为全局配置文件,里面可以设置很多信息,比如设置日志、设置缓存、设置Spring、SpringSESSION等信息,我们本文只需要设置JSP的目录文件,以及文件后缀,代码如下:

在pom.xml需要添加3个组件:

具体代码如下:

org.springframework.bootspring-boot-starter-webjavax.servletjstlorg.apache.tomcat.embedtomcat-embed-jasperprovided注意:tomcat-embed-jasper的scope(作用域)值为provided,表示打包的时候不用打包进去,其他设备会提供,如果打包进去会和外部Tomcat提供的jar冲突,导致项目启动失败。

经过前3步的配置,项目配置部分已经完成的差不多了,接下来就是代码的编写了,代码的编写和SpringMVC一样,分为两部分Java类编写与标识注解,JSP模板创建与编写。为了更好的演示SpringBoot的功能,我们会尽可能的简化业务逻辑,在这个示例中我们创建一个Cat类,设置标签hi="HelloCat",在页面输出标签即可。

<%@pagecontentType="text/html;charset=UTF-8"language="java"%>Title

${hi}

这个jsp只做了一件事,把java类里面的${hi}标签的值显示出来。

如下图所示:

Windows下载:64-bitWindowszip|Linux下载:tar.gz

注意:如果是Windows版下载的免安装版如果放到C盘的话,注意给文件夹分配足够的权限,不然启动之后访问页面显示400或者505类似的问题。

如果要进行生产环境部署,需要单独配置一下SpringBoot的入口类,需要继承SpringBootServletInitializer类,重写configure方法,因为默认情况外部Tomcat不能读取到SpringBoot入口类的main方法启动程序加载,使用需要继承,代码如下:

packagecom.hellospringboot.hellospringboot;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.builder.SpringApplicationBuilder;importorg.springframework.boot.web.servlet.support.SpringBootServletInitializer;/***启动类,程序入口*/@SpringBootApplicationpublicclassHelloSpringBootApplicationextendsSpringBootServletInitializer{/***重写configure方法,加载启动类*@paramapplication*@return*/@OverrideprotectedSpringApplicationBuilderconfigure(SpringApplicationBuilderapplication){returnapplication.sources(HelloSpringBootApplication.class);}/***SpringBoot默认main方法*@paramargs*/publicstaticvoidmain(String[]args){SpringApplication.run(HelloSpringBootApplication.class,args);}}3.配置pom.xml需要配置一下pom.xml,排除一下内置tomcat的jar包,防止打包之后与外面Tomcatjar包冲突,导致项目启动失败,配置如下:

org.springframework.bootspring-boot-starter-tomcatprovided主要的代码是provided,设置打包不会包含进去,由其他设施提供。

找到:

修改为:

为什么需要修改jar包格式为war,因为如果打包为jar包的时候,不会包含JSP文件,所以访问的时候回404,而打包为war的时候回包含JSP文件,所以需要把打包格式修改为war.

jar和war的区别?

所以从jar和war的区别来看,网页程序打包成war格式也是很合适的。

如果需要修改生成文件的文件名称,可以设置build下的finalName属性,代码如下:

name步骤二:使用IDEA生成war包选择菜单栏Build=>BuildArtifacts..=>点击Rebuild,即可生成war包,如图:

生成完之后,在项目的target目录下找到生成war文件,如下图:

在Host标签内添加Context设置,docBase属性填写war文件名称,配置如下:

步骤三:启动tomcat运行bin/shutdown.bat文件,启动tomcat

到此项目部署成功,虽然本人部署到Windows服务器了,Linux也是一样的步骤。

虽然上文我们详细介绍了JSP在SpringBoot中使用,但是SpringBoot官方并不推荐使用JSP(原因见下文)。

Spring官方不推荐使用JSP的原因有这么几个:

总结:按照官方的说法,如果你有数百个JSP页面,我们并不建议您应该立即抛弃它们,重新使用Thymeleaf,但是,如果您开始开发一个新项目,强烈鼓励您比较其他模板引擎和JSP,以确认哪一个更适合您。

THE END
1.Servlet程序的入口点是?()borterServlet程序的入口点是?( ) Servlet程序的入口点是?( ) A.init() B、main() C、service() D、doGet() 解答:Chttps://www.cnblogs.com/borter/p/9592768.html
1.Tomcat(6)什么是Servlet容器?查找Servlet:Servlet容器根据/hello这个URL模式在web.xml中查找对应的Servlet。 实例化Servlet:如果Servlet尚未实例化,容器将创建一个HelloWorldServlet的实例。 调用init()方法:如果Servlet是第一次被请求,容器会调用init()方法进行初始化。 调用service()方法:容器调用doGet()方法处理请求,生成响应内容。 https://blog.csdn.net/qq_43012298/article/details/139148062
2.生命周期简介:Servlet接口中一共是5个方法,其中有三个是生命周期方法。? void init(ServletConfig):这个方法会在Servlet被创建后,马上被调用。只会被调用一次!我们可以把一些初始化工作放到这个方法中,如果没有什么初始化工作要做,那么这个方法就空着就可以了。? Servlet有两个时间点会被创建:一是在第一次被请求时,会被...http://yjs.ceden.cn/index.php?article/1638118
3.sessionid怎么获取前端需要吗mob64ca14137e4f的技术博客什么是servlet? 目录 什么是servlet? 一·那么该如何实现一个servlet程序呢? 二.web里的ServletContext 核心:servlet其实就是用来处理请求和响应的工具 是一种实现动态web的java程序 一·那么该如何实现一个servlet程序呢? 1.编写一个java类实现一个HttpServlet类 ...https://blog.51cto.com/u_16213697/12570463
4.Servlet程序的入口点是()Servlet程序的入口点是( ) A.Init() B.main() C.service() D.doGet() 点击查看答案进入小程序搜题 你可能喜欢 仪容的修饰美不需要依据场合规则塑造得体的个人形象。() A. 对 B. 错 点击查看答案进入小程序搜题 β1受体主要分布于心脏。( ) A.对 B.错 点击查看答案进入小程序搜题 无论如何,...https://m.ppkao.com/wangke/daan/3624dbf15ac1423da82e7d50e75cb68d
5.Servlet程序的入口点是:()Servlet程序的入口点是()。 答案解析 (单选题) C#的Windows应用程序的入口点是()。 答案解析 (单选题) 在部署带有Servlet的javaWeb程序时,()不是必须的。? 答案解析 (简答题) 请你编写一个最简单的servlet程序,该程序在网页输出一个字符串“Thisisaservletprogram!!” 答案解析 (单选题) 在JavaEE中,Servle...https://www.examk.com/p/1694877510.html
6.jsp选择题总结(精选5篇)9、Servlet程序的入口点是:(A) A、init()B、main()C、service()D、doGet() 10、不能在不同用户之间共享数据的方法是(A) A、通过cookie B、利用文件系统 C、利用数据库 D、通过ServletContext对象 A5.编写Servlet 的doPost方法时,需要抛出异常为()。(只选一项)A.ServletException,IOException B.ServletExcepti...https://www.360wenmi.com/f/fileacsn0pk3.html
7.2018年3月计算机二级考试WEB提分习题答案(1)15、Servlet程序的入口点是:(A) A、init() B、main() C、service() D、doGet() 16、不能在不同用户之间共享数据的方法是(A) A、通过cookie B、利用文件系统 C、利用数据库 D、通过ServletContext对象 17、page指令通过(A)属性指定当前页面的内容类型和字符集? https://jsj.liuxue86.com/a/3667938.html
8.2020年计算机二级Web考试每日一练(6月1日)5、Servlet程序的入口点是:(A) A、init() B、main() C、service() D、doGet() 以上就是考必过为大家整理的2020年计算机二级Web考试每日一练(6月1日)的具体内容。没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。你必须特别努力,才能显得毫不费力。最后,考必过预祝大家在未...https://m.kaobiguo.net/news/237111.html
9.金三银四跳槽季,为了年后offer,我竟然撸完了这50场1000多道面经...程序: 1.实现优先队列 2.设计2D游戏功能 输入两个角色位置 输出射击转向角 3.环形buffer设计 提问: 1.二叉树与堆的关系 2.B+树 3.时间复杂度 4.内积点乘叉乘 5.CAS机制 6.重载 重写和多态 字节跳动二面12.28 1.内积点乘叉乘 2.堆 3. 排序 各种数据结构 ...https://maimai.cn/article/detail?fid=1589559958&efid=HMnVzUsEaNASGCiWLCQB4Q
10.构建用户管理微服务应用程序将具有模块化设计,以便能够为各种场景提供单独的部署工件(例如,针对 Google App Engine 的 2.5 servlet 兼容 WAR 和其他用例的基于 Spring Boot 的自包含可执行 JAR) 实体标识符以数据库无关的方式生成,也就是说,不会使用数据库特定机制(AUTO_INCREMENT 或序列)来获取下一个 ID 值。解决方案将类似于 In...https://www.jianshu.com/p/f59cd83207ef
11.2016计算机二级web程序设计强化练习(含答案)15、Servlet程序的入口点是:(A) A、init() B、main() C、service() D、doGet() 16、不能在不同用户之间共享数据的方法是(A) A、通过cookie B、利用文件系统 C、利用数据库 D、通过ServletContext对象 17、page指令通过(A)属性指定当前页面的内容类型和字符集? https://www.oh100.com/kaoshi/ncre2/tiku/262091.html
12.程序不包含适用于入口点的静态"Main"方法您好!您的问题是关于程序中不包含适用于入口点的静态 "Main" 方法。这个问题可能是由于程序缺少一个适当的入口点而导致的。 在编程中,每个程序都需要一个入口点,即程序开始执行的地方。通常,这个入口点是一个名为 "Main" 的静态方法。这个方法通常包含程序的主要逻辑,并在程序启动时自动调用。 如果您的程序...https://cloud.tencent.com/developer/information/%E7%A8%8B%E5%BA%8F%E4%B8%8D%E5%8C%85%E5%90%AB%E9%80%82%E7%94%A8%E4%BA%8E%E5%85%A5%E5%8F%A3%E7%82%B9%E7%9A%84%E9%9D%99%E6%80%81%22Main%22%E6%96%B9%E6%B3%95
13.@ServletComponentScan组件扫描标识注解@ServletComponentScan常常在主应用程序入口启动类中,发现该注解身影,她的作用可大了:开启组件注解扫描功能+标识在那里扫描 一、springboot中的注解的理解 注解所在的位置,无非有几个:类,方法与属性上,由于位置的限定,注定不会很长 归纳本人对注解的理解: ...http://www.leanboot.com/53.htm
14.SpringBoot监控Redis某个Key变化SpringBoot怎样监控Redis中某个...public class DemoController { @RequestMapping("/fun") public void fun(){ System.out.println("fun"); } } 第四步:在程序执行入口类上面添加注解 @ServletComponentScan 部署项目,运行查看效果: 以上为个人经验,希望能给大家一个参考,也希望大家多多支持。https://www.qb5200.com/article/405369.html
15.SpringBoot如何监控Redis中某个Key的变化(自定义监听器)public class DemoController { @RequestMapping("/fun") public void fun(){ System.out.println("fun"); } } 第四步:在程序执行入口类上面添加注解 @ServletComponentScan 部署项目,运行查看效果: 以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。https://m.jb51.net/article/222909.htm
16.如何读懂代码–学时网读懂程序代码,使心法皆为我所用。 摸清架构,便可轻松掌握全貌。 优质工具在手,读懂程序非难事。 望文生义,进而推敲组件的作用。 找到程序入口,再由上而下抽丝剥茧。 阅读的乐趣,透过程序认识作者。 读懂程序,使心法皆为我所用 程序是别人写的,只有原作者才真的了解程序的用途及涵义。许多程员心里都有一种不...http://www.xuetimes.com/archives/2108