首页 > 其他分享 >Struts2的工作原理是什么?Struts2中的MVC模式包含哪些核心组件?在Struts2中如何实现转发和重定向?

Struts2的工作原理是什么?Struts2中的MVC模式包含哪些核心组件?在Struts2中如何实现转发和重定向?

时间:2024-03-24 10:02:25浏览次数:21  
标签:xml 控制器 重定向 组件 Struts2 MVC 转发 Action

Struts2的工作原理是什么?
Struts2的工作原理主要基于MVC设计模式,它充当Web应用框架的控制器层(Controller),负责建立模型与视图之间的数据交互。

具体来说,Struts2的工作流程如下:

启动与加载:当Web应用启动时,服务器会加载web.xml配置文件。在这个过程中,StrutsPrepareAndExecuteFilter(核心过滤器)的init()方法会被调用,该方法会读取类路径下默认的配置文件struts.xml,并完成初始化操作。初始化后,Struts2会将struts.xml的内容以JavaBean的形式存放在内存中,以便后续使用。
请求处理:当用户发起一个请求时,这个请求首先会被Struts2的核心控制器FilterDispatcher(过滤器分发器)接收。FilterDispatcher会解析请求的URL,并查找与URL匹配的Action映射。这个过程涉及到ActionMapper组件,它会根据struts.xml中的配置来确定哪个Action应该处理这个请求。
Action调用与拦截:一旦找到匹配的Action,FilterDispatcher会创建一个ActionInvocation实例来调用这个Action。在调用Action的过程中,Struts2会按照配置的顺序调用相关的拦截器(Interceptor)。这些拦截器可以在Action执行前后执行一些操作,比如安全检查、日志记录等。
结果处理:当Action执行完毕后,ActionInvocation会根据struts.xml中的配置找到对应的返回结果。这个返回结果通常是一个需要被表示的JSP页面或者FreeMarker模板。在这个过程中,可以使用Struts2框架中提供的标签来简化视图的编写。
响应返回:最后,FilterDispatcher会通过web.xml中配置的过滤器将处理结果返回给客户端。
在整个工作过程中,Struts2通过配置文件(struts.xml)和注解的方式来定义Action、拦截器、结果等组件的行为,从而实现了灵活且可配置的Web应用开发。同时,Struts2也提供了丰富的标签库和工具类,帮助开发者更高效地构建Web应用。

Struts2中的MVC模式包含哪些核心组件?
Struts2中的MVC模式包含以下核心组件:

模型(Model):
模型组件是实现业务逻辑的模块,通常包括业务逻辑组件和数据库访问组件。在Struts2中,模型层可以是由JavaBean或EJB构成的,用于处理业务逻辑和存储业务数据。模型组件是MVC模式中的核心部分,它封装了应用程序的状态和行为,并通过业务逻辑对数据进行操作和处理。
视图(View):
视图组件负责呈现应用程序的用户界面,包括HTML、JSP页面以及Struts2标签等。视图组件还可以使用FreeMarker、Velocity等模板技术来创建动态页面。视图层的主要任务是根据模型组件提供的数据来生成用户界面,并将用户的请求转发给控制器组件。
控制器(Controller):
控制器组件在Struts2中主要由核心控制器FilterDispatcher和业务控制器Action组成。FilterDispatcher是Struts2的核心过滤器,负责接收用户请求、解析请求参数,并根据配置文件(struts.xml)找到相应的Action进行处理。Action是业务控制器,负责调用模型组件处理业务逻辑,并将处理结果返回给视图组件。
在Struts2的MVC模式中,控制器组件接收用户的请求,并根据请求信息调用相应的模型组件处理业务逻辑。模型组件执行完毕后,将结果返回给控制器,控制器再根据返回的结果选择合适的视图组件进行渲染,并将最终的界面呈现给用户。这样,模型、视图和控制器三者相互分离,各自负责不同的职责,从而提高了应用程序的灵活性和可维护性。

此外,Struts2还提供了其他核心组件,如OGNL/ValueStack、拦截器(Interceptor)和标签库(Tags)等,这些组件在MVC模式中起着辅助和扩展的作用,进一步增强了Struts2框架的功能和灵活性。

在Struts2中如何实现转发和重定向?
在Struts2中,实现转发和重定向主要依赖于Action处理结果类型的配置。Struts2提供了多种结果类型,包括转发(dispatcher)和重定向(redirect)。

转发(dispatcher)
转发是Struts2默认的结果类型。当Action执行完毕后,Struts2框架会使用RequestDispatcher的forward()方法将请求转发到指定的JSP页面。在struts.xml配置文件中,你不需要显式指定结果类型为dispatcher,因为它是默认的。

示例:

<action name="exampleAction" class="com.example.ExampleAction">  
    <result name="success">/success.jsp</result>  
</action>

在上面的例子中,当exampleAction执行成功(返回"success"字符串)时,Struts2会默认使用转发方式将请求转发到/success.jsp页面。

重定向(redirect)
要实现重定向,你需要在struts.xml配置文件中显式指定结果类型为redirect。重定向是通过HttpServletResponse的sendRedirect()方法实现的,它会发送一个新的请求到服务器。

示例:

<action name="exampleAction" class="com.example.ExampleAction">  
    <result name="success" type="redirect">/success.jsp</result>  
</action>

在这个例子中,当exampleAction执行成功时,Struts2会使用重定向方式将用户重定向到/success.jsp页面。注意,重定向会导致浏览器地址栏的URL发生变化。

重定向到Action
除了重定向到具体的JSP页面,你还可以重定向到另一个Action。这通常用于实现页面之间的导航或处理某些业务逻辑。

示例:

<action name="exampleAction" class="com.example.ExampleAction">  
    <result name="success" type="redirectAction">anotherAction</result>  
</action>  
  
<action name="anotherAction" class="com.example.AnotherAction">  
    <result name="success">/anotherSuccess.jsp</result>  
</action>

在这个例子中,当exampleAction执行成功时,它会重定向到名为anotherAction的另一个Action。然后,anotherAction执行完毕后,会根据其配置的结果类型(在这个例子中是转发到/anotherSuccess.jsp)来呈现最终页面。

通过合理配置Struts2的Action处理结果类型,你可以灵活地实现转发和重定向,以满足不同业务需求。

标签:xml,控制器,重定向,组件,Struts2,MVC,转发,Action
From: https://blog.csdn.net/u012680662/article/details/136957595

相关文章

  • Struts2中type类型有哪些?Struts2默认能解决get和post提交方式的乱码问题吗?Struts2中如
    Struts2中type类型有哪些?Struts2中type类型指的是结果类型,用于指定Action执行完成后如何返回结果给客户端。Struts2框架提供了多种结果类型,以满足不同的业务需求和页面跳转方式。以下是一些常见的Struts2结果类型:dispatcher:这是默认的结果类型,相当于servlet的forward,即服......
  • SpringMVC中的拦截器Interceptor实现
    之前的文章介绍过两个拦截器(分别参考MyBatis功能点之二(2):从责任链设计模式的角度理解插件实现技术和SpringAOP之源码分析)。本文介绍的拦截器实现与它们有何异同呢?在SpringMVC拦截器(Interceptor)使用中已知实现了HandlerInterceptor接口,MVC会自动拦截。如何实现的呢?改造......
  • springMVC映射请求数据
    获取参数值@RequestParam@RequestParam表示会接收参数,value="name"表示接收的参数名为name,,required=false表示该参数可以没有,默认为truepackagecom.ysbt.requestparam;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.......
  • 房屋租赁系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着城市化进程的加快和人口流动性增大,房屋租赁市场日益繁荣,对租赁信息的管理提出了更高要求。一个高效的房屋租赁系统能够为房东和租户提供一个便捷的信息发布......
  • ASPNET MVC POST DELETE PUT 请求返回 400 (Bad Request)
    近日遇到 POSTDELETEPUT请求返回400(BadRequest),而GET请求正常的情况经几日排查,发现是【防止ASP.NETMVC应用程序中的跨站点请求伪造(CSRF)攻击】导致的解决方法:在请求头中加入 RequestVerificationToken@injectMicrosoft.AspNetCore.Antiforgery.IAntif......
  • 宠物医院管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着宠物行业的快速发展和宠物数量的不断增加,宠物医疗服务的需求日益旺盛。宠物医院管理系统作为一种专业的信息化工具,对于提升宠物医院的工作效率、优化顾客服......
  • 房屋中介房源管理系统的设计与实现(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着房地产市场的蓬勃发展,房屋中介机构在房源管理和客户服务方面面临着日益增长的挑战。一个高效、可靠的房屋中介房源管理系统对于提升中介机构的工作效率、优......
  • vue一些基础概念,核心理念,框架和库的区别,MVC和MVVM的区别,展示数据的几种方法、v-bind、
    1、什么是vue,核心理念,为什么学习vue1(单页面应用程序)用于构建用户界面的渐进式框架,采用自底向上增量开发的设计2数据驱动视图,组件化开发3轻量级框架、简单易学、虚拟的DOM、数据视图结构分离下面展示一些内联代码片。下面是vue的代码框架分为三部分:1.引入vue.js;2......
  • springMVC中过滤器的实现
    过滤器使用Servlet3.0提供的@webFilter注解,配置过滤的URL规则,实现Filter接口,重写doFilter具体实现代码如下:importorg.springframework.stereotype.Component;importjavax.servlet.*;importjavax.servlet.annotation.WebFilter;importjava.io.IOException;@Component......
  • 实现一个自定义MVC
    在Spring核心思想之AOP:在自定义容器基础上实现AOP功能的容器上实现类似SpringMVC的功能。先分析下SpringMVC功能,在SpringMVC快速搭建初体验中:1、web.xml配置的功能被实现了WebApplicationInitializer的类替代,即不用解析web.xml配置文件直接执行WebApplicationIniti......