barriers / 阅读 / 详情

跪解:ssh框架的基本原理?

2023-08-22 07:15:31
TAG: 原理 框架
共4条回复
gitcloud

Struts工作原理

MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:

Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,

视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。

控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。

模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。

流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。

核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。

Struts优缺点

优点:

1.开源软件,能更深入的了解其内部实现机制。

2.Taglib标记库,灵活动用,能大大提高开发效率。

3.页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

4. 提供Exception处理机制 .

5. 数据库链接池管理

6. Struts 的Action必需是thread-safe方式,它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。

缺点:

Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。

Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。

ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)

Spring的原理和优点

Spring真正的精华是它的loc模式实现的BeanFactory和AOP,它自己在这个基础上延伸的功能有些画蛇添足。

Spring

它是一个开源的项目,而且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的 接口,采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等

优点

a. Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。

b. Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。

c. 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。

d. 通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。

e. Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。

f. 使用Spring构建的应用程序易于单元测试。

g. Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。

h. Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。

i. Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。

Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。

缺点:使用人数不多、jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器

Hibernate的原理和优点。

 Hibernate使用了J2EE架构中的如下技术:JDBC、JTA、JNDI。其中JDBC是一个支持关系数据库操作的一个基础层;它与JNDI和JTA一起结合,使得Hibernate可以方便地集成到J2EE应用服务器中去。   在这里,我们不会详细地去讨论Hibernate API接口中的所有方法,我们只简要讲一下每个主要接口的功能,如果你想了解得更多的话,你可以在Hibernate的源码包中的net.sf.hibernate子包中去查看这些接口的源代码。下面我们依次讲一下所有的主要接口:   核心接口   以下5个核心接口几乎在任何实际开发中都会用到。通过这些接口,你不仅可以存储和获得持久对象,并且能够进行事务控制。   

Session接口   Session接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。  

SessionFactory 接口  这里用到了一个设计模式――工厂模式,用户程序从工厂类SessionFactory中取得Session的实例。   令你感到奇怪的是SessionFactory并不是轻量级的!实际上它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个SessionFactory。 SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。   

Configuration 接口  Configuration接口的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。     

Query和Criteria接口 Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。   Criteria接口与Query接口非常类似,它允许你创建并执行面向对象的标准化查询。 值得注意的是Query接口也是轻量级的,它不能在Session之外使用。   

Callback 接口 当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback接口会通知Hibernate去接收一个通知消息。一般而言,Callback接口在用户程序中并不是必须的,但你要在你的项目中创建审计日志时,你可能会用到它。以下是它的策略接口:

· 主键的生成 (IdentifierGenerator 接口)   

· 本地SQL语言支持 (Dialect 抽象类)   

· 缓冲机制 (Cache 和CacheProvider 接口)   

· JDBC 连接管理 (ConnectionProvider接口)   

.事务管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口)   

· ORM 策略 (ClassPersister 接口)   

· 属性访问策略 (PropertyAccessor 接口)   

· 代理对象的创建 (ProxyFactory接口)   

Hibernate为以上所列的机制分别创建了一个缺省的实现,因此如果你只是要增强它的某个策略的功能的话,只需简单地继承这个类就可以了,没有必要从头开始写代码。

Hibernate运行在两种环境下:可管理环境和不可管理环境   

· 可管理环境――这种环境可管理如下资源:池资源管理,诸如数据库连接池和,还有事务管理、安全定义。一些典型的J2EE服务器(JBoss、Weblogic、WebSphere)已经实现了这些。   

· 不可管理环境――只是提供了一些基本的功能,诸如像Jetty或Tomcat这样的servlet容器环境。

优点:

Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。

Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。

Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Hibernate可以应用在任何使用JDBC的场合。

Hibernate 使用 Java 反射机制 而不是字节码增强程序来实现透明性。

Hibernate 的性能非常好,因为它是个轻量级框架。 映射的灵活性很出色。

它支持各种关系数据库,从一对一到多对多的各种复杂关系。

缺点:它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)。

让我再列一次我已经列n次的框架结构:

传统的架构:

1) Session Bean <-> Entity Bean <-> DB

为了解决性能障碍的替代架构:

2) Session Bean <-> DAO <-> JDBC <-> DB

使用Hibernate来提高上面架构的开发效率的架构:

3) Session Bean <-> DAO <-> Hibernate <-> DB

就上面3个架构来分析:

1、内存消耗:采用JDBC的架构2无疑是最省内存的,Hibernate的架构次之,EB的架构1最差。

2、运行效率:如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用Batch语句,调整PreapredStatement的Batch Size和Fetch Size等参数,以及在必要的情况下采用结果集cache等等。而一般情况下程序员是做不到这一点的。因此Hibernate架构表现出最快的运行效率。EB的架构效率会差的很远。

3、开发效率:在有JBuilder的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,Hibernate最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人,JDBC次之,而EB架构很可能会失败。

真可
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!
看官方网站吧,或者看满江红开源吧,网址:
http://wiki.r*****.com/confluence/display/RSTEAM/Home
coco

  Struts工作原理

  MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:

  Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的工作原理,

  视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库: Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。

  控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充 Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。最后动作类把控制权传给后续的JSP 文件,后者生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。

  模型:模型以一个或多个java bean的形式存在。这些bean分为三类:Action Form、Action、JavaBean or EJB。Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用Java Bean或EJB等。

  流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传至指定名称的ActionBean,由ActionBean完成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的FormBean名称和ActionBean名称,这些在Struts-config.xml中配置。

  核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。

  Struts优缺点

  优点:

  1.开源软件,能更深入的了解其内部实现机制。

  2.Taglib标记库,灵活动用,能大大提高开发效率。

  3.页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

  4. 提供Exception处理机制 .

  5. 数据库链接池管理

  6. Struts 的Action必需是thread-safe方式,它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。

  缺点:

  Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。

  Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。

  ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)

  Spring的原理和优点

  Spring真正的精华是它的loc模式实现的BeanFactory和AOP,它自己在这个基础上延伸的功能有些画蛇添足。

  Spring

  它是一个开源的项目,而且目前非常活跃;它基于IoC(Inversion of Control,反向控制)和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的 接口,采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等

  优点

  a. Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。

  b. Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。

  c. 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。

  d. 通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。

  e. Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。

  f. 使用Spring构建的应用程序易于单元测试。

  g. Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。

  h. Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。

  i. Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。

  Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。

  缺点:使用人数不多、jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器

  Hibernate的原理和优点。

  Hibernate使用了J2EE架构中的如下技术:JDBC、JTA、JNDI。其中JDBC是一个支持关系数据库操作的一个基础层;它与JNDI和JTA一起结合,使得Hibernate可以方便地集成到J2EE应用服务器中去。   在这里,我们不会详细地去讨论Hibernate API接口中的所有方法,我们只简要讲一下每个主要接口的功能,如果你想了解得更多的话,你可以在Hibernate的源码包中的net.sf.hibernate子包中去查看这些接口的源代码。下面我们依次讲一下所有的主要接口:   核心接口   以下5个核心接口几乎在任何实际开发中都会用到。通过这些接口,你不仅可以存储和获得持久对象,并且能够进行事务控制。

  Session接口   Session接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。

  SessionFactory 接口  这里用到了一个设计模式――工厂模式,用户程序从工厂类SessionFactory中取得Session的实例。   令你感到奇怪的是SessionFactory并不是轻量级的!实际上它的设计者的意图是让它能在整个应用中共享。典型地来说,一个项目通常只需要一个SessionFactory就够了,但是当你的项目要操作多个数据库时,那你必须为每个数据库指定一个SessionFactory。 SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。

  Configuration 接口  Configuration接口的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。

  Query和Criteria接口 Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。   Criteria接口与Query接口非常类似,它允许你创建并执行面向对象的标准化查询。 值得注意的是Query接口也是轻量级的,它不能在Session之外使用。

  Callback 接口 当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback接口会通知Hibernate去接收一个通知消息。一般而言,Callback接口在用户程序中并不是必须的,但你要在你的项目中创建审计日志时,你可能会用到它。以下是它的策略接口:

  · 主键的生成 (IdentifierGenerator 接口)

  · 本地SQL语言支持 (Dialect 抽象类)

  · 缓冲机制 (Cache 和CacheProvider 接口)

  · JDBC 连接管理 (ConnectionProvider接口)

  .事务管理 (TransactionFactory, Transaction, 和 TransactionManagerLookup 接口)

  · ORM 策略 (ClassPersister 接口)

  · 属性访问策略 (PropertyAccessor 接口)

  · 代理对象的创建 (ProxyFactory接口)

  Hibernate为以上所列的机制分别创建了一个缺省的实现,因此如果你只是要增强它的某个策略的功能的话,只需简单地继承这个类就可以了,没有必要从头开始写代码。

  Hibernate运行在两种环境下:可管理环境和不可管理环境

  · 可管理环境――这种环境可管理如下资源:池资源管理,诸如数据库连接池和,还有事务管理、安全定义。一些典型的J2EE服务器(JBoss、Weblogic、WebSphere)已经实现了这些。

  · 不可管理环境――只是提供了一些基本的功能,诸如像Jetty或Tomcat这样的servlet容器环境。

  优点:

  Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。

  Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。

  Hibernate不能用来直接和Entity Bean做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,Hibernate也是做为JDBC的替代者出现的,而不是Entity Bean的替代者出现的,

  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

  Hibernate可以应用在任何使用JDBC的场合。

  Hibernate 使用 Java 反射机制 而不是字节码增强程序来实现透明性。

  Hibernate 的性能非常好,因为它是个轻量级框架。 映射的灵活性很出色。

  它支持各种关系数据库,从一对一到多对多的各种复杂关系。

  缺点:它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)。

  

贝贝

...要了解这个你还是先看看控制反转的原理

相关推荐

java 请问下SpringMVC中Spring的主要工作原理是什么?是怎么工作的?工作流程?

SpringMVC和spring是两个概念,不要搞混了
2023-08-13 03:08:202

请问各位大师:spring以及spring的MVC执行流程和执行原理分别是什么?

http://blog.csdn.net/itshow/article/details/368960
2023-08-13 03:08:393

spring mvc 常用注解详解

前言 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。 Spring mvc 介绍 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发 image.png spring mvc 常用注解详解 @Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 等一些注解用以定义请求URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。其标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。此外我们还需要将controller注册到spring里 @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径,作用于方法上,表明该处理器的请求地址=父路径+方法上url+method,其拥有6个属性 1、 value, method;定义处理器访问的具体体质 value: 指定请求的实际地址,指定的地址可以是URI Template 模式; method: 指定请求的method类型, GET、POST、PUT、DELETE等; 2、consumes,produces 定义处理器内容类型 consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html; produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回; 3、params,headers 定义处理器处理类型 params: 指定request中必须包含某些参数值,才让该方法处理! headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。 @PathVariable 用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如: @requestParam @requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。 @ResponseBody 作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json等)使用; @RequestBody 该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。 spring mvc 拦截器配置 preHandle:预处理回调方法,返回值:true表示继续流程,false表示流程中断(如登录检查失败),不会继续续调用其他的拦截器或处理器,此时我们需要通过response来产生响应; postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。 afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。 spring mvc 静态资源放问配置 image.png spring mvc 文件上传 前端 后端 spring mvc 工作流程详解 image.png 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、 DispatcherServlet调用HandlerAdapter处理器适配器。 5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。 6、 Controller执行完成返回ModelAndView。 7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。 8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。 9、 ViewReslover解析后返回具体View。 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。 11、 DispatcherServlet响应用户。 如果你也对Java架构比如分布式、微服务、源码分析、性能优化、高并发高可用等技术感兴趣可以在手机上面私信我,回复「架构」二字即可免费领取一套价值3880的架构资料哦。
2023-08-13 03:10:041

servlet是怎么把数据和视图进行绑定的

一、SpringMVC作用View+Controller 视图与控制器之间的交互二、SpringMVC搭建步骤1.导入spring-web spring-mvc包2.配置web.xml(1.配置核心控制器DispatchServlet 2.初始化加载spring.xml)3.配置spring.xml(注解包、配置视图解析器(前缀后缀)4.编写Controller控制器类(1.响应URL 2.匹配对应方法 @Controller @RequestMapping @ResponseBody)5.实体类、JSP页面 三、SpringMVC工作原理1.HTTP请求进入web.xml,匹配对应的DispatchServlet2.DispatchServet,根据请求的URL和信息,匹配对应处理器(Controller),HandelMapping.(RequestMapping(""))3.处理器处理完业务层后,将数据封装到ModelAndView中。4.DispatchServlet根据ModelAndView中的模型数据和视图路径,调用ViewResolver进行数据绑定和真实路径跳转。四、SpringMVC的RequestMapping的用法1.用在类上,代表每个方法都有固定的前缀 @RequestMapping("/user")2.用在方法上,代表各个方法的响应路径3.方法形参上@RequestParam("id") 参数的值4.方法形参上@ModelAttribute("user") 实体类5.回调HttpServletRequest,HttpServeltResponse对象6.REST风格参数 @RequestMapping("/user/{action}/{id})@PathVariable("action")五、SpringMVC的响应传值ModelAndView的生命周期在一个request中1.转发:默认return "";return new ModelAndView("","key",value);2.重定向return "redirect:"return "redirect:" 使用session/context 传值3.json数据@ResponseBody六、Spring整合SpringMVC1.数据库创建2.实体类 com.sys.pojo User3.Dao层接口 com.sys.dao getUser4.Mybatis映射文件 com.sys.dao.mapper UserMapping.xml5.Service接口 com.sys.service UserService getUser6.ServiceImpl 实现类 com.sys.service.impl UserServiceImplprivate UserDao userDao7.Controller层 com.sys.controller UserControllerprivate UserService userService;8.配置web.xml(加载springmvc和spingIOC容器)(1.加载springmvc文件 2.配置DispatchServlet 3.context加载spring-*.xml 4.过滤器 5.监听 6.静态资源拦截器 7.异常404)9.web层:springmvc-web.xml(1.注解包 2.json 3.视图解析器 )service层:sping-service.xml (1.注解包 2.事务控制 3.AOP建议)dao层:spring-dao.xml(1.属性集文件 2.数据源 3.sqlSessionFactory(加载Mybatis核心控制文件和映射文件))、4.扫描Dao层注解包,根据映射xml生成Dao层实现类10.Spring+SpringMVC+Mybatis的依赖包11.log4j、jdbc属性集文件 注意:一、代码缓存问题1.html、js、JSP等缓存 浏览器缓存 清除2.java文件、xml配置文件 tomcat缓存清空tomcat部署应用,clear3.class文件未解析 eclipse缓存 project-clean
2023-08-13 03:10:151

spring是怎样管理springMVC的?

在Spring框架中,Spring MVC是基于Servlet API的MVC框架。Spring MVC的核心思想是将应用程序分成三个部分:模型(Model)、视图(View)和控制器(Controller)。在Spring MVC中,控制器负责处理HTTP请求并返回HTTP响应。控制器通过模型将数据传递给视图,然后视图负责将数据渲染成HTML响应。Spring框架提供了一个DispatcherServlet,它是一个Servlet,作为Spring MVC的前端控制器,用于管理控制器的生命周期和处理HTTP请求的分发。当客户端发送请求时,请求首先到达DispatcherServlet,然后DispatcherServlet将请求分派给适当的控制器。控制器处理请求并返回ModelAndView对象,该对象包含要渲染的视图名称和模型数据。然后DispatcherServlet根据视图名称调用视图解析器,解析器将找到视图并渲染响应。Spring框架使用了许多注解和XML配置来管理Spring MVC。在注解方面,@Controller和@RestController注解用于标记控制器类,@RequestMapping注解用于映射请求路径和处理方法。在XML配置方面,可以使用Spring的XML配置文件来配置DispatcherServlet、视图解析器和其他Spring MVC组件。
2023-08-13 03:10:271

最近面试问我用过什么框架,我说spring springmvc,经常被问到什么是springmvc

SpringMvc是spring的一个模块 基于MVC的一个框架 无需中间整合层来整合 SpringMvc整个的执行流程:1、发起请求到前端控制器(DispatcherServlet )2、前端控制器请求HandlerMapping查找Handler(可以根据xml、注解进行查找)3、处理器映射器HandlerMapping向前端控制器DispatcherServlet 返回Handler4、前端控制器DispatcherServlet 调用处理器适配器HandlerAdapter 执行Handler5、处理器适配器HandlerAdapter 执行Handler6、Handler执行完给处理器适配器返回ModelAndView7、处理器适配器向前端控制器返回ModelAndView (ModelAndView 是SpringMvc的底层对象 包括model和view)8、前端控制器请求视图解析器去解析视图根据逻辑视图名解析成真正的视图(jsp)9、视图解析器向前端控制器返回view10、前端控制器进行视图渲染视图渲染将模型数据(模型数据在ModelAndView对象中)填充到request域11、前端控制器向用户响应结果
2023-08-13 03:10:511

二、SpringMVC请求处理过程

前面一篇文章我们已经分析过了SpringMVC的初始化流程( https://www.jianshu.com/p/b254a45612e8 ),现在我们继续探究一下SpringMVC的请求处理过程; 首先复习一下,Spring基于Servlet实现的类的继承结构,有了继承结构图,我们就能更好的分析其原理 如你所知,HttpServlet类中有处理请求的doGet(), doPost(), service()等方法,如下图所示 有了HttpServlet的成员,我们再来看看它具体的实现,下面是HttpServlet接口的部分源码 关键部分都已经在源码中给出说明 从源码可知,FrameworkServlet对部分不同类型的请求进行了实现,那么就来看看FrameworkServlet的源码 从FrameworkServlet源码可知, doGet(), doPost(),doDelete(), doPut()等方法都调用了该类的processRequest()方法;而这个processRequest()方法最重要的就是doService()方法, 而doService()方法是由其子类DispatcherServlet实现的,所以我们不得不去看看DispatcherServlet的源码了; 至此,我们才到了DispatcherServlet处理请求的核心方法了, 至于doDispatch()方法,究竟是怎么处理的呢? 我们继续探究,先贴出doDispatch()的源码 这里借用松哥大佬的一张流程图,来详细总结一下doDispatch的流程, 原文链接: https://blog.csdn.net/u012702547/article/details/115176519?spm=1001.2014.3001.5501 未完待续
2023-08-13 03:11:001

Spring运行原理

的。Struts本身就是 MVC 在这里负责将用户数据传人业务层,以及 将业务层处理的结果返回给用户,此系统属于较简单WEB应用,采用了OpenSessionInView模式处理LazyLoad问题,这样我们可以在用户视图中使用 get,set方法来方便地获取关联对象。为了处理庞大的Action和ActionForm问题,在此我门准备使用DynaActionForm (DynaValidatorForm)和DispatchAction以及 动态验证框架 来解决。及使用Tile来解决框架问题 。使用自定义标签处理分页和身份验证问题。2 Spring Spring Framework最得以出名的是与Hibernate的无缝链接,虽然Spring 对Hibernate提供了90%以上的封装,使我们不必去关心Session 的建立,关闭,以及事务使我们能够专心的关注业务逻辑。但是一些特殊情况如 有时需要Query以及Criteria 对象,分页等,Spring不能给我们提供支持,总不能每次都在你的DAO上写个HibernateCallBackup()吧?Spring的作用不是把Hibernate再封装一层,而是让你接触不到Hibernate的API,而是帮助你管理好Session和Transaction。在这里解决方法是:首先 写一个IBase 的接口,和一个BaseDao的实现。在实现中仿照HibernateTemplate,将其功能一一实现,同时考虑到Spring 未能支持的地方,我们不得已只好自己来管理Session,因此加入public Session openSession(),public Query getQuery(String sql),public Criteria getCriteria(Class clazz),以及分页的方法。 然后为每一个Entity 都建立继承于以上类的IEntity,与EntityDao。这里可以根据需求对Entity加入特殊的方法实现,如 在 StudentsDao.java 中加入类似用户身份验证等。以上就是数据访问层。接下来在Service层中通过对dao的引用完成业务逻辑方法。在下面的例子中我们分别为学生模块,教师模块,管理员模块构建Service层,StudentsServiceImpl,TeachersServiceImpl,AdminServiceImpl。3 Hibernate 有了Spring的封装,我们要对Hibernate做的就是正确实现对象关系的映射。由于此处处于系统的最底层,准确无误的实现对象之间的关联关系映射将起着至关重要的作用。 总之,理解了Struts,Spring,Hibernate地原理以及之间的关系之后,剩下的工作就如同在以Spring为核心的Struts为表现的框架中堆积木。
2023-08-13 03:11:092

spring mvc的作用是什么?

Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是使用内置的SpringWeb框架还可以是Struts这样的Web框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Page技术、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Lifecycle for overriding binding, validation, etc,易于同其它View框架无缝集成,采用IOC便于测试。它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书。MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,C将V与M分开构成了MVC ,不针对MVC的实现原理进行讲解,而是探讨实践中如何从应用SSH, 到Struts+Spring+Hibernate的演化过程。在使用Spring MVC 做java Web 项目时,乱码问题时常都会出现,解决方法也不尽相同,有简单也有复杂的;如果加入了Spring框架之后就不一样了,可以采用Spring框架自带的过滤器CharacterEncodingFilter,这样可以大大减轻了我们的工作量,即简单方便又容易理解。
2023-08-13 03:11:201

springMVC运行机制是什么样的

这个是你需要的吗?如果满意请采纳,谢谢。
2023-08-13 03:11:391

SpringMVC的拦截器和过滤器的区别与联系

1、首先要明确什么是拦截器、什么是过滤器1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。 谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts2中称为拦截器栈 Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。 1.2. 拦截器的实现原理: 大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。1.3 什么是过滤器过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:①以常规的方式调用资源(即,调用servlet或JSP页面)。②利用修改过的请求信息调用资源。③调用资源,但在发送响应到客户机前对其进行修改。④阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。1.4 Servlet过滤器的基本原理在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。例如,某网站里有提交“修改的注册信息”的网页,当用户填写完修改信息并提交后,服务器在进行处理时需要做两项工作:判断客户端的会话是否有效;对提交的数据进行统一编码。这两项工作可以在由两个过滤器组成的过滤链里进行处理。当过滤器处理成功后,把提交的数据发送到最终目标;如果过滤器处理不成功,将把视图派发到指定的错误页面。2、拦截器与过滤器的区别 : 1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。2. 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次拦截器的代码实现(以struts2为例):1、在xml文件中如何定义拦截器<interceptors><interceptor name="filterIPInterceptor"class="com.xxxx.web.FilterIPActionInterceptor" /><interceptor-stack name="filterIPStack"><interceptor-ref name="defaultStack" /><interceptor-ref name="filterIPInterceptor" /></interceptor-stack></interceptors>2、怎么遍别写自定义拦截器 public class FilterIPActionInterceptor extends AbstractInterceptor{/** 日志控制. */private final Log log = LogFactory.getLog(getClass());/*** @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)*/@Override@SuppressWarnings("unchecked")public String intercept(ActionInvocation invocation) throws Exception{String result = null;// 获得当前方法名.String methodName = invocation.getInvocationContext().getName();String currIp = null;try{if (invocation.getAction() instanceof PortletAction){PortletAction action = (PortletAction) invocation.getAction();currIp = action.getRequest().getRemoteAddr();}String ip = ApplicationResource.getHotValue("ALLOW_CACHE_IP");if (StringUtils.isBlank(ip) || StringUtils.isBlank(currIp)){log.error("允许刷新的IP不存在或当前请求的IP非法.");throw new NoAllowIPException();}else{String[] ips = ip.split(",");boolean errorIp = true;for (String s : ips){if (s.equals(currIp))errorIp = false;}// 判断IPif (errorIp)throw new NoAllowIPException();}result = invocation.invoke();//调用被拦截的方法}catch (Exception e){log.error("异常类名:" + invocation.getAction().getClass());log.error("异常方法:" + methodName, e);throw e;}return result;}}3、怎么编写过滤器1、在web.xml里面配置自定义的拦截器<filter><filter-name>Redirect Filter</filter-name><filter-class>com.xx.filter.RedirectFilter</filter-class></filter><filter-mapping><filter-name>Redirect Filter</filter-name><url-pattern>/xx/xx/*</url-pattern></filter-mapping>2、如何编写自定义的拦截器public class RedirectFilter implements Filter {public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {// 获取URLLong startTime = null;if (log.isDebugEnabled()){startTime = System.currentTimeMillis();}HttpServletRequest httpRequest = (HttpServletRequest) request;String url = httpRequest.getRequestURL().toString();if (url == null || url.trim().length() == 0) {return;}if (url.indexOf(luceneCreateMapping) != -1|| url.indexOf(luceneSearchMapping) != -1) {doFilterForxxx(request, response, url);} else {doxxxx(request, response, url);}if (log.isDebugEnabled()){long endTime = System.currentTimeMillis();Thread currentThread = Thread.currentThread();String threadName = currentThread.getName();log.debug("[" + threadName + "]" + "< "+ this.getClass().getName() + " " + url + " "+ (endTime - startTime) + " ms");}// 激活下一个FilterfilterChain.doFilter(request, response);}}
2023-08-13 03:11:571

“spring mvc”是什么意思?

spring是框架,mvc是一种设计模式。,M代表model;V代表View;C代表controller从字面意思你也可以看出来M是指模型一般指DAO和service ;view代表显示一般指页面eg:jsp,html ftl等c值得是控制器,比如struts和springMVC 中的action与controller 而springMVC严格意义上指的是前端控制器,就是每次客户端与服务器交互都要经过springMVC的controller。
2023-08-13 03:12:181

什么是Spring的MVC框架?

【答案】:Spring提供了一个功能齐全的MVC框架用于构建Web应用程序。Spring框架可以很容易的和其他的MVC框架融合(如Struts),该框架使用控制反转(IOC)将控制器逻辑和业务对象分离开来。它也允许以声明的方式绑定请求参数到业务对象上。
2023-08-13 03:12:581

spring mvc的执行流程

这个应该有正常的规章制度,去看一下他们的制度就可以了,外人猜不到的。
2023-08-13 03:14:216

MVC面试题:有了stuts的mvc为什么还要spring的mvc

jjjjjjjjjjjjjjjj jkl
2023-08-13 03:14:494

springmvc和servlet的区别

Spingmvc 基于MVC的设计思想更高效servlet 手写代码但是更灵活
2023-08-13 03:15:222

Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC

最近我整理了一下一线架构师的Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC,分享给大家一起学习一下~ 文末免费获取哦 Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 1.1 Spring面试必备题+解析 1.2 Spring学习笔记 (1)Spring源码深入解析 (2)Spring实战 1.3 Spring学习思维脑图 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 2.1 Spring Boot面试必备题+解析 2.2 Spring Boot学习笔记 (1)Spring Boot实践 (2)SpringBoot揭秘 快速构建微服务体系 2.3 SpringBoot学习思维脑图 springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。通过一些简单的注解,我们就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。 3.1 Spring Cloud面试必备题+解析 3.2 Spring Cloud学习笔记 (1)Spring Cloud参考指南 SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发 4.1 Spring MVC面试必备题+解析 4.2 Spring MVC学习笔记 (1)看透Spring MVC源代码分析与实践 (2)精通Spring MVC 最后分享一下一份JAVA核心知识点整理(PDF)
2023-08-13 03:15:331

JAVA基础入门教程 -

  如果你对Java有兴趣的话,想真正的学并且能学进去,那难度不大。理解了就不难学习了。如果没有基础建议可以先在网上找些从零开始学Java的视频先看看。  
2023-08-13 03:15:525

springmvc的工作原理,简单的概括一下

springMVC工作原理:整个处理过程从一个HTTP请求开始: 1)DispatcherServlet接收到请求后,根据对应配置文件中配置的处理器映射,找到对应的处理器映射项(HandlerMapping),根据配置的映射规则,找到对应的处理器(Handler)。 2)调用相应处理器中的处理方法,处理该请求,处理器处理结束后会将一个ModelAndView类型的数据传给DispatcherServlet,这其中包含了处理结果的视图和视图中要使用的数据。 3)DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将视图要显示的数据传给对应的视图,最后给浏览器构造一个HTTP响应。 DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项: 1)截获符合特定格式的URL请求。 2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。 3)初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。
2023-08-13 03:17:152

springMVC的原理及作用

Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获; 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回; 3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法) 4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作: HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
2023-08-13 03:17:231

springMVC的核心是什么

依赖注入(IoC),又称控制反转。 不用显示的在一个类里用new关键字来生成你想要的对象而只需在xml配置文件里添加相应节点即可,这样就让你整个程序的组成变得灵活多样。
2023-08-13 03:17:312

JAVA SpringMVC里的model和java里的session有什么区别?

其实model和session都是存放信息的地方,不同的地方就是他们的生命周期不同,model是request级别的 ,如果有什么不懂的可以看源码
2023-08-13 03:17:491

spring mvc的作用是什么?

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
2023-08-13 03:18:094

面试官问我Spring在MVC中起的是什么作用 Struts2起的是什么作用

System.out.println("OK");
2023-08-13 03:18:239

springmvc直接返回json会走视图解析吗

不会。在使用springmv此注解之后不会再走json视图解析器,而是直接将数据写入到输出流中,效果等同于使用response对象输出指定格式的数据。SpringWebMVC是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。
2023-08-13 03:18:511

JAVA三框架工作原理是什么?

简单来说 四个字,反射+映射
2023-08-13 03:19:142

JAVA三框架工作原理是什么?

一、struts的工作原理: x0dx0a1、初始化,读取struts-config.xml、web.xml等配置文件(所有配置文件的初始化)x0dx0a2、发送HTTP请求,客户端发送以.do结尾的请求x0dx0a3、填充FormBean(实例化、复位、填充数据、校验、保存)x0dx0a4、将请求转发到Action(调用Action的execute()方法)x0dx0a5、处理业务(可以调用后台类,返回ActionForward对象)x0dx0a6、返回目标响应对象(从Action返回到ActionServlet)x0dx0a7、转换Http请求到目标响应对象(查找响应,根据返回的Forward keyword)x0dx0a8、Http响应,返回到Jsp页面x0dx0ax0dx0aHibernate工作原理:x0dx0a1. 读取并解析配置文件x0dx0a2. 读取并解析映射信息,创建SessionFactoryx0dx0a3. 打开Sesssionx0dx0a4. 创建事务Transationx0dx0a5. 持久化操作x0dx0a6. 提交事务x0dx0a7. 关闭Sessionx0dx0a8. 关闭SesstionFactoryx0dx0ax0dx0aspring工作原理:x0dx0a1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。x0dx0a2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.x0dx0a3.DispatcherServlet请请求提交到目标Controllerx0dx0a4.Controller进行业务逻辑处理后,会返回一个ModelAndViewx0dx0a5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象x0dx0a6.视图对象负责渲染返回给客户端。
2023-08-13 03:19:231

spring mvc的工作流程是什么?

Spring Web MVC 处理Http请求的大致过程:一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet可以认为是Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的。HandlerMapping定位到具体的Controller。HandlerMapping是这样一种对象,它能够完成客户请求到Controller之间的映射。在Struts中,这种映射是通过struts-config.xml文件完成的。其中,Spring为Controller接口提供了若干实现,例如Spring默认使用的。BeanNameUrlHandlerMapping。还有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。Spring Controller将处理来自DispatcherServlet的请求。Spring的Controller类似于struts的Action,能够接受HttpServletRequest和HttpServletResponse。Spring为Controller接口提供了若干实现类,位于org.springframework.web.servlet.mvc包中。由于Controller需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller将处理客户请求,这和Struts Action 扮演的角色是一致的。一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。前端控制器返回的视图可以是视图的逻辑名,或者实现了View接口的对象。View对象能够渲染客户响应结果。其中,ModelAndView中的模型能够供渲染View时使用。借助于Map对象能够存储模型。如果ModelAndView返回的视图只是逻辑名,则需要借助Spring提供的视图解析器(ViewResoler)在Web应用中查找View对象,从而将响应结果渲染给客户。DispatcherServlet将View对象渲染出的结果返回个客户。
2023-08-13 03:19:332

spring的原理是什么?

  一、 IoC(Inversion of control): 控制反转x0dx0a  1、IoC:x0dx0a  概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系x0dx0a  核心:bean工厂;在Spring中,bean工厂创建的各个实例称作beanx0dx0a  二、AOP(Aspect-Oriented Programming): 面向方面编程 。x0dx0a  1、 代理的两种方式:x0dx0a  静态代理:x0dx0a  针对每个具体类分别编写代理类。x0dx0a  针对一个接口编写一个代理类。x0dx0a  动态代理:x0dx0a  针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类 。x0dx0a  2、 AOP的主要原理:动态代理 。x0dx0a  Spring工作原理x0dx0a  Spring 已经用过一段时间了,感觉Spring是个很不错的框架。内部最核心的就是IOC了,x0dx0a  动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射 ,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置 文件来动态的创建对象,和调用对象里的方法的 。x0dx0a  Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。x0dx0a  Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象)x0dx0a  要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。x0dx0a  Spring里用的最经典的一个设计模式就是:模板方法模式。
2023-08-13 03:19:481

如何用spring实现mvc模式

首先你要了解MVC的意思了然后MVC框架有好多strutsjsftapestry....你说spring如何实现mvc,这个听起来怪怪的你首先要对spring有所了解才行来看看spring给我们带了些什么Dao,ORM,AOP,Web...它里面提供了一个WEB框架,就可以实现MVC,并且可以和上面提到的其它MVC框架做集成,所以说呢,Spring本身就集成了MVC,你只需按它的规范去做就好了,不用再去想如何实现
2023-08-13 03:20:111

spring boot原理

前端常使用模板引擎,主要有FreeMarker和Thymeleaf,它们都是用Java语言编写的,渲染模板并输出相应文本,使得界面的设计与应用的逻辑分离,同时前端开发还会使用到Bootstrap、AngularJS、JQuery等;在浏览器的数据传输格式上采用Json,非xml,同时提供RESTfulAPI;SpringMVC框架用于数据到达服务器后处理请求;到数据访问层主要有Hibernate、MyBatis、JPA等持久层框架;数据库常用MySQL;开发工具推荐IntelliJIDEA。扩展资料:SpringBoot所具备的特征有:(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;(2)内嵌Tomcat或Jetty等Servlet容器;(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;(4)尽可能自动配置Spring容器;(5)提供准备好的特性,如指标、健康检查和外部化配置;(6)绝对没有代码生成,不需要XML配置。Spring的初衷:1、JAVA EE开发应该更加简单。2、使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。3、为JavaBean提供了一个更好的应用配置框架。4、更多地强调面向对象的设计,而不是现行的技术如JAVA EE。5、尽量减少不必要的异常捕捉。6、使应用程序更加容易测试。参考资料来源:百度百科-spring框架参考资料来源:百度百科-Spring Boot
2023-08-13 03:20:191

struts2+spring +Hibernate的思想

Spring+hibernate就行了。还要什么 Struts2呀
2023-08-13 03:20:343

spring mvc跟mvc有什么区别

1、ssh中的spring充当的是MVC中的Model的职能,他也可以集成hibernate等,但它不提供hibernate的功能,仅为集成。2、SpringMVC是MVC架构的整体实现,包括了MVC三项框架,有了它你就不需要再去集成struts和hibernate了,都是由它自己提供。
2023-08-13 03:20:571

spring mvc 注解 怎么理解

注解替代了以前XML需要的配置,换了一种表现形式而以,没有什么强大不强大,只是怎么样才能更快的编程和更好的管理代码。依赖注入也可以使用注解的,这个东西你去网上找点视频看下,就清楚了,对于有过开发经验的人没有什么难度。
2023-08-13 03:21:052

spring boot和spring mvc最重要区别

前者是一个工具和开发框架,而后者是一个开发模式,这是两个完全不同的概念。前者里面包含有mvc这种模式,其本身是一种包含了该模式的开发工具和框架,因此需要注意区分两者的区别,以免混淆。
2023-08-13 03:21:131

SpringMVC和Spring是什么关系

基于Spring实现的MVC框架。不能不使用Spring,单独使用SpringMVC,因为其需要依赖Ioc容器等。但是如果单独为了更好的理解SpringMVC这种MVC框架,就把它和Struts/Struts2。。。一系列的MVC框架,只是基于DispatcherServlet或者Filter做一个前端分发器,最终把这个框架引导起来,进行其自己的逻辑处理。没有什么特殊的地方。每个MVC框架都有自己的特点,互相比较一下,就理解原理了。
2023-08-13 03:21:211

struts+hibernate+spring结构整合后,action为什么必须注解为多例的

hibernate工作原理原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2. Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、4. 说下Hibernate的缓存机制1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a) 应用及缓存b) 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据c) 第三方缓存的实现5. Hibernate的查询方式Sql、Criteria,object comptositionHql:1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数6. 如何优化Hibernate?1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰struts工作原理Struts工作机制?为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程.-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; -(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; -(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功; -(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; -(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件; -(7)ActionForward对象指向JSP组件生成动态网页,返回给客户; 为什么要用:JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件8. Struts的validate框架是如何验证的?在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。9. 说下Struts的设计模式MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用 Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。spring工作原理1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet请请求提交到目标Controller4.Controller进行业务逻辑处理后,会返回一个ModelAndView5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象6.视图对象负责渲染返回给客户端。为什么用:{AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。}Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:☆ 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。☆ Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。☆ Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。☆ Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。☆ Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。☆ Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。☆ Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。IOC 和 AOP控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。下表列出了 IOC 的一个实现模式。
2023-08-13 03:21:291

struts的MVC和spring的MVC的区别

最近才发现spring也能实现MVC,于是在网上找了找相关介绍:当初选框架的时候目的比较单纯---springmvc支持rest,小生对restful url由衷的喜欢不用不知道一用就发现开发效率确实比struts2高我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置spring3 mvc可以认为已经100%零配置了(除了配置springmvc-servlet.xml外)比较了一下strus2与spring3 mvc的差别============================================struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入struts2实际上是通过setter getter方法与request打交道的struts2中,一个Action对象对应一个request上下文spring3 mvc不同,spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去在spring3mvc中,一个方法对应一个request上下文好了我们来整理一下struts2是类级别的拦截,一个类对应一个request上下文,springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应所以说从架构本身上 spring3 mvc就容易实现restful url而struts2的架构实现起来要费劲因为struts2 action的一个方法可以对应一个url而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了===================================spring3mvc的方法之间基本上独立的,独享request response数据请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的这不会影响程序运行,却给我们编码读程序时带来麻烦====================================spring mvc 优点:spring mvc通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所没有的优势。而且框架本身有代码,而且看起来也不费劲比较简单可以理解。1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。====================================spring3 mvc的验证也是一个亮点,支持JSR303处理ajax的请求更是方便只需一个注解@ResponseBody ,然后直接返回响应文本即可附上一段代码:@RequestMapping(value="/whitelists")public String index(ModelMap map){Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId()) ;u200d List<Group> groupList = groupManager.findAllGroup(account.getId()) ;map.put("account", account);map.put("groupList", groupList);return "/group/group-index" ;}//@ResponseBody ajax响应@RequestMapping(value="/whitelist/{whiteListId}/del")@ResponseBodypublic String delete(@PathVariable Integer whiteListId){whiteListManager.deleteWhiteList(whiteListId) ;return "success" ;}Struts 和 SpringMVC 的区别是什么呢?很多人学习了ssh ,都晓得struts最早被人用来控制表现层,但是struts已经有了mvc 为什么还有spring mvc呢?所以我稍微查阅了一些资料,总结了一下他们的区别:1. 机制。spring mvc 的入口是servlet,而struts是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了,我其他博客会专门写一写 servlet和filter之间的区别。2.性能。 spring会稍微比struts快。spring mvc 是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个 action ,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。3.参数传递。 struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。4.设计思想上。struts 更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展,5.intercepter的实现机制。struts有以自己的interceptor机制,spring mvc 用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁。
2023-08-13 03:21:371

spring mvc和struts2的区别 blog

1)springmvc的入口是一个servlet,即前端控制器,例如:*.actionstruts2入口是一个filter过虑器,即前端过滤器,例如:/*2)springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例struts2是基于类开发,传递参数是通过类的属性,只能设计为多例3)springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成 ModelAndView对象,最后又将模型数据通过request对象传输到页面struts采用值栈存储请求和响应的数据,通过OGNL存取数据
2023-08-13 03:21:451

struts1和struts2和springMVC的区别和介绍

MVC是web开发常用的模式,M即模型层(Model):主要由javabean来实现。V即视图层(View):主要由jsp、velocity、freemarker等。C即控制层(Controller):主要由servlet、strtus、springmvc来实现。struts1Struts1 工作流程1 ActionServlet接收由浏览器发出的请求后,检索和请求匹配的ActionMapping对象。如果不存在,返回请求无效的信息。2 检索和请求匹配的ActionForm对象。如果不存在,就创建一个。把提交的表单中的数据保存在ActionForm对象中3 根据配置信息决定是否进行校验。如果是,就进行校验。如果通过校验,进行下一步4 ActionServlet根据ActionMapping对象包含的信息决定把请求转发给哪个Action。如果这个Action的对象不存在,就创建一个,然后调用它的excute方法5 Action的excute方法返回一个ActionForward对象。ActionServlet把请求转发给ActionForward指定的JSP。6 ActionFoward对象指定的JSP生成动态网页,返回给浏览器struts2struts2是webwork升级版,跟struts1没有关系。struts1和servlet耦合度高,各层之间耦合度高,单元测试困难,表示层技术单一,而struts2没有和servlet耦合,更容易测试,支持更多表示层技术。struts2工作流程1) 客户端初始化一个指向Servlet容器(例如Tomcat)的请求。2) 这个请求经过一系列的过滤器(Filter)。3) 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。4) 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。5) ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。6) ActionProxy创建一个ActionInvocation的实例。7) ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。8) 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。Struts2的核心就是拦截器。Struts.xml中所有的package都要extends="struts-default"。同理与所有的Java类都要extends自Object一样。struts-default.xml里面就是要做以上事情。springmvc1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet将请求提交到目标Controller4.Controller进行业务逻辑处理后,会返回一个ModelAndView5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象6.视图对象负责渲染返回给客户端。struts1与struts2的比较1、struts1要求Action类继承一个抽象基类,而不是接口,struts2继承ActionSupport类或者实现Action接口。2、struts1是单例模式的,Action资源必须是线程安全的或同步的,会有线程安全问题,struts2为每一个请求都实例化一个对象,不存在线程安全问题。3、struts1依赖servlet API 因为execute方法的参数有httpservletrequest和httpservletresponse对象,而struts2不用依赖servlet。4、struts1依赖servlet API,所以测试要依赖web容器,测试难,struts2不依赖于容器,允许Action脱离容器单独被测试。 5、ActionForm,普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数,Struts 2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐。Struts 2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts 2基类,是一个POJO,从而降低了代码污染。 6、struts1 支持jsp作为表现层技术,struts2支持velocity、freemarker等表现层技术。7、Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL8、Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期struts2与springmvc比较1、spring mvc的入口是servlet,而struts2是filter2、struts2是类级别的拦截, 一个类对应一个request上下文,springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应3、spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。4、spring3mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。
2023-08-13 03:22:152

bean 验证框架 hibernate validate

hibernate工作原理原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2. Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、4. 说下Hibernate的缓存机制1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a) 应用及缓存b) 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据c) 第三方缓存的实现5. Hibernate的查询方式Sql、Criteria,object comptositionHql:1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数6. 如何优化Hibernate?1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰struts工作原理Struts工作机制?为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程.-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; -(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; -(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功; -(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; -(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件; -(7)ActionForward对象指向JSP组件生成动态网页,返回给客户; 为什么要用:JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件8. Struts的validate框架是如何验证的?在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。9. 说下Struts的设计模式MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用 Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。spring工作原理1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet请请求提交到目标Controller4.Controller进行业务逻辑处理后,会返回一个ModelAndView5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象6.视图对象负责渲染返回给客户端。为什么用:{AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。}Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:☆ 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。☆ Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。☆ Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。☆ Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。☆ Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。☆ Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。☆ Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。IOC 和 AOP控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。下表列出了 IOC 的一个实现模式。下面的人请勿复制
2023-08-13 03:22:241

spring mvc 使用什么控制流程

使用工具Interceptor(拦截器);Mapping映射解析;Controller(控制器);操作步骤第一步:首先看一下框架中的映射解析器,用来将uri和控制器进行绑定的。SpringMVC框架的默认解析器采用是:bean的name属性名称作为URI,与控制器进行映射绑定,例如:SimpleUrlHandlerMapping :通过映射关系将请求路径和控制器绑定在一起,设置更加灵活,这里看个例子:第二步:通过编写Interceptor可以对控制器进行拦截,对框架进行功能扩展。自定义拦截器需要继承HandlerInterceptorAdapter父类,或者实现HandlerInterceptor接口。编写了拦截器后,就需要配置到配置文件SpringMVC-servlet.xml中进行声明配置。需要在SpringMVC-servlet.xml文件中配置,设置的拦截器对那些控制器起作用,这里声明拦截器和控制器的关系组合。第三步:Controller控制器的编写,这里的Controller和Struts2里边的action是相同的。父类的protected该外public的类型,供其他类的使用,其中方法名是固定的。继承MultiActionController(多动作控制器),这样可以增加多个方法,处理多个客户的请求。配置文件的映射编写。继承AbstractCommandController,指令控制器,用于获取页面的参数,将参数封装到指定的对象模型中。其他:任何的MVC框架都没关系,重要的是核心控制器,映射文件,对应的action类,扩展可以通过拦截器,过滤器等。
2023-08-13 03:22:331

spring mvc DispatcherServlet详解之interceptor和filter的区别

 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理,其他的作用比如通过它来进行权限验证,或者是来判断用户是否登陆,日志记录,或者限制时间点访问。  SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Interceptor类要实现了Spring 的HandlerInterceptor 接口,或者是这个类继承实现了HandlerInterceptor 接口的类,比如Spring 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter ;第二种方式是实现Spring的WebRequestInterceptor接口,或者是继承实现了WebRequestInterceptor的类。  HandlerInterceptor 接口中定义了三个方法,我们就是通过这三个方法来对用户的请求进行拦截处理的。  (1 )preHandle (HttpServletRequest request, HttpServletResponse response, Object handle) 方法。该方法将在请求处理之前进行调用。SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。每个Interceptor 的调用会依据它的声明顺序依次执行,而且最先执行的都是Interceptor 中的preHandle 方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor 和Controller 都不会再执行;当返回值为true 时就会继续调用下一个Interceptor 的preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller 方法。  (2 )postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView) 方法,由preHandle 方法的解释我们知道这个方法包括后面要说到的afterCompletion 方法都只能是在当前所属的Interceptor 的preHandle 方法的返回值为true 时才能被调用。postHandle 方法,顾名思义就是在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行,这和Struts2 里面的Interceptor 的执行过程有点类型。Struts2 里面的Interceptor 的执行过程也是链式的,只是在Struts2 里面需要手动调用ActionInvocation 的invoke 方法来触发对下一个Interceptor 或者是Action 的调用,然后每一个Interceptor 中在invoke 方法调用之前的内容都是按照声明顺序执行的,而invoke 方法之后的内容就是反向的。  (3 )afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex) 方法,该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。 我们的系统日志的拦截在这个方法中,可以记录日志的相关的参数,检测方法的执行。.
2023-08-13 03:23:281

java spring mvc求助

你的index页面在哪个文件夹下面
2023-08-13 03:23:375

springmvc中的requestmapping注解怎么实现的

使用@RequestMapping注解时,配置的信息最后都设置到了RequestMappingInfo中.RequestMappingInfo封装了PatternsRequestCondition,RequestMethodsRequestCondition,ParamsRequestCondition等,所以自己不干活,所有的活都是委托给具体的condition处理.先看下封装的RequestCondition吧,之前的文章将的比较细了,不清楚各个类具体是做什么的,可以移步这里<SpringMVC源码解读 - RequestMapping注解实现解读 - RequestCondition体系>1 package org.springframework.web.servlet.mvc.method;2 public final class RequestMappingInfo implements RequestCondition<RequestMappingInfo> {34 private final PatternsRequestCondition patternsCondition;56 private final RequestMethodsRequestCondition methodsCondition;78 private final ParamsRequestCondition paramsCondition;9 10 private final HeadersRequestCondition headersCondition;11 12 private final ConsumesRequestCondition consumesCondition;13 14 private final ProducesRequestCondition producesCondition;15 16 private final RequestConditionHolder customConditionHolder;17 }初始化没什么好看的,直接看接口的实现吧.貌似combine也没啥料,就是分别委托1 /**2 * Combines "this" request mapping info (i.e. the current instance) with another request mapping info instance.3 * <p>Example: combine type- and method-level request mappings.4 * @return a new request mapping info instance; never {@code null}5 */6 public RequestMappingInfo combine(RequestMappingInfo other) {7 PatternsRequestCondition patterns = this.patternsCondition.combine(other.patternsCondition);8 RequestMethodsRequestCondition methods = this.methodsCondition.combine(other.methodsCondition);9 ParamsRequestCondition params = this.paramsCondition.combine(other.paramsCondition);10 HeadersRequestCondition headers = this.headersCondition.combine(other.headersCondition);11 ConsumesRequestCondition consumes = this.consumesCondition.combine(other.consumesCondition);12 ProducesRequestCondition produces = this.producesCondition.combine(other.producesCondition);13 RequestConditionHolder custom = this.customConditionHolder.combine(other.customConditionHolder);14 15 return new RequestMappingInfo(patterns, methods, params, headers, consumes, produces, custom.getCondition());16 }getMatchingCondition只是体现出可能基于性能消耗的考虑,把PatternsRequestCondition和RequestConditionHolder的比较放到后面单独处理了.1 /**2 * Checks if all conditions in this request mapping info match the provided request and returns3 * a potentially new request mapping info with conditions tailored to the current request.4 * <p>For example the returned instance may contain the subset of URL patterns that match to5 * the current request, sorted with best matching patterns on top.6 * @return a new instance in case all conditions match; or {@code null} otherwise7 */8 public RequestMappingInfo getMatchingCondition(HttpServletRequest request) {9 RequestMethodsRequestCondition methods = methodsCondition.getMatchingCondition(request);10 ParamsRequestCondition params = paramsCondition.getMatchingCondition(request);11 HeadersRequestCondition headers = headersCondition.getMatchingCondition(request);12 ConsumesRequestCondition consumes = consumesCondition.getMatchingCondition(request);13 ProducesRequestCondition produces = producesCondition.getMatchingCondition(request);14 15 if (methods == null || params == null || headers == null || consumes == null || produces == null) {16 return null;17 }18 19 PatternsRequestCondition patterns = patternsCondition.getMatchingCondition(request);20 if (patterns == null) {21 return null;22 }23 24 RequestConditionHolder custom = customConditionHolder.getMatchingCondition(request);25 if (custom == null) {26 return null;27 }28 29 return new RequestMappingInfo(patterns, methods, params, headers, consumes, produces, custom.getCondition());30 }compareTo就是排了个不同RequestCondition的优先级1 /**2 * Compares "this" info (i.e. the current instance) with another info in the context of a request.3 * <p>Note: it is assumed both instances have been obtained via4 * {@link #getMatchingCondition(HttpServletRequest)} to ensure they have conditions with5 * content relevant to current request.6 */7 public int compareTo(RequestMappingInfo other, HttpServletRequest request) {8 int result = patternsCondition.compareTo(other.getPatternsCondition(), request);9 if (result != 0) {10 return result;11 }12 result = paramsCondition.compareTo(other.getParamsCondition(), request);13 if (result != 0) {14 return result;15 }16 result = headersCondition.compareTo(other.getHeadersCondition(), request);17 if (result != 0) {18 return result;19 }20 result = consumesCondition.compareTo(other.getConsumesCondition(), request);21 if (result != 0) {22 return result;23 }24 result = producesCondition.compareTo(other.getProducesCondition(), request);25 if (result != 0) {26 return result;27 }28 result = methodsCondition.compareTo(other.getMethodsCondition(), request);29 if (result != 0) {30 return result;31 }32 result = customConditionHolder.compareTo(other.customConditionHolder, request);33 if (result != 0) {34 return result;35 }36 return 0;37 }
2023-08-13 03:23:501

spring mvc 跟 maven spring mvc 有什么区别

1、首先看一下项目结构:总结:主要是将配置文件配置好之后就不会有什么问题了。在阅读《Maven实战》这本书的时候可以知道有一章是讲解关于继承和聚合的知识,这里主要的是Maven构建SpringMVC项目,所以DAO等这些都写到一起了。因为我也没有只用Maven进行过一个完整项目的实践,所以独立模块开发+聚合可以参考《Maven实战》这本书上面的示例讲解。作为初学者,有很多的东西要学。附源代码地址:点击打开链接
2023-08-13 03:24:041

什么是spring mvc框架的控制器

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。
2023-08-13 03:24:141

struts2的拦截器和springmvc的拦截器的区别

原理都是一样的,责任链设计模式。区别就是用的地方不一样,拦截的位置不一样。过滤器是web标准,一般配置在web.xml中,在遇到符合规则的请求时处理。struts2拦截器,是struts提供的,配置在struts.xml中,拦截struts的Action请求并处理,如果你的请求不符合struts要求未被struts处理,则拦截器同样不会触发。spring跟struts一样,只是由spring框架提供,未被spring管理的对象方法是不会被拦截的。
2023-08-13 03:24:221

如何用Java类配置Spring MVC

package com.chry.ocr.config; 2 3 import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 4 5 public class OcrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 6 7 @Override 8 protected Class<?>[] getRootConfigClasses() { 9 return new Class<?>[] { RootConfig.class };10 }11 12 @Override13 protected Class<?>[] getServletConfigClasses() {14 return new Class<?>[] { WebConfig.class }; //u05b8指定Web配置类15 }16 17 @Override18 protected String[] getServletMappings() { //将DispatcherServlet映射到"/"19 return new String[] { "/" };20 }21
2023-08-13 03:24:422

struts1和struts2和springMVC的区别和介绍

struts1Struts1 工作流程1 ActionServlet接收由浏览器发出的请求后,检索和请求匹配的ActionMapping对象。如果不存在,返回请求无效的信息。2 检索和请求匹配的ActionForm对象。如果不存在,就创建一个。把提交的表单中的数据保存在ActionForm对象中3 根据配置信息决定是否进行校验。如果是,就进行校验。如果通过校验,进行下一步4 ActionServlet根据ActionMapping对象包含的信息决定把请求转发给哪个Action。如果这个Action的对象不存在,就创建一个,然后调用它的excute方法5 Action的excute方法返回一个ActionForward对象。ActionServlet把请求转发给ActionForward指定的JSP。6 ActionFoward对象指定的JSP生成动态网页,返回给浏览器struts2struts2是webwork升级版,跟struts1没有关系。struts1和servlet耦合度高,各层之间耦合度高,单元测试困难,表示层技术单一,而struts2没有和servlet耦合,更容易测试,支持更多表示层技术。struts2工作流程1) 客户端初始化一个指向Servlet容器(例如Tomcat)的请求。2) 这个请求经过一系列的过滤器(Filter)。3) 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action。4) 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。5) ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。6) ActionProxy创建一个ActionInvocation的实例。7) ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。8) 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。Struts2的核心就是拦截器。Struts.xml中所有的package都要extends="struts-default"。同理与所有的Java类都要extends自Object一样。struts-default.xml里面就是要做以上事情。springmvc1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet将请求提交到目标Controller4.Controller进行业务逻辑处理后,会返回一个ModelAndView5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象6.视图对象负责渲染返回给客户端。struts1与struts2的比较1、struts1要求Action类继承一个抽象基类,而不是接口,struts2继承ActionSupport类或者实现Action接口。2、struts1是单例模式的,Action资源必须是线程安全的或同步的,会有线程安全问题,struts2为每一个请求都实例化一个对象,不存在线程安全问题。3、struts1依赖servlet API 因为execute方法的参数有httpservletrequest和httpservletresponse对象,而struts2不用依赖servlet。4、struts1依赖servlet API,所以测试要依赖web容器,测试难,struts2不依赖于容器,允许Action脱离容器单独被测试。 5、ActionForm,普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数,Struts 2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐。Struts 2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts 2基类,是一个POJO,从而降低了代码污染。 6、struts1 支持jsp作为表现层技术,struts2支持velocity、freemarker等表现层技术。7、Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL8、Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期struts2与springmvc比较1、spring mvc的入口是servlet,而struts2是filter2、struts2是类级别的拦截, 一个类对应一个request上下文,springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应3、spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。4、spring3mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。
2023-08-13 03:25:001