------配置嵌入式servlet容器------

  springboot 默认使用的是嵌入的Servlet(tomcat)容器

  问题?

    1)如何定制修改Servlet容器的相关配置:

      1.修改和server有关的配置(ServerProperties配置文件设置)

// 通用的servlet 容器设置
server.xxxx
server.port=8080
server.servlet.context-path=/crud // tomcat 相关的设置
server.tomcat.xxx
server.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 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello myservlet");
}
}
// 注册Servlet
@Bean
public ServletRegistrationBean myServlet() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(), "/MyServlet");
return registrationBean;
}

      2) 注册filter FilterRegistrationBean

public class MyFilter implements Filter{

    @Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter process");
filterChain.doFilter(servletRequest, servletResponse);
} @Override
public void destroy() { }
}
// 注册filter
@Bean
public FilterRegistrationBean myFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new MyFilter());
   // 过滤什么请求
filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello", "/"));
return filterRegistrationBean;
}

      注册lisener ServletListenerRegistrationBean

public class MyLisener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("contextInitialized web 应用启动");
} @Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("web 应用习销毁");
}
}
// 注册lisener
@Bean
public ServletListenerRegistrationBean myLisener() {
ServletListenerRegistrationBean<MyLisener> listenerRegistrationBean = new ServletListenerRegistrationBean<MyLisener>(new MyLisener());
return listenerRegistrationBean;
}

      例子: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: UPC
Date: 2018/5/6
Time: 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

package com.lixuchun.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; @Controller
public class HelloController {
@GetMapping("/abc")
public String hello(Model model) {
model.addAttribute("message", "你好");
return "success";
} }

    success.jsp

<%--
Created by IntelliJ IDEA.
User: UPC
Date: 2018/5/6
Time: 19:26
To change 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 extends SpringBootServletInitializer {

    @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
     // 传入springboot应用的主程序
return application.sources(SpringBoot04WebJspApplication.class);
} }

    4). 启动服务就可以使用了

spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web的更多相关文章

  1. spring boot 尚桂谷学习笔记04 ---Web开始

    ------web开发------ 1.创建spring boot 应用 选中我们需要的模块 2.spring boot 已经默认将这些场景配置好了 @EnableAutoConfiguration ...

  2. spring boot 尚桂谷学习笔记10 数据访问02 mybatis

    数据访问 mybatis 创建一个 springboot 工程,模块选择 sql 中 mysql(数据驱动), jdbc(自动配置数据源), mybatis Web模块中选择 web pom 引入: ...

  3. spring boot 尚桂谷学习笔记11 数据访问03 JPA

    整合JPA SpringData 程序数据交互结构图 (springdata jpa 默认使用 hibernate 进行封装) 使用之后就关注于 SpringData 不用再花多经历关注具体各个交互框 ...

  4. spring boot 尚桂谷学习笔记09 数据访问

    springboot 与数据库访问 jdbc, mybatis, spring data jpa,  1.jdbc原生访问 新建项目 使用 springboot 快速构建工具 选中 web 组件 sq ...

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

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

  6. spring boot 尚桂谷学习笔记08 Docker ---Web

    ------Docker------ 简介:Docker是一个开元的应用容器引擎,性能非常高 已经安装好的软件打包成一个镜像放到服务器中运行镜像 MySQL容器,Redis容器...... Docke ...

  7. spring boot 尚桂谷学习笔记06 异常处理 ---Web

    ------错误处理机制------ 默认效果 1 返回一个默认的错误页面 浏览器发送请求的请求头:优先接收 text/html 数据 客户端则默认响应json数据 : accept 没有说明返回什么 ...

  8. springboot 尚桂谷学习笔记03

    ------spring boot 与日志------ 日志框架: 市面上的日志框架: jul jcl jboss-logging logback log4j log4j2 ...... 左边一个门面 ...

  9. 初次搭建spring boot 项目(实验楼-学习笔记)

    首先说一下springboot 的优点: 使用Spring Initializr可以在几秒钟就配置好一个Spring Boot应用. 对大量的框架都可以无缝集成,基本不需要配置或者很少的配置就可以运行 ...

随机推荐

  1. mysql高级知识

    2 数据约束 2.1什么数据约束 ​ 对用户操作表的数据进行约束 2.2 默认值 作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值. 注意: 1)对默认值字段插入null是可以的. 2)对 ...

  2. mysql 5.7 事务隔离级别

    事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repeatable read).串行化(serializable). 未提交读: ...

  3. kmp(前缀出现次数next应用)

    http://acm.hdu.edu.cn/showproblem.php?pid=3336 Count the string Time Limit: 2000/1000 MS (Java/Other ...

  4. P3914染色计数

    题目描述 有一颗\(N\)个节点的树,节点用\(1,2,\cdots,N\)编号.你要给它染色,使得相邻节点的颜色不同.有\(M\)种颜色,用\(1,2,\cdots,M\)编号.每个节点可以染\(M ...

  5. 02 java内存模型

    java内存模型 1.JVM内存区域 方法区:类信息.常量.static.JIT (信息共享) java堆:实例对象 GC (信息共享) OOM VM stack:JAVA方法在运行的内存模型 (OO ...

  6. python学习三十七天函数的作用域查找顺序LEGB

    python函数的作用域查找顺序LEGB,分别为 locals  eclosing  globals  builtins .了解作用域的范围,可以更好的操作你想要的业务,分别介绍一下. 1,local ...

  7. Jenkins windows 执行批量cmd命令XCOPY 提示'XCOPY' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    由于Jenkins没有配置环境变量造成 打开Jenkins=>Manage Jenkins =>Configure System =>全局属性 新增全局变量 健: Path 值: % ...

  8. JavaScript —— 正则表达式元字符

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  9. 关于WTSAPI32

    一般在windows编程都是用用从ntdll导出的Native API,现在看到一点COM编程或者其他的一些不常用的接口函数总觉得蛮有意思,准备以后多积累一下. 先简单总结WTSAPI32.以下实在W ...

  10. java String练习题

    package java07; /* 题目: 定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串,格式参照如下:[word1#word2#word3] 思路: 1.首先准备一个int[]数 ...