导航网站建设百度网络营销推广
与struts2对比
区别1补充
我们看一下servlet和filter的区别和联系
概念:
- 1.servlet:运行服务器端的java应用程序,工作在客户端请求与服务器相应的中间层
- 2.filter: 复用代码片段,转换http请求,相应和头信息.filter不能像servlet,不能产生一个请求或者响应,只修改对某一资源的请求
- 3.servlet,filter都是配置到web.xml中的
生命周期
- servlet,始于装入web服务器,在web服务器终止或者重新装入servlet结束,一旦被装入web服务器,一般不会从web服务器内存中删除,直到web服务器关闭或重新结束
- 装入: 启动服务器加载servlet实例
- 初始化: web服务器启动时,或者web服务器接收到请求时,init()执行
- 调用: 从第一次到后面n次,都是调用doGet()或doPost()
- 销毁:停止服务器时调用destroy(),销毁实例
- filter
- 启动服务器加载过滤器的实例,调用init()初始化实例
- 每次请求都只调用方法doFilter()进行处理
- 停止服务器调用destroy(),销毁实例
- web.xml加载顺序:filter->servlet
区别3补充
request:请求,浏览器输入地址,回车,就是一个请求
reponse:响应,服务器根据请求,返回数据导浏览器
SpringMVC请求
此图摘自书:spring实战
* 前端控制器DispatcherServlet,,所有请求会先传给前端控制器,这个DispatcherServlet会查询一个或者多个处理器映射器来确定请求的下一站;
* 当选择了合适的控制器之后,DispatcherServlet会将请求发送给选择的控制器
* 到达控制器后, 请求卸载其负载,等到控制器处理信息,返回原始信息不友好,所以将模型数据打包,标识出用于渲染的视图名称,将模型和视图名称,都发给DispatcherServlet
* DispatcherServlet使用视图解析器,将逻辑视图匹配成一个特定视图实现
* 视图实现,将响应对象传给客户端
搭建springmvc
补充1:
关于DispatcherServlet对应url映射,处理的url:为什么说/*, 是不对的
①:<url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url地址为 localhost:8088/login , /login 返回login.jsp
访问去Controller下的/login 跳转到相应的视图login.jsp ②:<url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)访问的地址为 localhost:8088/login/ ,/login 返回login.jsp
访问去Controller下的/login,跳转到login.jsp ,然后进过dispatchservlet的时候,由于是/* ,有会以localhost:8088/login/login.jsp 去请求Controller ,那么如果Controller没有 /login/login.jsp 的Mapping映射,则会报404 错误!
补充2:
ContextLoaderListener和DispatcherServlet的contextConfigLocation区别
参考博客: https://www.cnblogs.com/wodebudong/articles/7976468.html
补充3
Servlet中init-param与context-param的区别
配置在标签中,用来初始化当前的Servlet的,属于当前Servlet的配置,因此存放在servletConfig对象中;
通过getServletConfig().getInitParameter(“initParam”)的方式获取;
直接配置在web.xml的标签中,属于上下文参数,在整个web应用中都可以使用,它是全局的,因此存放在servletContext对象中(即application对象);
通过getServletContext().getInitParameter(“contextParam”)的方式获取;
补充4
常用注解
参考博客:https://www.cnblogs.com/yjq520/p/6734422.html
@ResponseBody和@RequestBody作用
@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。
@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。