------配置嵌入式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相关推荐

  1. spring boot 尚桂谷学习笔记05 ---Web

    ------web 开发登录功能------ 修改login.html文件:注意加粗部分为 msg 字符串不为空时候 才进行显示 <!DOCTYPE html> <!-- saved ...

  2. spring boot 及微服务 学习笔记

    最近在进行项目架构的调整,准备从springmvc转换到spring cloud,也就是微服务框架.自然就需要将原有的项目转化为spring boot形式. 微服务 在了解spring boot之前, ...

  3. 2、Spring Boot尚硅谷笔记整理高级篇-消息

    1.Spring Boot尚硅谷笔记整理高级篇-缓存 2.Spring Boot尚硅谷笔记整理高级篇-消息 3.Spring Boot尚硅谷笔记整理高级篇-检索 4.Spring Boot尚硅谷笔记整 ...

  4. spring cloud Alibaba 的 Nacos学习笔记

    spring cloud Alibaba 的 Nacos学习笔记 文章目录 spring cloud Alibaba 的 Nacos学习笔记 下载nacos spring cloud Alibaba依 ...

  5. Spring Boot 官方文档学习(一)入门及使用

    Spring Boot 官方文档学习(一)入门及使用 个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问 ...

  6. JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】

    Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...

  7. MySQL学习笔记07【事务、用户管理和权限管理】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  8. 【EF学习笔记07】----------加载关联表的数据 贪婪加载

    [EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...

  9. spring boot guava cache 缓存学习

    http://blog.csdn.net/hy245120020/article/details/78065676 ****************************************** ...

  10. 《机电传动控制》学习笔记-07

    <机电传动控制>学习笔记07 胡恒谦 机卓1301 (注:本周补上第7周的学习笔记) PLC的编程元件: PLC内部有许多不同功能的器件,实际上这些器件是由电子电路和存储器组成的. 1.  ...

最新文章

  1. 重磅:腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代
  2. 快讯 | 老黄啊,特斯拉背着你找AMD了,咱可不能给他降价
  3. 在updatepanel中使用fileupload控件
  4. poj 1987 树的分治
  5. SpringMVC的XML配置解析
  6. jzoj1753-锻炼身体【单调队列】
  7. PCA(主成分分析)思想及实现
  8. size_t strtok
  9. b2b优势与劣势_在Amazon Business平台销售的优点和缺点,B2B卖家清楚吗?
  10. 黑马程序员java整套视频地址 javaweb+ssh+ssm视频+源码+软件
  11. 十二存单法 和 阶梯存款法
  12. 使用pyqt弹出消息提示框
  13. 让html前端的数字每天自己增加,前端开发神器Emmet,让你的代码输入效率瞬间翻倍...
  14. rn 滑动验证_rn-fetch-blob
  15. 2022施工员-土建方向-通用基础(施工员)理论题库模拟考试平台操作
  16. STM32第二课(cubemx,clk,gpio,)
  17. XCODE - Failed to create provisioning profile
  18. te40终端不设网关_华为TE40视频会议维修,华为视频会议终端维修
  19. java局域网通信_java局域网通信
  20. 上海财经大学如何构建量化高频数据中心?

热门文章

  1. iVIEW: An Intelligent Video over InternEt and Wireless Access System
  2. 如何搭建自己的开发环境
  3. pip 安装 pytorch环境
  4. keras-bert学习
  5. matplotlib-legend 位置属性 loc 使用
  6. 面向Transformer模型的高效预训练方法
  7. 【文本摘要】BottleSum——文本摘要论文系列解读
  8. 【短文本聚类】TextCluster:短文本聚类预处理模块 Short text cluster
  9. 【分享】如果我没有那么优秀,我研究生阶段选择机器学习方向还有出路吗?...
  10. 斯坦福经典AI课程CS 221官方笔记来了!机器学习模型、贝叶斯网络等重点速查...