spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web
------配置嵌入式servlet容器------
springboot 默认使用的是嵌入的Servlet(tomcat)容器
问题?
1)如何定制修改Servlet容器的相关配置:
1.修改和server有关的配置(ServerProperties配置文件设置)
// 通用的servlet 容器设置server.xxxx
server.port=8080server.servlet.context-path=/crud
// tomcat 相关的设置server.tomcat.xxxserver.tomcat.uri-encoding=UTF-8
2. 编写一个EnbeddedServletContainerCustomizer:嵌入式servlet 容器的定制器来修改servlet容器默认配置
在springboot中 会有很多的xxxCustomlzer 帮助我们进行定制配置
2) 注册Servlet三大组件 【Servlet Filter Lisener】
由于springboot 默认是 以jar包的形式嵌入式的servlet容器启动web应用 没有web.xml 所以注册三大组件用一下方式
1) 注册Servlet ServletRegistrationBean
public class MyServlet extendsHttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {resp.getWriter().write("hello myservlet");} }
//注册Servlet @BeanpublicServletRegistrationBean myServlet() {ServletRegistrationBean registrationBean= new ServletRegistrationBean(new MyServlet(), "/MyServlet");returnregistrationBean; }
2) 注册filter FilterRegistrationBean
public class MyFilter implementsFilter{@Overridepublic void init(FilterConfig filterConfig) throwsServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throwsIOException, ServletException {System.out.println("MyFilter process");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic voiddestroy() {} }
//注册filter @BeanpublicFilterRegistrationBean myFilter() {FilterRegistrationBean filterRegistrationBean= newFilterRegistrationBean();filterRegistrationBean.setFilter(newMyFilter()); // 过滤什么请求filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello", "/"));returnfilterRegistrationBean; }
注册lisener ServletListenerRegistrationBean
public class MyLisener implementsServletContextListener {@Overridepublic voidcontextInitialized(ServletContextEvent servletContextEvent) {System.out.println("contextInitialized web 应用启动");}@Overridepublic voidcontextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("web 应用习销毁");} }
//注册lisener @BeanpublicServletListenerRegistrationBean myLisener() {ServletListenerRegistrationBean<MyLisener> listenerRegistrationBean = new ServletListenerRegistrationBean<MyLisener>(newMyLisener());returnlistenerRegistrationBean; }
例子:springboot帮助我们配置springmvc时候 自动注册spirngmvc 的前端控制器
3) springboot 支持其他servlet容器
tomcat
jetty (长连接 聊天点对点长时间连接)
Undertow (不支持JSP 并发性能好)
默认使用tomcat 可以切换成其他容器 修改pom依赖 移除tomcat 模块
之后启动就为Jetty 启动了
嵌入式Servlet 容器优缺点:
优点:简单 便携
缺点:不支持jsp 优化定制比较复杂 (使用低定制器【ServerProperties, EnveddedServketCibtauberCystinuzer , 自己编写嵌入式Servlet 嵌入式工厂 EmbeddedServletContainerFactory】)
使用外置的servlet容器 :外面安装Tomcat- 应用使用War包方式打包
新建项目 打包方式 选择War包 之前选择是jar包, 并且配置生成Webapp目录
生成项目结构最后如下:
配置外置tomcat 服务器
启动服务器:
创建 hello.jsp 以及success.jsp, helloController等
hello.jsp
<%--Created by IntelliJ IDEA.User: UPCDate: 2018/5/6Time: 19:26 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <a href="abc"></a> </head> <body> </body> </html>
HelloController
packagecom.lixuchun.springboot.controller;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.GetMapping;@Controllerpublic classHelloController {@GetMapping("/abc")publicString hello(Model model) {model.addAttribute("message", "你好");return "success";}}
success.jsp
<%--Created by IntelliJ IDEA.User: UPCDate:2018/5/6Time:19:26Tochange this template use File | Settings | File Templates.--%> <%@ page contentType="text/html;charset=UTF-8"language="java" %> <html> <head><title>success</title><h3>${message}</h3> </head> <body></body> </html>
application.properties
spring.mvc.view.prefix=/WEB-INF
spring.mvc.view.suffix=.jsp
访问效果:
总结 如何使用外部容器:
1) 创建一个war项目
2)将嵌入式的Tomcat指定为 provided
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope> </dependency>
3)必须编写一个 springbootServletInitiallzer的子类,并且调用 configure方法
public class ServletInitializer extendsSpringBootServletInitializer {@OverrideprotectedSpringApplicationBuilder configure(SpringApplicationBuilder application) { // 传入springboot应用的主程序return application.sources(SpringBoot04WebJspApplication.class);}}
4). 启动服务就可以使用了
转载于:https://www.cnblogs.com/lixuchun/p/8999323.html
spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web相关推荐
- spring boot 尚桂谷学习笔记05 ---Web
------web 开发登录功能------ 修改login.html文件:注意加粗部分为 msg 字符串不为空时候 才进行显示 <!DOCTYPE html> <!-- saved ...
- spring boot 及微服务 学习笔记
最近在进行项目架构的调整,准备从springmvc转换到spring cloud,也就是微服务框架.自然就需要将原有的项目转化为spring boot形式. 微服务 在了解spring boot之前, ...
- 2、Spring Boot尚硅谷笔记整理高级篇-消息
1.Spring Boot尚硅谷笔记整理高级篇-缓存 2.Spring Boot尚硅谷笔记整理高级篇-消息 3.Spring Boot尚硅谷笔记整理高级篇-检索 4.Spring Boot尚硅谷笔记整 ...
- spring cloud Alibaba 的 Nacos学习笔记
spring cloud Alibaba 的 Nacos学习笔记 文章目录 spring cloud Alibaba 的 Nacos学习笔记 下载nacos spring cloud Alibaba依 ...
- Spring Boot 官方文档学习(一)入门及使用
Spring Boot 官方文档学习(一)入门及使用 个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问 ...
- JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】
Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...
- MySQL学习笔记07【事务、用户管理和权限管理】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- 【EF学习笔记07】----------加载关联表的数据 贪婪加载
[EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...
- spring boot guava cache 缓存学习
http://blog.csdn.net/hy245120020/article/details/78065676 ****************************************** ...
- 《机电传动控制》学习笔记-07
<机电传动控制>学习笔记07 胡恒谦 机卓1301 (注:本周补上第7周的学习笔记) PLC的编程元件: PLC内部有许多不同功能的器件,实际上这些器件是由电子电路和存储器组成的. 1. ...
最新文章
- 重磅:腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代
- 快讯 | 老黄啊,特斯拉背着你找AMD了,咱可不能给他降价
- 在updatepanel中使用fileupload控件
- poj 1987 树的分治
- SpringMVC的XML配置解析
- jzoj1753-锻炼身体【单调队列】
- PCA(主成分分析)思想及实现
- size_t strtok
- b2b优势与劣势_在Amazon Business平台销售的优点和缺点,B2B卖家清楚吗?
- 黑马程序员java整套视频地址 javaweb+ssh+ssm视频+源码+软件
- 十二存单法 和 阶梯存款法
- 使用pyqt弹出消息提示框
- 让html前端的数字每天自己增加,前端开发神器Emmet,让你的代码输入效率瞬间翻倍...
- rn 滑动验证_rn-fetch-blob
- 2022施工员-土建方向-通用基础(施工员)理论题库模拟考试平台操作
- STM32第二课(cubemx,clk,gpio,)
- XCODE - Failed to create provisioning profile
- te40终端不设网关_华为TE40视频会议维修,华为视频会议终端维修
- java局域网通信_java局域网通信
- 上海财经大学如何构建量化高频数据中心?
热门文章
- iVIEW: An Intelligent Video over InternEt and Wireless Access System
- 如何搭建自己的开发环境
- pip 安装 pytorch环境
- keras-bert学习
- matplotlib-legend 位置属性 loc 使用
- 面向Transformer模型的高效预训练方法
- 【文本摘要】BottleSum——文本摘要论文系列解读
- 【短文本聚类】TextCluster:短文本聚类预处理模块 Short text cluster
- 【分享】如果我没有那么优秀,我研究生阶段选择机器学习方向还有出路吗?...
- 斯坦福经典AI课程CS 221官方笔记来了!机器学习模型、贝叶斯网络等重点速查...