SpringBoot 8/2
CRUD
-
发送put请求修改数据有三个步骤:
-
SpringMVC中配置HiddenHttpMethodFilter
-
页面上创建一个post请求(form标签只能写get和post)
-
创建一个input项目,name="_method",值就是我们所指定方式
-
<input type="hidden" name="_method" value="put" th:if="${emp!=null}" / >
-
<input type="hidden" name="id" th:if="${emp!=null}" th:value="${emp.id}">
错误处理机制
-
错误提示有状态码,类型,时间....
-
默认效果:返回一个错误的页面。
-
如果是其他客户端,默认响应一个json数据,时间戳、状态码、错误提示、错误信息、访问路径。
-
如何定制错误信息:
-
一个是定义错误页面
-
一个是定义json数据
-
external libiaries->spring-boot-auto-configure-web-ErrorMvcAutoConfigure容器中四个组件非常重要,分别是:
-
DefaultErrorAttributes
-
BasicErrorController:默认/error请求
@Controller
@RequestMapping({"${server.error.path:${error.path:/error}}"})
public class BasicErrorController extends AbstractErrorController {
@RequestMapping(
produces = {"text/html"}
)//产生html页面
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
HttpStatus status = this.getStatus(request);
Map<String, Object> model = Collections.unmodifiableMap(this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.TEXT_HTML)));
response.setStatus(status.value());
ModelAndView modelAndView = this.resolveErrorView(request, response, status, model);
return modelAndView != null ? modelAndView : new ModelAndView("error", model);
}
@RequestMapping
@ResponseBody//返回json数据
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String, Object> body = this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.ALL));
HttpStatus status = this.getStatus(request);
return new ResponseEntity(body, status);
}
但是它是如何区分是网页浏览,还是其它客户端浏览呢?
可以看到浏览器在访问时的请求头accept属性为text/html,
-
ErrorPageCustomizer
@Value("${error.path:/error}")
private String path = "/error"; //系统出现错误以后,到error进行请求,
-
DefaultErrorViewResolver
一旦发生4..或者5..错误,ErrorPageCustomizer定制错误页面。
配置嵌入式Servlet容器
SpringBoot使用的是默认的Servlet容器(Tomcat)
问题:
-
如何定制和修改Servlet容器的相关配置
-
在application.properties当中修改server相关的配置
-
server.port=8081
server.context-path=/crud
//通用的server设置
server.xxx
//tomcat的设置
server.tomcat.uri-encoding=UTF-8
-
编写一个EmbeddedServletContainerCustomizer:嵌入式的servlet容器的定制器,来修改servlet容器的配置。
-
(以上两种方式实际上在底层是一样的,都是EmbeddedServletContainerCustomizer)
-
能不能支持其他的Servlet容器
注册Servlet、Filter、Listener
Servlet:ServletRegistrationBean
Filter:FilterRegistrationBean
Listener:ServletListenerRegistrationBean
由于SpringBoot默认是以jar包方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。
注册三大组件用如下的方式:
//注册三大组件
@Bean
public ServletRegistrationBean myServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
return servletRegistrationBean;
}
如果您觉得本文的内容对您的学习有所帮助:
关键字:
SpringBoot(1)