struts2转springmvcc会代替struts2吗

网上百度 所做记录。
1、spring mvc的入口是servlet,而struts2是filter
filter功能:用户可以改变一个request和修改一个response
Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).
一个filter 包括:
  1. 在servlet被调用之前截获;
  2. 在servlet被调用之前检查
  3. 根据需要修改request头和request数据;
  4. 根据需要修改response头和response数据;
  5. 在servlet被调用之后截获.
通常我们所访问的资源是一个servlet或jsp页面,而jsp其实是一个被封装了的servlet(每个jsp执行前都会被转化为一个标准的servlet,这点若还有不明白的请自己到网上查一下吧),于是我们就可以统一地认为我们每次访问的都是一个Servlet,而每当我们访问一个servlet时,web容器都会调用该Servlet的service方法去处理请求。而在service方法又会根据请求方式的不同(Get/Post)去调用相应的doGet()或doPost()方法,实际处理请求的就是这个doGet或doPost方法。写过servlet的朋友都应该知道,我们在doGet(或doPost)方法中是通过response.getWriter()得到客户端的输出流对象,然后用此对象对客户进行响应。
&&&&&& 到这里我们就应该理解了过滤器的执行流程了:执行第一个过滤器的chain.doFilter()之前的代码——&第二个过滤器的chain.doFilter()之前的代码——&……——&第n个过滤器的chain.doFilter()之前的代码——&所请求servlet的service()方法中的代码——&所请求servlet的doGet()或doPost()方法中的代码——&第n个过滤器的chain.doFilter()之后的代码——&……——&第二个过滤器的chain.doFilter()之后的代码——&第一个过滤器的chain.doFilter()之后的代码。
1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。
3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,
比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),
或者在传入servlet或者 struts的action前统一设置字符集,
或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。。。
拦截器 可通过的是符合条件的action。 拦截器本身是一个普通的Java对象,它能动态拦截Action调用,
Action执行前后执行拦截器本身提供的各种个样的Web项目需求。也可以阻止Action的执行,同时也可以提取
Action中可以复用的部分。
Advice
& +-- AfterAdvice
&&& +-- AfterReturningAdvice
&&& +-- ThrowsAdvice
& +-- BeforeAdvice
&&& +-- MethodBeforeAdvice
& +-- Interceptor
&&& +-- MethodInterceptor
上面是spring代码中Advice继承层次的一个部分快照。从这个就可以看出Interceptor和Advice的关系。Advice是AOP编程中某一个方面(Aspect)在某个连接点(JoinPoint)所执行的特定动作,这个连接点(JoinPoint)可以是自定义的;而Spring中的Interceptor更多关注程序运行时某些特定连接点(属性访问,对象构造,方法调用)时的动作。确切的说,Interceptor的范围更窄一些
2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类
3. 参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
4. 设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。
5. intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。
6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。
浏览: 481 次
来自: 重庆
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'struts2和springMVC的比较(超详细)46
上亿文档资料,等你来发现
struts2和springMVC的比较(超详细)46
把这张图放在这里,我是想说SpringMVC和S;等相同的功能组件(这些由MVC模式本身决定的);为什么SpringMVC会赢得最后的胜利呢?谈几;第一、MVC框架的出现是为了将URL从HTTP的;第二、从设计实现角度来说,我觉得SpringMV;SpringMVC设计思路:将整个处理流程规范化;这个方案实际上涉及到两个方面:;l处理流程规范化――将处理流程
把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器
等相同的功能组件(这些由MVC模式本身决定的)。
为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法:
第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。
第二、从设计实现角度来说,我觉得SpringMVC更加清晰。即使我们去对比Struts2的原理图和SpringMVC的类图,它依然很让人困惑,远没有SpringMVC更加直观:
SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。
这个方案实际上涉及到两个方面:
l 处理流程规范化 ―― 将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来
l 处理流程组件化 ―― 将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式
处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤: l 步骤1―― 对Http请求进行初步处理,查找与之对应的Controller处理类(方法)
――HandlerMapping
l 步骤2―― 调用相应的Controller处理类(方法)完成业务逻
――HandlerAdapter
l 步骤3―― 对Controller处理类(方法)调用时可能发生的异常进行处
――HandlerExceptionResolver
l 步骤4―― 根据Controller处理类(方法)的调用结果,进行Http响应处
――ViewResolver
正是这基于组件、接口的设计,支持了SpringMVC的另一个特性:行为的可扩展性。
第三、设计原则更加明朗。
这条重要的设计原则被写在了Spring官方的reference中SpringMVC章节的起始段: A key design principle in SpringWeb MVC and in Spring in general is the “Open for extension, closed for modification” principle.
并且重点很好地体现在SpringMVC的实现当中,可以扩展,但却不能改变。我曾经扩展过Spring的IOC、AOP功能,这一点SpringMVC应该和Spring一脉相承。
第四、组件化的设计方案和特定的设计原则让SpringMVC形散神聚。
? 神 ―― SpringMVC总是沿着一条固定的逻辑主线运行 形 ―― SpringMVC却拥有多种不同的行为模式 SpringMVC是一个基于组件的开发框架,组件的不同实现体系构成了“形”;组件的逻辑串联构成了“神”。因此,“形散神不散”: SpringMVC的逻辑主线始终不变,而行为模式却可以多种多样。
第五、更加贴合Web发展的趋势,这个更加虚了,不再展开说这个 问题了。
第六、技术上的放缓导致了程序员对Struts2失去了热情,导致SpringMVC依靠自身的努力和Spring的口碑,逐渐显露了自身的优势和特点。
为什么SpringMVC会赢得最后的胜利呢?最后,我们不妨想一想Struts2是怎样流行起来的!
我自己是从Struts1用过来的,后来Struts1的问题很明显了,开源社区出现了很多的MVC框架,最为突出的是Webwork2。
Webwork2探索了一条与传统Servlet模型不同的解决方案,逐渐被大家熟识和理解,不断发展并得到了广大程序员的认可。它以优秀的设计思想和灵活的实现,吸引了大批的Web层开发人员投入它的 怀抱。
Apache社区与Opensymphony宣布未来的Struts项目将与Webwork2项目合并,并联合推出Struts2。
Struts2能够在一个相当长的时间段内占据开发市场主导地位的重要原因在于其技术上的领先优势。而这一技术上的领先优势,突出表现为对Controller的彻底改造:
public class UserController {
private User user
public String execute() {
// 这里加入业务逻辑代码
return &success&;
从上面的代码中,我们可以看到Webwork2 /Struts2对于Controller最大的改造有两点:
? 在Controller中彻底杜绝引入HttpServletRequest或者HttpServletResponse这样
的原生Servlet对象。
? 将请求参数和响应数据都从响应方法中剥离到了Controller中的属性变量。 这两大改造被看作是框架的神来之笔。因为通过这一改造,整个Controller类彻底与Web容器解耦,可以方便地进行单元测试。而摆脱了Servlet束缚的Controller,也为整个编程模型赋予了全新的定义。从引入新的编程元素的角度来说,Webwork2 / Struts2无疑也是成功的。因为在传统Servlet模式中的禁地Controller中的属性变量被合理利用了起来作为请求处理过程中的数据部分。这样的改造不仅使得表达式引擎能够得到最大限度的发挥,同时使得整个Controller看起来更像是一个POJO。因而,这种表现形态被笔者冠以的名称 是:POJO实现模式。POJO实现模式是一种具有革命性意义的模式,因为它能够把解耦合这样一个观点发挥到极致。从面向对象的角度来看,POJO模式无疑也是所有程序员所追求的一个目标。这也就是Webwork2 /Struts2那么多年来经久不衰的一个重要原因。
所以,我们看到第一条原因是Struts2依靠技术上的革新赢得了程序员的青睐。但是,这些年来Struts2在技术革新上的作为似乎步子就迈得比较小。我们可以看到,在JDK1.5普及之后,Annotation作为一种新兴的Java语法,逐渐 被大家熟知和应用。这一点上SpringMVC紧跟了时代的潮流,直接用于请求-响应的映射。而Struts2却迟迟无法在单一配置源的问题上形成突破。 当然,这只是技术革新上的一个简单的例子,其他的例子还有很多。
至少给人的感觉是这样的。在这一点上Struts并不是很沾光,因为Spring的口碑和影响力也客观程度上加深了大家对SpirngMVC是技术领导者的印象。
三亿文库包含各类专业文献、高等教育、各类资格考试、行业资料、struts2和springMVC的比较(超详细)46等内容。 
 springMVC和struts2对比_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 springMVC和struts2对比_计算机软件及应用_IT/计算机_专业资料。...  2页 免费 Struts1和Struts2的区别... 2页 免费 struts1和struts2的详细... 2页 免费 Struts2和Struts1的区别... 3页 免费 Struts2 SpringMVC Gra... 暂...  Spring3_MVC与Struts2.x比较_计算机软件及应用_IT/计算机_专业资料。SpringMVC非常...测试环境说明: 服务器: 4G 内存,至强 3.0 (4 核超线程)CPU,windows 2003 ...  Spring MVC 和 Struts2 的区别: 1. 机制:spring mvc 的入口是 servlet,而 struts2 是 filter(这里要指出,filter 和 servlet 是不同的。以前认为 filter 是 ...  Spring MVC 和 Struts2 的比较虽然说没有系统的学习过 Spring MVC 框架, 但是工作这么长时间, 基本上在 WEB 层使用 的都是 Spring MVC, 自己觉得 Struts2 ...  文章分类: 文章分类:Java 编程 关键字: spring struts ejb 基于 Web 的 MVC framework 在 Java EE 的世界内已是空前繁荣。TTS 网站上 几乎每隔一两个星期就会...  Spring 是一个入侵式的框架 2)下面关于 IOC 的...Spring MVC 模块 D)Spring Web 模块 8)对 Struts...(C) A)init-method 是在最前面执行的 B)init-...  使用springMVC的详细步骤_计算机软件及应用_IT/计算机_专业资料。使用 springMVC ...springMVC 与 struts2 的区别: 1. 机制:spring mvc 的入口是 servlet,而 ...  比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket(二)_互联网_IT/计算机_专业资料。今日推荐 88份文档 2014年全国注册造价工程师 ...博客分类:
我们先来讲讲mvc吧,spring mvc ,struts2,struts 都是mvc框架。
对于现有较成熟的Model-View-Control(MVC)框架而言,其解决的主要问题无外乎下 面几部分: 1.将Web页面中的输入元素封装为一个(请求)数据对象。 2.根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。 3.逻辑处理单元完成运算后,返回一个结果数据对象。 4.将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。 我们先来看看spring mvc 的操作过程。
配置web.xml
&?xml version="1.0" encoding="UTF-8"?&
&web-app xmlns="/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd" version="2.4" id="WebApp_ID"&
&display-name&web-board-backend&/display-name&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&/WEB-INF/service.xml, /WEB-INF/action-servlet.xml&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&servlet-name&action&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&action&/servlet-name&
&url-pattern&*.do&/url-pattern&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&/jsp/login.jsp&/welcome-file&
&/welcome-file-list&
&session-config&
&session-timeout&1440&/session-timeout&
&/session-config&
&/web-app&
action-servlet
&?xml version="1.0" encoding="UTF-8" ?&
&!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"&
&bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/&
&property name="prefix" value="/"/&
&property name="suffix" value=".jsp"/&
&bean id="defaultHandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/&
&bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&
&property name="mappings"&
&prop key="*"&MessageController&/prop&
&/property&
&bean id="MessageController" class="com.app.boardbackend.ui.html.MessageController"&
&property name="methodNameResolver"&
&bean class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"&
&property name="mappings"&
&prop key="list.do"&list&/prop&
&prop key="delete.do"&remove&/prop&
&/property&
&/property&
&property name="messageService"&
&ref bean="messageService"/&
&/property&
上面颜色的必须统一
servlet.xml
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"&
&bean id="messageDAO" class="com.mon.dao.MessageDAOImpl"&&/bean&
&bean id="messageService" class="com.downjoy.mon.service.MessageServiceImpl"&
&property name="messageDAO" ref="messageDAO"/&
配置文件写好了
上面的三个文件可以放到WEB-INF的目录下。
写好配置文件后 我们就可以写java'代码了
package com.downjoy.app.boardbackend.ui.
import java.util.HashM
import java.util.L
import java.util.M
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.web.portlet.ModelAndV
import org.springframework.web.servlet.mvc.multiaction.MultiActionC
import com.downjoy.mon.exception.WebBoardBackendE
import com.downjoy.mon.service.MessageS
import com.downjoy.mon.to.CollectionTO;
import com.downjoy.mon.to.MessageSearchCriteriaTO;
import com.downjoy.mon.to.MessageTO;
import com.yupstudio.lib.webutil.WebStringU
* 留言板后台Controller层
public class MessageController extends MultiActionController {
private static final WebStringUtil webUtil=WebStringUtil.getInstance();
private MessageService messageS
public MessageService getMessageService() {
return messageS
public void setMessageService(MessageService messageService) {
this.messageService=messageS
* 列出留言信息
* @param request
* @param response
* @return ModelAndView
* @throws WebBoardBackendException
public ModelAndView list(HttpServletRequest request, HttpServletResponse response) throws WebBoardBackendException {
Map&String, Object& model=new HashMap&String, Object&();
int pageNo=webUtil.getInt(request, "pageNum");
int pageSize=webUtil.getInt(request, "numPerPage");
String keyword=webUtil.getString(request, "keyword");
MessageSearchCriteriaTO criteria=new MessageSearchCriteriaTO();
criteria.setKeyword(keyword);
criteria.setPageNo(pageNo);
criteria.setPageSize(pageSize);
CollectionTO&MessageTO& col=messageService.ListMessagesByCriteria(criteria);
List&MessageTO& messages=
int pageCount=0;
if(col != null && col.size() != 0) {
messages=col.getList();
pageCount=col.getPageCnt();
pageNo=pageNo & pageCount ? pageCount : pageNo;
model.put("messages", messages);
model.put("pageNo", pageNo);
model.put("pageSize", pageSize);
return new ModelAndView("reply_list", "model", model);
在webRoot 下有一个reply_list.jsp最终数据返回给这个jsp。
这是一个小列子,接下来根据这个例子分析,spring mvc的执行过程。
浏览: 2069 次
来自: 成都
来点分页的讲解 啊
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'目前企业中使用SpringMvc的比例已经远远超过Struts2,那么两者到底有什么区别,是很多初学者比较关注的问题,下面我们就来对SpringMvc和Struts2进行各方面的比较:
1.核心控制器(前端控制器、预处理控制器):对于使用过mvc框架的人来说这个词应该不会陌生,核心控制器的主要用途是处理所有的请求,然后对那些特殊的请求(控制器)统一的进行处理(字符编码、文件上传、参数接受、异常处理等等),spring
mvc核心控制器是Servlet,而Struts2是Filter。
2.控制器实例:Spring Mvc会比Struts快一些(理论上)。Spring Mvc是基于方法设计,而Sturts是基于对象,每次发一次请求都会实例一个action,每个action都会被注入&&&属性,而Spring更像Servlet一样,只有一个实例,每次请求执行对应的方法即可(注意:由于是单例实例,所以应当避免全局变量的修改,这样会产生线程安全问题)。
3.管理方式:大部分的公司的核心架构中,就会使用到spring,而spring mvc又是spring中的一个模块,所以spring对于spring mvc的控制器管理更加简单方便,而且提供了全 注解方式进行管理,各种功能的注解都比较全面,使用简单,而struts2需要采用XML很多的配置参数来管理(虽然也可以采用注解,但是几乎没有公司那样使用)。
4.参数传递:Struts2中自身提供多种参数接受,其实都是通过(ValueStack)进行传递和赋值,而SpringMvc是通过方法的参数进行接收。
5.学习难度:Struts更加很多新的技术点,比如拦截器、值栈及OGNL表达式,学习成本较高,springmvc 比较简单,很较少的时间都能上手。
6.intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring
mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request
response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间 也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
7.spring mvc处理ajax请求,直接通过返回数据,方法中使用注解@ResponseBody,spring mvc自动帮我们对象转换为JSON数据。
本文已收录于以下专栏:
相关文章推荐
Struts2和SpringMVC是比较流行的MVC框架,二者的工作流程大体相似,从下面两张图就可以看出。
SpringMVC工作流程图
图二 
SpringMVC的...
1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr...
个人心得:
springmvc可以精确控制到方法上,controller可以单例开发,Struts2的action则是多例prototype开发,基于类进行拦截请求的。
springmvc的速度一般比...
下面这些东西基本都是我从网上粘贴过来的,没有那么多耐心和时间一个字一个字的敲了,但是基本能表明我选择SpringMVC的思路和原因。
把这张图放在这里,我是想说SpringMVC和Strut...
1.Struts2 restful配置及使用
前面介绍使用Maven构建Struts2时提到下载Struts2的GA完整版,解压后在apps目录里有struts2-rest-showcase...
REST 是英文 Representational State Transfer 的缩写,这个术语由 Roy Thomas Fielding 博士在他的论文《Architectura...
和朋友共同开发一个小项目中用到了RESTful风格,在这里总结一下。
首先在Struts2工程中导入所需的jar包
ezmorph-1.0.3.jar
json-lib-2.1-jdk1...
使用 Struts 2 开发 RESTful 服务
从 V2.1 开始,Struts 2 开始提供 Convention 插件,它允许根据“约定”来搜索 Action,以及管理 Ac...
从 V2.1 开始,Struts 2 开始提供 Convention 插件,它允许根据“约定”来搜索 Action,以及管理
Action 和 Result 的映射。另外,Struts 2.1 还...
参考资料:/developerworks/cn/java/j-lo-struts2rest/
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 struts springmvc区别 的文章

 

随机推荐