面试题struts2&springmvc

sevlet理解:
全称:java servelt,是用java编写的服务器端程序,而这些servelt都要实现servlet接口,主要功能是在于交互式的浏览和修改数据
HttpServelet重写doGet、doPost方法或者重写service方法完成请求响应

servlet生命周期:
这个生命周期主要是由javax.servlet.Servlet接口的init、service、和destroy方法表达
servlet启动时,加载servlet生命周期。servlet被服务器调用实例化后,容器运行其init方法,请求达到时运行service方法,service方法自动派遣运行与请求对应的doXXX发放,当销毁时调用destroy方法。
加载servlet的class–>实例化servlet–>调用servlet的init方法—>响应请求(servlet的service方法)—>Servlet容器关闭时(destroy方法)

mvc:model+view+controller
最简单的就是jsp+servlet+javaBean

传统的mvc模式问题:
1、所有的servelt和servlet映射都要配置在web.xml中,如果项目过大,web.xml就会太庞大,并且不能实现模块化管理。
2、servlet的主要功能是接受参数,调用逻辑,跳转页面,比如像其他字符编码、文件上传、等功能也要写在servelt中,不能让servlet功能单一
3、接受参数比较麻烦,不能通过model接收,只能单个接收,接受完后转换疯转model
4、跳转页面方式单一(forward、redirect),并且当我的页面名称发生改变时需要修改Servlet源码。

struts2执行流程、原理
1、客户端发送请求,请过一系列的filter,最后经过StrutsPrepareAndExcuteFilter,然后询问ActionMapper是否调用某个action
2、如果要调用某个acion,actionProxy通过configuration Manager询问框架的配置文件,找到要调用的acion,找到之后会创建一个action invocation实例,然后经过一系列拦截器
面试题struts2&springmvc总结:
1、浏览器发送请求,经过一系列过滤器后,到达核心过滤器(StrutsPreapareAndExcuteFilter)
2、StrutsPreapareAndExcuteFilter通过actionMapper判断当前请求是否需要某个action处理,如果不需要走原来的流程,如果需要把请求交给actionProxy
3、actionProxy通过configuration Manager询问框架配置文件(struts.xml)找到需要调用的action类
4、创建一个action invocation实例,来调用action的对应方法,来获取结果集的name,在调用前后会执行相关拦截器
5、通过结果集的name找到对应的结果来对浏览器进行响应。

struts中的拦截器用来干什么?
java的拦截器是动态拦截action调用的对象,它提供了一种机制,可以使开发者可以定义在一个action执行的前后执行的代码

再通过动态配置方式,可以再执行action的方法前后,加入相关逻辑完成业务。
使用场景:
1、用户登录判断,在执行action的前面,判断是否已经登录,如果没有登录跳转登录界面
2、用户权限的判断,判断是否具有权限,如果没有权限,就给出提示信息
3、操作日志,在执行action前进行日志存储。

springMVC执行流程
面试题struts2&springmvc1、用户发送请求。请求被前段控制器DispatcherServlet捕获
2、对url进行解析,得到请求标识符,然后根据该标识符调用HandlerMapping获得该Handler配置的所有相关对象,以HandlerExecutionChain对象返回
3、根据handler选择合适的HandlerAdapter,提取Request中的数据,填充Handler入参,执行业务逻辑,然后想DispatcherServlet返回一个ModelAndView
4、渲染返回
总结:
核心控制器捕获请求、查找Handler、执行Handler、选择合适的ViewResolver,渲染返回

strtus2和springMVC区别
1、核心控制器不同;
springmvc核心控制器是servlet(DispatcherServlet)
struts2核心控制器是filter(strutsPrepareAndExecuteFilter)
2、控制器实例;springmvc会比struts快一点
springmvc是基于方法,每次调用只是方法不同,更像一个servlet(单例,安全问题会有)
struts是基于对象,每次调用会创建一个action实例
3、参数传递;
springmvc是通过方法的参数进行传递
struts通过值栈(valueStack),自身提供多种参数接收,重量级
4、intercepter(拦截器)实现机制;
struts有自身的拦截器机制,导致配置文件比springmvc大
springmvc有独立的aop
5、处理ajax;
sprimgmvc处理ajax请求直接通过返回数据,方法中使用注解@ResponseBody ,springmvc自动帮我们对象转换成json
struts是通过插件的方式进行处理

spring中两大核心 aop ioc
IOC:控制反转 javabean的创建交给容器
spring:spring发现你service依赖于dao,就给你注入
核心原理:就是工厂模式,容器(map)+反射+配置文件
aop:面向切面编程
使用动态代理的方式,在执行前后或出现异常后作出相关逻辑,主要做事务、权限判断、日志