2023年11月28日发(作者:)

七、SpringBoot项⽬集成JSP以及项⽬不同启动⽅式及访问路径配置

1.创建JSP⽬录

src/main⽬录下创建⽬录webapp/WEB-INF/jsp⽤于存放jsp页⾯,如下图:

然后再改⽂件夹下⾯我们创建JSP⽂件:

⼤家在使⽤IDEA new菜单创建JSP时发现菜单⾥⾯根本没有JSP。。。这就很尴尬了吧。你知道为啥吗?因为IDEA很专业的,IDEA项⽬下⾯每⼀种⽂

件夹都代表不同的功能,现在new的菜单没有JSP说明IDEA根本不认为这⾥应该创建JSP,那怎么办呢?按照下图设置:

Ctrl+Alt+Shift+S快捷键打开设置项⽬配置的页⾯:

上⾯的操作就是告诉IDEA:喂!⽼I,那个webapp是搞web的,她得创建JSP!。。。

执⾏上⾯的操作之后细⼼的同学会发现,webapp⽂件夹被戳了个洞,标志她是web⽂件夹了:

创建完成jsp之后:

ties配置Jsp信息

ties为全局配置⽂件,⾥⾯可以设置很多信息,⽐如设置⽇志、设置缓存、设置SpringSpring SESSION等信息,我们本⽂只需要设置

JSP的⽬录⽂件,以及⽂件后缀,代码如下:

=/WEB-INF/jsp

=.jsp

更多ties设置信息,查看官⽅⽂档:/spring-boot/docs/current/reference/htmlsingle/#common-application-

properties

添加JSP配置

需要添加3个组件:

spring-boot-starter-web (⽤于运⾏web项⽬:注意如果我们创建项⽬时已经选择web项⽬那么这个依赖不⽤再添加)

jstl JavaServer Pages Standard Tag LibraryJSP标准标签库,⽤于程序中解析JSP

tomcat-embed-jasper (内置tocatJsp⽀持的依赖,⽤于编译Jsp

具体代码如下:

<dependency>

<groupId>groupId>

<artifactId>spring-boot-starter-webartifactId>

dependency>

<dependency>

<groupId>tgroupId>

<artifactId>jstlartifactId>

dependency>

<dependency>

<groupId>groupId>

<artifactId>tomcat-embed-jasperartifactId>

<scope>providedscope>

dependency>

注意:tomcat-embed-jasperscope(作⽤域)值为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 的功能,我们会尽可能的简化业务逻辑,在这个⽰例中我们创建⼀个Dog类,设置返回对象

user="miyue",在页⾯输出标签即可。

代码

@Controller

@RequestMapping("/dog")

public class Dog {

@RequestMapping("/houru")

public ModelAndView houru() {

ModelAndView modelAndView = new ModelAndView("/hello");//设置对应JSP的模板⽂件

ect("name", "miyue");

return modelAndView;

}

}

Spring MVC注解解读

@Controller 标识在⼀个类上,标识的类就是Spring MVC的控制器类,分发处理器会扫描使⽤了该注解的类是否使⽤了@RequestMapping

解,@Controller只是定义了⼀个控制器类,只⽤使⽤了@RequestMapping 注解,才是真正处理请求的处理器;

@RequestMapping 标识在类或者⽅法上,⽤来处理请求地址的注解,⼀共有6个属性:

1. value 对应请求的实际地址

2. method 请求的类型:getpostputdelete 等,例如:@RequestMapping(value = "/test", method = )只接受前台的get

式请求,method不写的情况下,接收所有类型的请求。关于postget的相关描述和区别可以参考鄙⼈另外⼀坨博客:

3. consumes 指定请求上的内容类型,⽐如application/jsontext/html

4. produces 指定返回的数据类型,类型必须是Request Headersaccept包含的类型

5. params 过滤请求,只有请求中包含某个参数,才会执⾏,⽐如@RequestMapping(value = "",params = "flag"),只有参数中包含flag才会执

⾏,不然不能访问,localhost:8080/cat?true=flag这个地址是访问不到的,正确的地址是localhost:8080/cat?flag=true才可以正常访

6. headers params类似,只有请求headers⾥⾯包含某个key才可以访问⽅法

代码:

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

<html>

<head>

<title>Titletitle>

head>

<body>

${name}

body>

html>

这个jsp只做了⼀件事,把java类⾥⾯的${hi}标签的值显⽰出来。

5.运⾏程序

⽅法1SpringBoot⾃带启动类运⾏

注意:SpringBoot项⽬默认启动之后的访问地址是localhost8080+我们的Controller类的映射地址+⽅法映射地址

⽅法2IDEA集成tomcat启动项⽬:

a,下载⼀个全新的tomcat

b,idea集成该tomcat

c,启动tomcat