springmvc入口,springmvc入口类的名称
springmv的核心入口类是什么
springmvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,参数的传递是直接注入到方法中的,是该方法独有的。struts2是类级别的拦截,一个类对应一个request上下文,struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的,这也就无法用注解或其他方式标识其所属方法了。
springMVC是基于什么实现的技术
spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。
spring mvc是基于方法的设计,sturts2是基于类设计的。
springmvc将url和controller方法映射。映射成功后springmvc生成一个Handler对象,对象中只包括了一个method。方法执行结束,形参数据销毁。springmvc的controller开发类似service开发。strts2每次请求都会实例一个action,每个action都会被注入属性。spring mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

Spring MVC常见面试题解析
只要问及Spring MVC框架,这一题基本80%的概率会被问及,大致如下:
从web.xml中 servlet的配置开始, 根据servlet拦截的url-parttern,来进行请求转发,大致处理流程如下:
A.用户向服务器发送请求,请求被 springMVC前端控制器(DispatchServlet)捕获
B.前端控制器对请求URL进行解析,得到请求资源标识符(URL)然后根据该URL调用页面处理器(HandlerMapping)获得该Handler配置的所有相关对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
C.前端控制器根据获得 Handler 选择一个合适的 HandlerAdapter 适配器处理
D. Handler 对数据处理完成以后将返回一个 ModelAndView()对象给前端控制器
E. Handler 返回的 ModelAndView()只是一个逻辑视图并不是一个正式的视图,前端控制器通过ViewResolver 试图解析器将逻辑视图转化为真正的视图 View;
F. DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端;
@requestMapping:用于请求 url 映射。
@RequestBody: 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
@ResponseBody :注解实现将 controller 方法返回对象转化为 json 响应给客户。
@Conntroller:控制器的注解,表示是表现层,不能用用别的注解代替
在配置文件中(一般命名为springmvc.xml )通过开启 mvc:annotation-driven来实现注解处理器和适配器的开启。
解决 post 请求乱码:在 web.xml 里边配置一个 CharacterEncodingFilter 过滤器并设置编码为 utf-8即可。
解决 get 请求乱码:
在返回值前面加"forward:"就可以让结果转发
如"forward:user.do?name=method4"
在返回值前面加"redirect:"就可以让返回值重定向
如"redirect: "
A.springmvc的入口是一个servlet即前端控制器(DispatchServlet)
struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。
B.springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例)
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
C.springmvc通过参数解析器将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面,Jsp视图解析器默认使用jstl
Struts采用值栈存储请求和响应的数据,通过OGNL存取数据。
Spring5MVC——启动过程,执行refresh方法的入口
在容器初始化时会建立所有url和controller的对应关系,保存到Mapurl,controller中。tomcat启动时会通知spring初始化容器(加载bean的定义信息和初始化所有单例bean),然后springmvc会遍历容器中的bean,获取每一个controller中的所有方法访问的url,然后将url和Controller保存到一个Map中。
这样就可以根据request快速定位到Controller,因为最终处理request的是Controller中的方法,Map中只保留了url和Controller中的对应关系,所以要根据request的url进一步确认Controller中的method,这一步工作的原理就是拼接Controller的url(Controller上@RequestMapping的值)和方法的url(method上@RequestMapping的值),与request的url进行匹配,找到匹配的那个方法。
确定处理请求的method后,接下来的任务就是参数绑定,把request中参数绑定到方法的形式参数上,这一步是整个请求处理过程中最复杂的一个步骤。SpringMVC提供了两种request参数与方法形参的绑定方法:
* ① 通过注解进行绑定 @RequestParam
* ② 通过参数名称进行绑定
使用注解进行绑定,我们只要在方法参数前面声明@RequestParam("a"),就可以将request中参数a的值绑定到方法的该参数上。使用参数名称进行绑定的前提是必须要获取方法中参数的名称,Java反射只提供了获取方法的参数的类型,并没有提供获取参数名称的方法。SpringMVC解决这个问题的方法是用asm框架读取字节码文件,来获取方法的参数名称。asm框架是一个字节码操作框架,关于asm更多介绍可以参考它的官网。个人建议,使用注解来完成参数绑定,这样就可以省去asm框架的读取字节码的操作。
这意味着注解配置方式的初始化会先于web.xml配置方式的初始化执行,并且在执行到这里的时候,Spring里面相关的Root容器、子容器和DispatcherServlet实例都已经被创建好了。
HttpServlet是Servlet规范中的核心类,实现Servlet接口,继承此类用于处理用户请求
HttpServletBean主要配置servlet中初始化参数。继承HttpServlet,并实现无参的init()方法,用于设置在web.xml中配置的contextConfigLocation属性,此属性指定Spring MVC的配置文件地址,默认为WEB-INF/[servlet-name]-servlet.xml。
HttpServletBean的作用:
FrameworkServlet主要创建WebApplicationContext上下文,重写了HttpServletBean的initServletBean()方法。
如果没有WebApplicationContext则创建
总结FrameworkServlet的作用:
DispatcherServlet是Spring MVC核心,它是J2EE规范前端控制器的实现,负责拦截用户请求,并解析请求进行转发。
总结:
参考:
struts2和springmvc有什么区别
1)springmvc的入口是一个servlet,即前端控制器,例如:*.action
struts2入口是一个filter过虑器,即前端过滤器,例如:/*
2)springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例
struts2是基于类开发,传递参数是通过类的属性,只能设计为多例
3)springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成 ModelAndView对象,最后又将模型数据通过request对象传输到页面
struts采用值栈存储请求和响应的数据,通过OGNL存取数据