欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Web应用之JSP+打war包在tomcat中运行实例讲解

程序员文章站 2022-07-02 20:18:08
首先引入依赖: 在build.gradle中 //支持thymeleaf模板 //compile("org.springframework.bo...

首先引入依赖:

在build.gradle中

    //支持thymeleaf模板
    //compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    //支持jsp
    compile('javax.servlet:jstl') //
    compile('javax.servlet:javax.servlet-api') 
    compile('org.springframework.boot:spring-boot-starter-tomcat')
    compile('org.apache.tomcat.embed:tomcat-embed-jasper')  //

依赖包范围说明:

compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子是spring-code,在编译、测试和运行的时候都需要使用该依赖。

test: 测试依赖范围。使用次依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此依赖。典型的例子是Jnuit,它只有在编译测试代码及运行测试的时候才需要。

provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时候无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器以及提供,就不需要Maven重复地引入一遍。

特别说明:经验证,暂时发现不能同时使用thymeleaf模板和JSP,如果开启了了支持thymeleaf,则controller跳转仍然按照 thymeleaf的格式跳转到templates 下面的同名html模板文件,同时servlet-api包用的compile范围,但是在idea和外部的tomcat中都可以正常启动。

application.properties配置

要支持jsp,需要在application.properties中配置返回文件的路径以及类型,这里指定了返回文件类型为jsp,路径是在/WEB-INF/jsp/下面。

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

控制类

上面步骤有了,这里就开始写控制类,直接上简单的代码,跟正常的springMVC没啥区别:

@Controller
@RequestMapping("/learnJsp")
public class LearnResourceController {
    @RequestMapping("")
    public ModelAndView index(){
        List learnList =new ArrayList();
        LearnResouce bean =new LearnResouce("官方参考文档","Spring Boot Reference Guide","http://docs.spring.io/spring-boot/docs/1.5.1.RELEASE/reference/htmlsingle/#getting-started-first-application");
        learnList.add(bean);
        bean =new LearnResouce("官方SpriongBoot例子","官方SpriongBoot例子","https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples");
        learnList.add(bean);
        bean =new LearnResouce("龙国学院","Spring Boot 教程系列学习","http://www.roncoo.com/article/detail/125488");
        learnList.add(bean);
        bean =new LearnResouce("嘟嘟MD独立博客","Spring Boot干货系列 ","http://tengj.top/");
        learnList.add(bean);
        bean =new LearnResouce("后端编程嘟","Spring Boot教程和视频 ","http://www.toutiao.com/m1559096720023553/");
        learnList.add(bean);
        bean =new LearnResouce("程序猿DD","Spring Boot系列","http://www.roncoo.com/article/detail/125488");
        learnList.add(bean);
        bean =new LearnResouce("纯洁的微笑","Sping Boot系列文章","http://www.ityouknow.com/spring-boot");
        learnList.add(bean);
        bean =new LearnResouce("CSDN——小当博客专栏","Sping Boot学习","http://blog.csdn.net/column/details/spring-boot.html");
        learnList.add(bean);
        bean =new LearnResouce("梁桂钊的博客","Spring Boot 揭秘与实战","http://blog.csdn.net/column/details/spring-boot.html");
        learnList.add(bean);
        bean =new LearnResouce("林祥纤博客系列","从零开始学Spring Boot ","http://412887952-qq-com.iteye.com/category/356333");
        learnList.add(bean);
        ModelAndView modelAndView = new ModelAndView("/index");
        modelAndView.addObject("learnList", learnList);
        return modelAndView;
    }
}

用的对象类LearnResouce

public class LearnResouce {

    private String author;
    private String title;
    private String url;

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public LearnResouce(String author, String title, String url) {
        this.author = author;
        this.title = title;
        this.url = url;
    }
}

jsp页面编写

需在webapp/WEB_INF/jsp目录下新建index.jsp

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
 
 
 
<script src="${pageContext.request.contextPath}/vanilla-cream-css/js/libs/modernizr.min.js"></script><script src="${pageContext.request.contextPath}/vanilla-cream-css/js/libs/jquery-1.10.0.js"></script><script src="${pageContext.request.contextPath}/vanilla-cream-css/js/libs/jquery-ui.min.js"></script><script src="${pageContext.request.contextPath}/vanilla-cream-css/js/libs/bootstrap.min.js"></script> <script src="${pageContext.request.contextPath}/vanilla-cream-css/js/general.js"></script>Sptring Boot学习资源大奉送,爱我就关注嘟嘟公众号:嘟爷java超神学堂
作者 教程名称 地址
${learn.author} ${learn.title} 点我

页面访问验证:

最后启动tomcat输入http://localhost:9090/learnJsp 查看效果:

Web应用之JSP+打war包在tomcat中运行实例讲解

外部的Tomcat服务器部署war包

打war包:

在build.gradle中增加

//编译为war包
apply plugin: 'war'

然后运行

Web应用之JSP+打war包在tomcat中运行实例讲解

或者命令行执行 gradle build

会生成war包到配置文件中的生成路径

然后把war放到tomcat的webapps下,最后启动tomcat,能正常访问如下图:

Web应用之JSP+打war包在tomcat中运行实例讲解

注意,springboot打war包需要做到如下修改才可以,否则找不对对应的jsp路径:

主类继承SpringBootServletInitializer,同时重写configure方法

外部容器部署的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要在启动类中继承SpringBootServletInitializer并实现configure方法:

public class Application extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

return application.sources(Application.class);

}

}

这个类的作用与在web.xml中配置负责初始化Spring应用上下文的监听器作用类似,只不过在这里不需要编写额外的XML文件了。