SpringMVC与Struts2对比
一、核心控制器
1、Struts2的核心控制器是StrutsAndPrepareExcuteFilter,本质是Filter
<!--配置Struts2核心控制器 -->
<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>
2、SpringMVC的核心控制器是DispatcherServlet,本质是Servlet
<!-- 配置springmvc前端控制器
配置方式和struts的前端控制器类似
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置初始化参数,指明springmvc配置文件位置
默认会加载web-inf/servletname-servlet.xml
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 配置Servlet加载时机,服务器启动时加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
/*拦截所有请求 包括jsp html css js jpg
/拦截除了jsp外的所有请求 ,包括html css js jpg
但可以通过配置<mvc:resources>
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
二、后端控制器
1、Struts2的后端控制器是Action类
编写Action类的三种方式,实现Action接口,继承AbstractAction类,普通的POJO类,一般采用继承AbstractAction类的方式
2、SpringMVC的后端控制器是Controller类
采用注解开发,编写普通的POJO类即可,在类上面加上@Controller注解,即可。
三、后端控制器中方法
1、Struts2 Action中的控制业务方法必须是无参的,返回值类型是String或者void、
2、SpringMVC在Controller中的方法,可以使无参的也可以是有参的,返回值类型有三种ModelAndView、void以及String
四 开发方式
1、Struts2开发方式主要是采用配置文件开发,也可采用注解开发。用配置文件开发时,开发相对复杂繁琐,配置文件较多,但相应的维护性较好.
2、SpringMVC实际工作中主要采用注解开发,开发简便高效,但维护性相对较差。
@Controller用于标识该类为Controller类,@RequestMapping(“”)方法的访问路径
五、核心配置文件
1、Struts2的核心配置文件是struts2.xml。里面主要配置了,struts2常量,自定义拦截器、全局结果视图、Action类的访问路径以及结果视图的配置。
2、SpingMVC的核心配置文件是springmvc.xml。里面主要配置了注解扫描、注解驱动注册、视图解析器、异常处理类、文件上传处理类、类型转换器以及自定义拦截器等。
六、参数封装
1、Strust2参数封装是通过拦截器实现的,主要有三种封装方式,属性驱动、模型驱动、request的API以及ServletActionContext的API,数据传递主要通过值栈的形式,底层实现依然是request
2、SpringMVC的数据封装,类似于Struts2的属性驱动,只不过struts2的属性驱动定义的变量时全局变量,SpringMVC定义的变量时形参,也即局部变量,另外可以通过@RequestParam注解来解决表单name属性和参数属性名不一致的情况。
七、异常处理机制
1、Struts2异常处理是,首先定义自定义异常,之后在struts.xml文件中配置全局结果视图和全局异常来实现。
<!-- 全局逻辑视图 -->
<global-results>
<result name="sysException">/WEB-INF/pages/error.jsp</result>
<result name="error">/WEB-INF/pages/error.jsp</result>
</global-results>
<!-- 全局异常映射 -->
<global-exception-mappings>
<exception-mapping result="sysException" exception="cn.itcast.jk.exceptioin.SysException"/>
<exception-mapping result="error" exception="java.lang.Exception"/>
</global-exception-mappings>
2、SpringMVC的异常处理是,首先定义自定义异常,之后编写异常处理器,接着配置异常处理器。
<!-- 异常处理器 -->
<bean id="handlerExceptionResolver" class="cn.lx.springmvc.exception.MyExceptionHandlerResolver"/>
八、拦截器机制
1、Struts2
拦截器编写有三种方式,实现Interceptor接口,继承AbstractInterceptor,以及继承MethodFilterInterceptor,一般采用继承AbstractInterceptor的方式。
拦截器只能处理前置拦截,也即进入后端控制器的拦截
配置方式不同,struts2的拦截器是配置在包里面的,既可以配置全局拦截器也可以针对不同的Action类配置不同的拦截器。
2、SpringMVC
拦截器是实现HandlerInterceptor接口。
拦截器既可以实现进入后端控制钱的之前的拦截、后端控制钱处理完进入视图解析前的拦截以及视图解析处理之后的拦截,拦截方式更佳灵活。
一般都是配置全局拦截器,配置方式没有struts2灵活。
九 、图片上传与下载
1、Struts2
图片上传,只需要在Action类中声明一个和页面文件域name属性名称一致的File成员变量,上传文件的信息就会自动封装进去,操作灵活。
struts2的文件上传由于采用配置文件的方式,操作方便灵活可操作性更多。可以根据不同的业务配置不同的限制文件大小、文件格式、文件扩展名,以及很完善的错误信息提醒。
2、SpringMVC
图片上传,需要配置图片上传处理器,只能配置全局文件大小,不能针对不同业务采取不同配置,同时没有不能限制图片类型以及扩展名,没有完善的错误处理机制。