SpringBoot(1)
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; }
上一篇: Spring再次学习(1)
下一篇: FileLock 文件锁