Struts2框架 -- 基础知识+搭建

Struts2框架学习


Struts2是SSH(Struts+Sping+Hibernate)三大框架之一,属于关注数据流程框架,是一款轻量级的MVC流程框架

轻量级:指的是代码量少,运行时占用的资源少

MVC流程框架:指的是支持分层开发,控制数据的流程,从哪来,到哪里去,怎么来,怎么去的一个框架


主要内容,如图:




Struts2内容很多,就像搭建房子之前要搭建支架一样,所以它也被称为金属支架(在程序中表示起支撑作用的通用程序代码)

struts2是struts1与webWork的整合版,相对struts1的优缺点如下:

struts1缺点:

1.struts框架是基于servlet开发的,因此servlet暴露的问题,struts都有

2.struts框架的业务流程是固定的,扩展不方便

3.只支持动态视图JSP展示数据,对现在的SEO不友好

struts2改良:

1.核心基于Filter

2.流程支持动态扩展

3.支持多种动态视图展示数据(JSP、FreeMarker、Volicity)


Servlet的优点:

     1.是mvc的基础,其他框架比如struts1,struts2,webwork都是从servlet基础上发展过来的。

     2.Servlet把最底层的api暴露给程序员,是程序员更能清楚的了解mvc的各个特点

     3.程序员可以对Servlet进行封装。Structs2就是从servlet中封装以后得到的结果。

Servlet的缺点:

     1.在写每一个servlet在web.xml都要做相应的配置。如果有很多servlet,会导致web.xml内容过于繁多。

     2.这样的结构不利于团队分组开发。

     3.在servlet中,doGet方法和doPost方法有HttpServletRequest和HttpServletResponse参数。

       这两个参数与容器相关,要做单元测试的时候,要重新初始化这两个参数.(具有容器依赖性).

     4.如果一个servlet中有很多的方法,则要通过参数传参的形式,分解到每一个方法中。


快速搭建Struts2:

1.使用myeclilpse创建web项目,取项目名为Struts2_test(如下图)


2.准备必要的jar包,copy到lib目录以便项目引用,可以在Apache官网上下载,参考如以下图

3.在src目录下,新建struts.xml,刚开始只是普通的xml,填入以下代码后就成了Struts2框架的核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	
</struts>

4.在web.xml文件中,添加核心调度器的配置,一般都会过滤所有请求路径

  <!-- 配置核心调度器,用于过滤请求路径 -->
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>
  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  	</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>*.jsp</url-pattern>
  </filter-mapping>

5.struts2工作流程



这是一位大神写的:

发送actin请求时,——>利用DefaultActionMapper,进行对URI的获取解析,例如访问哪个类,哪个方法,进行相关信息的解析后,——>Dispatcher(核心调度器)反射创建StrutsActionProxyFactory代理对象工厂,这里在反射创建我们要访问的类时,——>模仿了动态代理,创建了代理对象StrutsActionProxy和扩展对象DefaultActionInvocation,——>扩展对象又创建了我们的目标对象工厂,——>然后反射创建了我们想要访问的目标对象action。——>然后通过调用代理对象,执行扩展对象中的方法,——>执行我们框架默认的18个拦截器,——>反射调用访问action方法,——>获取执行后的结果result,——>最后进行相关界面或者action的指向。

个人觉得确实太麻烦,简单说:

接收到action请求,利用ActionMapper对URL进行解析,例如访问哪个类,哪个方法,进行相关信息的解析后,通过Dispatcher(核心调度器)反射生成ActionProxy代理对象工厂,然后通过各种代理各种反射之后,执行框架默认的18个拦截器,在struts.xml中找到对应的action,执行action指向的类里面的方法,最后进行相关界面或者action的跳转。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值