spring-boot入门(二)使用JSP视图

来源:互联网 发布:哈登总得分最新数据 编辑:程序博客网 时间:2024/05/29 15:40

spring-boot入门(二)使用JSP视图

刚刚接触JAVA的时候,jsp是Javaweb项目的最常用视图。随着前端技术的不断进步,anjular的普及,前后端交互不再是那么的耦合,jsp已经渐渐的远离了我们的视线范围,但是jsp也并非完全不会接触到。下面来看看spring boot如何使用jsp视图。

1.引入相关依赖

  • 新建一个maven空项目,在pom.xml继承spring-boot-starter-parent
  • 引入spring boot基础组件
  • 引入jstl,tomcat-embed-jasper包

我这里是直接在父工程里面继承自spring-boot-starter-parent,子工程pom文件详细依赖如下:

 <packaging>war</packaging>    <name>spring-boot-practice-jsp</name>    <url>http://maven.apache.org</url>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>jstl</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-tomcat</artifactId>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>org.apache.tomcat.embed</groupId>            <artifactId>tomcat-embed-jasper</artifactId>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>

注意tomcat和jasper的scope是provided,使用自己的tomcat容器而不是spring boot内嵌的。

2.Controller控制层

返回一个ModelAndViews视图,视图名称是我们需要访问的资源路径。

@Controllerpublic class WelcomeController {    @Value("${application.message:Hello World}")    private String message = "Hello World";    @RequestMapping("/")    public ModelAndView welcome() {        ModelAndView modelAndView = new ModelAndView("/welcome");        modelAndView.addObject("message", this.message);        modelAndView.addObject("time",  new Date());        return modelAndView;    }}

3.启动主类

启动主类,继承自SpringBootServletInitializer。当我们需要一war包方式发布应用到tomcat容器时,需继承自该类。

@SpringBootApplicationpublic class JspApplicationStarter extends SpringBootServletInitializer {    private static final Log LOG = LogFactory.getLog(JspApplicationStarter.class);    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {        return application.sources(JspApplicationStarter.class);    }    public static void main(String[] args) throws Exception {        SpringApplication.run(JspApplicationStarter.class, args);        LOG.info("spring-boot-practice-jsp is started.");    }}

4.配置视图解析器

InternalResourceViewResolver是默认的视图解析器,在application.properties文件里面,配置访问静态资源的前后缀参数(spring.mvc.view.prefix 和 spring.mvc.view.suffix)和端口号。

#variableapplication.message=Hello JasonLin#portserver.port=8089#MVCspring.mvc.view.prefix=/WEB-INF/jspspring.mvc.view.suffix=.jsp

如上配置,代表访问端口号是8089(使用外部容器时无效),资源文件位于/WEB-INF/jsp目录下,文件后缀为.jsp

5.jsp页面

在/WEB-INF/jsp目录下新建一个文件名为welcome.jsp的jsp文件。

<!DOCTYPE html><%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><html lang="en"><body><c:url value="/resources/text.txt" var="url"/><spring:url value="/resources/text.txt" htmlEscape="true" var="springUrl" />Spring URL: ${springUrl} at ${time}<br>JSTL URL: ${url}<br>Message: ${message}</body></html>

做完上面的所有工作后需要将maven install项目。将文件发布到tomcat容器。整个工程的结构目录如下:

这里写图片描述

6.发布运行

在idea中配置好tomcat并启动项目。tomcat启动配置:

这里写图片描述

端口为8080,默认路径/
发布运行。
这里写图片描述

over !

PS:
1、jsp项目需要引入tomcat-embed-jasper和jstl
2、jsp web项目需要发布在Tomcat中以war包运行,直接打jar包,web-inf目录下的资源文件不会打包在jar包中,会使view无法访问(貌似可以通过插件实现).
3、以war包发布应用主类需实现WebApplicationInitializer接口或者继承自SpringBootServletInitializer
4、jasper的scope设置为: provided 否则可能会和tomcat容器里面的冲突。
5、spring.mvc.view.prefix 资源文件前缀
spring.mvc.view.suffix 资源文件后缀
6、相关代码:https://github.com/Json-Lin/spring-boot-practice/tree/master/spring-boot-practice-jsp

原创粉丝点击