Spring Boot 最佳实践(二)集成Jsp与生产环境部署

一、简介

提起Java不得不说的一个开发场景就是Web开发,也是Java最热门的开发场景之一,说到Web开发绕不开的一个技术就是JSP,因为目前市面上仍有很多的公司在使用JSP,所以本文就来介绍一下Spring Boot 怎么集成JSP开发,以及生产环境的详细部署方法。

二、集成JSP

开发环境

  • Spring Boot 2.0.4 RELEASE
  • Tomcat 9.0.10
  • IDEA(Intellij IDEA简称,下文统一使用)2018.2
  • Windows 10

JSP集成步骤

  1. 创建JSP目录
  2. application.properties配置Jsp信息
  3. pom.xml添加依赖组件
  4. 编写Spring MVC代码
  5. 运行程序

具体集成方法如下:

1.创建JSP目录

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

2.application.properties配置Jsp信息

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

spring.mvc.view.prefix=/WEB-INF/jsp
spring.mvc.view.suffix=.jsp

更多application.properties设置信息,查看官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties

3.pom.xml添加JSP配置

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

  • spring-boot-starter-web (用于运行web项目)
  • jstl (JavaServer Pages Standard Tag Library,JSP标准标签库,用于程序中解析JSP)
  • tomcat-embed-jasper (内置tocat对Jsp支持的依赖,用于编译Jsp)

具体代码如下:

<!--web支持-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!--JavaServer Pages Standard Tag Library,JSP标准标签库-->
<dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId>
</dependency><!--内置tocat对Jsp支持的依赖,用于编译Jsp-->
<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope>
</dependency>

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

scope(作用域)值列表代表含义解释如下:
  • compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去
  • test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
  • runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段
  • provided:打包不会包含进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作
  • system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
4.编写Spring MVC代码

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

a).Cat.java代码
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/cat
public class Cat {/*** 默认路由方法** @return*/@RequestMapping("")public ModelAndView index() {ModelAndView modelAndView = new ModelAndView("/index"); //设置对应JSP的模板文件modelAndView.addObject("hi", "Hello,Cat"); //设置${hi}标签的值为Hello,Catreturn modelAndView;}
}

Spring MVC注解解读

  • @Controller 标识在一个类上,标识的类就是Spring MVC的控制器类,分发处理器会扫描使用了该注解的类是否使用了@RequestMapping 注解,@Controller只是定义了一个控制器类,只用使用了@RequestMapping 注解,才是真正处理请求的处理器;
  • @RequestMapping 标识在类或者方法上,用来处理请求地址的注解,一共有6个属性:
    1. value 对应请求的实际地址
    2. method 请求的类型:get、post、put、delete 等,ex:@RequestMapping(value = “/test”, method = RequestMethod.PUT)
    3. consumes 指定请求上的内容类型,比如application/json、text/html等
    4. produces 指定返回的数据类型,类型必须是Request Headers中accept包含的类型
    5. params 过滤请求,只有请求中包含某个参数,才会执行,比如@RequestMapping(value = “”,params = “flag”),只有参数中包含flag才会执行,不然不能访问,http://localhost:8080/cat?true=flag这个地址是访问不到的,正确的地址是http://localhost:8080/cat?flag=true才可以正常访问
    6. headers 和params类似,只有请求headers里面包含某个key才可以访问方法
b).JSP端代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>${hi}
</h1>
</body>
</html>

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

5.运行程序

到此为止,如果您使用的是IDEA开发工具,那么现在就可以运行调试程序了,直接运行Index.jsp或者启动文件,或者启动文件(Application.java)即可,然后在浏览器输入:http://localhost:8080/cat 即可查看。

三、生产环境部署

部署步骤

  1. 下载安装Tomcat
  2. 入口类继承SpringBootServletInitializer重写configure方法
  3. 配置pom.xml
  4. IDEA生成war文件
  5. 配置Tomcat运行项目
1.下载安装Tomcat

下载地址:https://tomcat.apache.org/download-90.cgi

如下图所示:

Windows下载:64-bit Windows zip | Linux下载:tar.gz

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

2.入口类继承SpringBootServletInitializer重写configure方法

如果要进行生产环境部署,需要单独配置一下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;
/*** 启动类,程序入口*/
@SpringBootApplication
public class HelloSpringBootApplication  extends SpringBootServletInitializer{/*** 重写configure方法,加载启动类* @param application* @return*/@Overrideprotected 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);}
}
3.配置pom.xml

需要配置一下pom.xml,排除一下内置tomcat的jar包,防止打包之后与外面Tomcat jar 包冲突,导致项目启动失败,配置如下:

<!--排除内置tomcat jar包-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>

主要的代码是provided,设置打包不会包含进去,由其他设施提供。

4.IDEA生成war文件
步骤一:修改生成jar为war格式

找到:

jar

修改为:

war

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

jar和war的区别?

  • jar(java application archive)java应用程序库,通常为开发引用的通用类
  • war(web application archive)web应用程序

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

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

<build><finalName>name</finalName>
</build> 
步骤二:使用IDEA生成war包

选择菜单栏Build => Build Artifacts.. => 点击Rebuild,即可生成war包,如图:

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

5.配置Tomcat运行项目
步骤一:把war文件复制到tomcat的webapps目录下
步骤二:配置conf/server.xml

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

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">  <Context path="" docBase="springbootjsp" debug="0" privileged="true" reloadable="true" /><!--其他代码-->
</Host>
步骤三:启动tomcat

运行bin/shutdown.bat文件,启动tomcat

输入地址:http://localhost:8080/cat 访问。

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

四、知识扩展:Spring Boot 模板推荐

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

Spring Boot推荐模板引擎:

  • Thymeleaf
  • Freemarker
  • Mustache
  • Groovy Templates

如下图所示:

Spring为什么不推荐使用JSP?

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

  1. 官方文档JSP没有Thymeleaf好;
  2. Thymeleaf健康的开源项目,几乎每个月都有更新,而JSP已经好几年没有实质性的进展;
  3. Thymeleaf有迅速响应的用户论坛。

更多详情,点击查看:https://spring.io/blog/2012/10/30/spring-mvc-from-jsp-and-tiles-to-thymeleaf

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

五、参考资料

开发Web应用之JSP篇:http://tengj.top/2017/03/13/springboot5/

欢迎扫码,加入圈子讨论交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络编程之TCP/IP实现高并发网络服务器设计指南

目录 引言&#xff1a; 多进程服务器 例程分享&#xff1a; 多线程服务器 例程分享&#xff1a; I/O多路复用服务器 select 例程分享&#xff1a; poll 例程分享&#xff1a; epoll 例程分享&#xff1a; 总结建议 引言&#xff1a; 随着互联网的迅猛发展&#xff…

C#自动实现Dll(OCX)控件注册的两种方法

尽管MS为我们提供了丰富的.net framework库&#xff0c;我们的程序C#开发带来了极大的便利&#xff0c;但是有时候&#xff0c;一些特定功能的控件库还是需要由第三方提供或是自己编写。当需要用到Dll引用的时候&#xff0c;我们通常会通过“添加引用”的方式将它们纳入到项目中…

PyCharm+Python3转换xls文件为xlsx文件格式

import os import os.path import win32com.client as win32"""主函数功能测试""" if __name__ __main__:xlsFilePath os.path.join(os.getcwd() "\\" "通知单.xls")# 文件存在就加载&#xff0c;不存在就提示检查。if …

全网最详细 Python如何读取NIFTI格式图像(.nii文件)和 .npy格式文件和pkl标签文件内容

在医学图像处理中&#xff0c;我们经常使用一种NIFTI格式图像&#xff08;.nii文件&#xff09;&#xff0c;现在我们来看看 什么是.nii文件&#xff1f;该如何读取.nii文件&#xff1f; 1. NIFTI格式图像 什么是NIFTI&#xff08;Neuroimaging Informatics Technology Initia…

十三、PyQt5的QFileDialog文件打开、文件保存、文件夹选择对话框

import PyQt5.QtCore,PyQt5.QtGui # 获取文件路径对话框 file_name = QFileDialog.getOpenFileName(self,"打开文件","C:\\Users\\Administrator\\Desktop","Txt files(*.txt)") ##"open file Dialog "为文件对话框的标题,第三个是打…

Spring Boot 最佳实践(三)模板引擎FreeMarker集成

一、FreeMaker介绍 FreeMarker是一款免费的Java模板引擎&#xff0c;是一种基于模板和数据生成文本&#xff08;HMLT、电子邮件、配置文件、源代码等&#xff09;的工具&#xff0c;它不是面向最终用户的&#xff0c;而是一款程序员使用的组件。 FreeMarker最初设计是用来在M…

Android开发之通过浏览器链接打开任意app页面

老套路先上图&#xff1a; 先说下上面的流程&#xff0c;第一张图是模拟浏览器的网页点击链接打开app,第二张图系统弹框提示是否打开app,第三张图已打开APP&#xff0c;弹出的吐司是打开APP携带的数据 具体实现分为两步&#xff0c;第一步配置你要打开的activity页面如下&…

windows2008C盘清理

因为原来的设计&#xff0c;现在C盘的空间只有2G了&#xff0c;今天在网上看到了清理的方法&#xff0c;居然清理出4G出来&#xff0c;先把方法记录下来&#xff0c;以备以后使用。我们建议您通过以下方法来清理C盘空间&#xff1a;1.尽量不要在C盘安装应用软件&#xff0c;在软…

DVWA下载、安装、使用(漏洞测试环境搭建)教程

DVWA&#xff08;Damn Vulnerable Web Application&#xff09;是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用&#xff0c;旨在为安全专业人员测试自己的专业技能和工具提供合法的环境&#xff0c;帮助web开发者更好的理解web应用安全防范的过程。 一共有十个模块&#xf…

Spring Boot 最佳实践(四)模板引擎Thymeleaf集成

## 一、Thymeleaf介绍 Thymeleaf是一种Java XML / XHTML / HTML5模板引擎&#xff0c;可以在Web和非Web环境中使用。它更适合在基于MVC的Web应用程序的视图层提供XHTML / HTML5&#xff0c;但即使在脱机环境中&#xff0c;它也可以处理任何XML文件。它提供了完整的Spring Fram…

Centos7安装Postgresql 13 详细步骤(远程连接)

版本信息 CentOS &#xff1a; 7.6 postgresql&#xff1a; 10.012 安装 可以参考官网PostgreSQL: Linux downloads (Red Hat family) &#xff03;安装存储库RPM&#xff1a; sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgd…

mysql复制: 一个master对应1个slave

2019独角兽企业重金招聘Python工程师标准>>> 复制的步骤&#xff1a;1.在主库上开启二进制日志&#xff0c;把数据更改记录到二进制日志(binary log)中. mysql会按照事物提交的顺序而非每条语句的执行顺序来记录二进制日志&#xff0c;在记录二进制日志后&#xff…

python3、sqlmap下载与安装教程

一 、前提 需要安装python3&#xff0c;可以参考其他教程 二 、下载 官网下载http://sqlmap.org/ 三 、安装 将下载的sqlmap.zip解压到文件夹sqlmap中&#xff0c;并拷贝到Python安装路径下 四、 配置 在桌面上创建一个cmd进入python的快捷方式&#xff08;这步可以不做…

Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8

## 一、Spring Data JPA 介绍 JPA&#xff08;Java Persistence API&#xff09;Java持久化API&#xff0c;是 Java 持久化的标准规范&#xff0c;Hibernate是持久化规范的技术实现&#xff0c;而Spring Data JPA是在 Hibernate 基础上封装的一款框架。 开发环境 Spring Boo…

Windows MinGW配置C、C++编译环境

写在前面的前面&#xff1a;这篇文章vscode和cpp插件版本有点老了&#xff0c;仅供大家参考&#xff0c;最新的和最详细的更新见我的另一篇文章&#xff1a;整理&#xff1a;Visual Studio Code (vscode) 配置C、C环境/编写运行C、C&#xff08;主要Windows、简要Linux&#xf…

Burpsuite超详细安装教程

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文转载于链接&#xff1a;https://blog.csdn.net/LUOBIKUN/article/details/87457545 Burpsuite的超详细安装教程 概述工具分享安装一&#xff…

分析容灾备份建设需求

重要信息系统灾难备份需求分析应包括对数据处理中心的风险分析和对重要信息系统的业务分析&#xff0c;以确定灾难恢复目标。① 数据处理中心风险分析分析数据处理中心的风险&#xff0c;如物理安全&#xff0c;数据安全&#xff0c;人为因素&#xff0c;已有的容灾备份建设和L…

使用Hexo搭建个人博客的终极资料

# 一、前言 Hexo 是一个基于 NodeJs 博客框架&#xff0c;可以快速的帮我们搭建一个博客系统&#xff0c;Hexo使用的是Markdown&#xff08;下文简称MD&#xff09;解析文章的&#xff0c;在几秒内即可利用靓丽的主体生成静态网页。 推荐使用 Hexo 有三大理由&#xff1a; 有…

Linux Ubuntu 安装编译Opencv 3.4.3 C++开发环境

在安装Autoware之前&#xff0c;需要先安装Opencv&#xff0c;之前在Windows下安装了Opencv&#xff0c;挺复杂的。不过&#xff0c;在Ubuntu 16.04环境中配置安装Opencv相对来说&#xff0c;比较简单。 Linux Ubuntu 安装编译Opencv 3.4.3 C开发环境 1.1 下载Opencv 3.4.3 …

[原创]状态值在数据库中的检索

对于关系型数据库而言&#xff0c;针对表的检索&#xff0c;一般来说&#xff0c;建立合适的索引就可以达到很好的检索效果。&#xff08;这里不包含表设计的合理与否&#xff09;比如像状态列这样可选择性非常低的值&#xff0c;该如何检索&#xff1f; 其实这个已经不是关系…