使用外部 Servlet 容器 &JSP 支持|学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习使用外部 Servlet 容器&JSP 支持

开发者学堂课程【SpringBoot快速掌握 - 核心技术使用外部 Servlet 容器&JSP 支持】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9263


使用外部 Servlet 容器&JSP 支持


内容介绍

一、使用外部Servlet容器

二、错误分析

三、总结使用外置servlet容器步骤

 

一、使用外部Servlet容器

使用嵌入式 servlet 容器:应用打成可执行的jar

优点:简单、便携;

缺点:默认不支持 JSP、优化定制比较复杂;

优化和定制可以写定制器进行简单定制,要做到深度优化定制还需要知道每一个servlet 容器里的工作原理,有两种办法:

1、使用定制器ServerProperties、自定义

EmbeddedServletContainerCustomizer】

就是以前说的两种方式,这是以前使用定制器,当然也可以用更高级的方式。

2、自己编写嵌入式 servlet 容器的创建工厂EmbeddedServletContainerFactory]

这样就没有局限性了,但在后来开发的时候很多应用都是需要开发 JSP 的,所以也需要让它支持 JSP,使用外置的 servlrt 容器。

外置的 servlrt 容器:外面安装 tomcat,这个应用是以 war 包的方式打包;

用 war 包的方式也非常简单,直接创建一个新的项目,在这个项目里还是要 spring初始化器,将项目打成 jar 包,方便支持 JSP

但是注意有一个 packaging 方式改成 war,然后下一步,还是选择 web 应用,注意用spring boot1.5.10,把项目创建出来。

创建出来后自动将项目下载出来,在 s rc 找到 main、java、com、点击springboot,可以看到 springboot 的主程序,而且在列表中看到多了一个类:servletlnitializer。

现在这个项目是 war 形式,那么在 src、main 下除了有 java 和 resources 还应该有 web.app 文件夹而现在还没有,所以生成一下:

有两种办法,可以手动创建,但是注意在右上角 porject structure 按钮,点击进入modules 里,这个项目除了是 spring 项目外还有 web 应用,web 应 用下有 web resource directories 资源目录,双击,发现默认就是给当前项目放东西,只不过这个文件夹目录还没有生成,点击ok 提示是不是要自动生成这个文件夹,点击yes文件夹就自动创建了。

但注意还有一个 deployment descriptors 部署描述符,点击加号可以生成web.xml文件,就生成在当前目录src下main下的webapp文件夹主要是有一个WEB-INF文件夹里的 web.xml 点击ok,就会给指定位置生成 web.xml 并且生成相关 web 目录结构。

点击应用,点击 OK,在目录中可以找到刚才创建的 web.xml 那就没问题,web目录结构就生成了。

应用启动就可以打成 war 包的方式放在服务器上,也可以把服务器整合进来,启动就更方便了,怎么把服务器整合进来呢?

在运行窗口编辑配置,点开是 springboot 应用,点击+号,加入服务器,表中没有列举,但有一个32 items more 点开其中就有 tomcat server 选择 local 加入本地服务器。

首先指定位置,根据安装情况进行选择。但是要运行项目,找到 deployment 添加要部署的哪个项目,点击+号选择 artifacts 选中要部署的项目后点击ok应用就可以了。

这样就配置好了,点击运行就启动了在控制台中可以查看启动输出,在这过程中 springboo t 也被带起来了,这样就启动正确了。

 

二、错误分析

第一个显示一个错误页面,这是由于没有写首页,为了测 JSP 就在 webapp 下直接创建 JSP,写入:

<htm1>

<head>

<title>Title</tit1e>

< / head>

<body>

<h1>Hello JSP</h1>

</body>

</html>

写完后关掉重启服务器,看能不能访问到JSP,启动后访问:

localhost:8081/hello.jsp

发现这个页面是可以使用的,包括和spring src结合,比如在这个页面发一个请求abc超链接请求。

首先来到一个success页面,在WEB-INF中创建success文件夹写入:

<html><head>

<title>Title</title>

</ head>

<body>

<h1>success/h1>< / body>

</ html>

然后再 springboot 里创建 controller.Hellcontroller 文件夹,它来处理请求:

package com.atguigu. springboot.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;

@Controller

public class HelloController {

@GetMapping( "/abc")

public String hello(){

return "";

}

Return 返回的页面是 s uccess.jsp,以前要经常向 WEB-INF 面返回一个页面,比如以前配过视图解析器,有前缀、后缀、拼串,这里也可以配:

在 application.properties中写入:

spring.mvc.view.prefix=/wEB-INF/

spring.mvc.view.suffix=.jsp

这样只要是给 WEB-INF 下找 jsp 只需要写页面的名字就可以了,也可以放一些数据在页面里:

@Controller

public class HelloController {

@GetMapping(" /abc")

public string hello(Model model){

model.addAttribute( attributeName: "msg" , attributeValue: "你好");

return "success" ;

}

}

在 success.jsp 中写入:

3>${msg}<h3>

重启服务器,重新访问看能不能访问到 success 页面:

刷新页面点击 abc 超链接访问到 success 页面,也取出了 你好 消息。

 

三、总结使用外置 servlet 容器步骤

1、必须创建一个 war 项目;(利用idea创建好目录结构)

如果用 spring 初始化向导器,war 项目一创建都已经好了,但是有一些变化。

war 文件创建后,如果要自己写那么:

2、将嵌入式的 Tomcat 指定为 provided ;

org.springframework.boot

spring-boot-starter-tomcat

provided

< / dependency>

有两个重要的东西 servletinitializer 这个必须写没有它是启动不了的。

而且他的类名随意,但必须继承于springbootservletinitializer。

3、必须编写一个 SpringBootServletInitializer 的子类,并调用 configure 方法

public class ServletInitializer extends

SpringBootServletInitializer{

@override

protected SpringApplicationBuilder

configure(SpringApplicationBuilder application){

//出阿奴 springboot应用的主程序

return application.sources(SpringBoot04web3spApplication.class);

}

编写这个子类的目的是调用 configure 方法,configure 方法里这是固定写法。

application SpringApplicationBuilder 的构建器,调用 sources 方法传入springboot 的主程序。

4、启动服务器就可以使用了

主要的核心就是 tomcat 文件里将 tomcat 引用变为 provided,以及写一个

SpringBootServletInitializer 的子类传入 springboot 的主程序。

如果直接启动 springboot 的主程序,这是错误的是没法启动的。

相关文章
|
2月前
|
Java 容器
【学习笔记】Jsp与Servlet技术
【学习笔记】Jsp与Servlet技术
78 0
|
4月前
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
4月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
40 3
|
4月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
36 1
|
4月前
|
供应链 前端开发 Java
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
这篇文章通过一个服装库存管理系统的实例,展示了在Spring Boot项目中使用Ajax、JSON、layui、MVC架构和iframe等技术,涵盖了注册登录、权限管理、用户管理、库存管理等功能,并提供了系统运行环境和技术要求的详细说明。
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
|
4月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明
309 3
|
4月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
181 2
|
4月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
73 0
|
4月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
31 0
|
6月前
|
存储 设计模式 搜索推荐
早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap(下)
早期javeweb技术 JSP JDBC JSTJ Servlet BooStrap(下)
38 1