1、Struts1的运行原理前端
在启动时经过前端总控制器ActionServlet加载struts-config.xml并进行解析,当用户在jsp页面发送请求被struts1的核心控制器ActionServlet接收,ActionServlet在用户请求时将请求参数放到对应的ActionForm对象中的成员变量中,而后ActionServlet则会根据struts-config.xml中的映射关系找到相应的Action中的方法,将对应的ActionForm一并传给这个Action中的方法里,而后执行相应的业务逻辑操做,最后就根据ActionMapping的findforward方法返回一个ActionForward,以后在struts-config.xml中找到与之对应的forward标签,根据它的配置路径找到对应的jsp页面。web
2、Struts2的运行原理spring
1、tomcat 启动的时候会加载 web.xml 、核心控制器FilterDispatcher 会加载并解析 struts.xml
sql
2、客户端会发送一个请求到 action 、FilterDispatcher 会根据后缀名进行拦截数据库
3、FilterDispatcher根据 struts.xml 的配置文件信息 找到 某个action 对应的某个类里的指定方法浏览器
4、执行相关的业务逻辑最后返回 一个Stringtomcat
5、<action/> 里配置 <result/> name的属性值与返回的String 进行匹配,跳转到指定的jsp 页面安全
3、Spring MVC运行原理session
整个处理过程从一个HTTP请求开始:mvc
1.Tomcat在启动时加载解析web.xml,找到spring mvc的前端总控制器DispatcherServlet,而且经过DispatcherServlet来加载相关的配置文件信息。
2.DispatcherServlet接收到客户端请求,找到对应HandlerMapping,根据映射规则,找到对应的处理器(Handler)。
3.调用相应处理器中的处理方法,处理该请求后,会返回一个ModelAndView。
4.DispatcherServlet根据获得的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户。
4、Struts1.x与Struts2.x的区别
Struts 2以WebWork为核心,
采用拦截器的机制来处理用户的请求,struts1严重依赖于servletAPI,
属于侵入性框架,struts2不严重依赖于servletAPI,属于非侵入型框架。
线程模型方面:
Struts1的Action是单实例的,
一个Action的实例处理全部的请求。
Struts2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),
没有线程安全方面的问题
封装请求参数:
Struts1中强制使用ActionForm对象封装请求的参数。
Struts2能够选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
struts1的前端总控制器(核心总控制器)为ActionServlet,
struts2的前端总控制器(核心总控制器)为FilterDispather
5、Spring MVC、struts1和struts2区别
1.spring mvc 单例 非线程安全
struts1单例 非线程安全
struts2线程安全对每一个请求都产生一个实例
2.spring mvc的入口是servlet,而struts2是filter
spring 的前端总控制器为 DispatcherServlet
struts2 的前端总控制器为 FilterDispatcher
struts1 的前端总控制器为 actionServlet
3. 参数传递:struts是在接受参数的时候,
能够用属性来接受参数,这就说明参数是让多个方法共享的。
springmvc 用方法来接受参数
4.spring mvc是基于方法的设计,而sturts是基于类
6、Struts2中result中的type类型
1.dispatcher:它是默认的,用来转向页面,一般处理JSP
2.redirect:将用户重定向到一个已配置好的URL
3.redirectAction:将用户重定向到一个已定义好的action
4.chain:将action和另一个action连接起来
5.freemarker:呈现Freemarker模板
6.httpheader:返回一个已配置好的HTTP头信息响应
7.stream:向浏览器发送InputSream对象对下载的内容和图片很是有用
8.velocity:呈现Velocity模板
9.xslt:该XML能够经过XSL模板进行转换
10.plaintext:显示原始文件内容,例如文件源代码
7、Struts2标签
首先须要引用 <%@taglib prefix="s" uri="/struts-tags"%>
1.<s:if></s:if> 判断标签 后面可跟 <s:else>
2.<s:iterator> </s:iterator> 迭代标签
3.<s:include></s:include> 引入标签 能够把一个JSP页面或者servlet引入一个页面中
4.<s:property></s:property> 输出标签
5.<s:set></s:set> 标签赋予变量一个特定范围内的值
6.<s:form></s:form> 表单标签
7.<s:testarea></s:textarea> 文本域标签
8.<s:select></s:select> 下拉标签
9.<s:url></s:url> 声明一个url的路径
最经常使用的是:
判断<s:if></s:if>
循环<s:iterator></s:terator>
输出<s:property></s:property>
8、SSI整合
1、Action继承于Actionsupport
2、引入struts-spring-plugin.jar包,从而完成struts和spring的整合
3、在struts2的action中注入service,保证service的名字和配置文件中的一致,并生成get,set方法
4、Dao层继承于SqlMapClientDaoSupport
5、在dao层的配置文件中注入sqlMapClient
9、SSH整合
1、Action继承于ActionSupport
2、引入struts-spring-plugin.jar包,从而完成struts和spring的整合
3、在struts2的action中注入service,保证service的名字和配置文件中的一致,并生成get,set方法
4、Dao层继承于hibernateDaoSupport
5、在dao层的配置文件中注入sessionFactory
Hibernate中的两大配置文件:
*.hbm.xml:主键生成策略,映射关系,一对多,一对一的关系
Hibernate.cfg.xml:方言(用哪一个数据库),数据库链接信息,包含*.hbm.xml内容,映射文件,也能够配事务
10、Spring MVC整合
1.首先,要在web.xml里面配置SpringMVC的核心控制器,DispatcherServlet,对指定的后缀请求进行拦截。
2.Controller层要加 @Controller注解,代表该类是MVC的控制层。
3.建立Service接口,给接口加上注解 @Component或者 @Service 代表这是Service业务处理层。
4.在Controller层声明Service变量(属性),给变量(属性) 加上@Autowired注解,经过自动绑定机制将Service注入到Controller。(注:@Autowired默认是ByType,若是想根据属性名注入,那么就再加上注解@Resource(name="属性名"))。
5.在Controller层的方法上加上注解@RequestMapping("requestAddress") 代表该方法的请求地址。
6.Dao层要加上注解 @Repository 代表这是数据库持久层。
7.一样将dao实例注入到service层中。
8.配置视图解析器 "InternalResourceViewResolver",对处理后的跳转进行统一配置。