七、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之后:
2.application.properties配置Jsp信息
application.properties为全局配置⽂件,⾥⾯可以设置很多信息,⽐如设置⽇志、设置缓存、设置Spring、Spring SESSION等信息,我们本⽂只需要设置JSP的⽬录⽂件,以及⽂件后缀,代码如下:
spring.mvc.view.prefix=/WEB-INF/jsp
spring.mvc.view.suffix=.jsp
更多application.properties设置信息,查看官⽅⽂档:docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties
l添加JSP配置
在l需要添加3个组件:
spring-boot-starter-web (⽤于运⾏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>
<!--内置tomcat对Jsp⽀持的依赖,⽤于编译Jsp-->
<dependency>
<groupId>at.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操作
jsp创建system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,⽽是从本地⽂件系统拿。需要添加systemPath的属性来定义路径4.编写Spring MVC代码
经过前3步的配置,项⽬配置部分已经完成的差不多了,接下来就是代码的编写了,代码的编写和Spring MVC⼀样,分为两部分Java类编写与标识注
解,JSP模板创建与编写。为了更好的演⽰Spring Boot 的功能,我们会尽可能的简化业务逻辑,在这个⽰例中我们创建⼀个Dog类,设置返回对象
user="miyue",在页⾯输出标签即可。
Dog.java代码
@Controller
@RequestMapping("/dog")
public class Dog {
@RequestMapping("/houru")
public ModelAndView houru() {
ModelAndView modelAndView = new ModelAndView("/hello");//设置对应JSP的模板⽂件
modelAndView.addObject("name", "miyue");
return modelAndView;
}
}
Spring MVC注解解读
@Controller 标识在⼀个类上,标识的类就是Spring MVC的控制器类,分发处理器会扫描使⽤了该注解的类是否使⽤了@RequestMapping 注解,@Controller只是定义了⼀个控制器类,只⽤使⽤了@RequestMapping 注解,才是真正处理请求的处理器;
@RequestMapping 标识在类或者⽅法上,⽤来处理请求地址的注解,⼀共有6个属性:
1. value 对应请求的实际地址
2. method 请求的类型:get、post、put、delete 等,例如:@RequestMapping(value = "/test", method = RequestMethod.GET)只接受前台的get形
式请求,method不写的情况下,接收所有类型的请求。关于post和get的相关描述和区别可以参考鄙⼈另外⼀坨博客:
3. consumes 指定请求上的内容类型,⽐如application/json、text/html等
4. produces 指定返回的数据类型,类型必须是Request Headers中accept包含的类型
5. params 过滤请求,只有请求中包含某个参数,才会执⾏,⽐如@RequestMapping(value = "",params = "flag"),只有参数中包含flag才会执
⾏,不然不能访问,localhost:8080/cat?true=flag这个地址是访问不到的,正确的地址是localhost:8080/cat?flag=true才可以正常访问
6. headers 和params类似,只有请求headers⾥⾯包含某个key才可以访问⽅法
hello.jsp代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${name}
</body>
</html>
这个jsp只做了⼀件事,把java类⾥⾯的${hi}标签的值显⽰出来。
5.运⾏程序
⽅法1:SpringBoot⾃带启动类运⾏
注意:SpringBoot项⽬默认启动之后的访问地址是localhost:8080+我们的Controller类的映射地址+⽅法映射地址
⽅法2:IDEA集成tomcat启动项⽬:
a,下载⼀个全新的tomcat
b,idea集成该tomcat
c,启动tomcat
注意,上⾯介绍的两种启动⽅式,只要保证端⼝不冲突的情况下,可以同时启动同⼀个项⽬

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。