模拟struts 2处理原理
模拟struts2处理流程的原理,流程大概如下:
1.启动服务器,Listener监听器会利用dom4g自动读取struts.xml文件保存起来(相当于服务器启动时通过配置文件web.xml加载struts.xml)。
2.当用户发出请求URL: * . action时,Filter过滤器会处理请求,调用相对应的
自定义过滤器处理类StrutsFilter.
3.StrutsFilter类会调用doFilter方法匹配用户请求的
URL里面的action名字和
struts.xml文件里面的action名字是否匹配,如果匹配则继续下面操作,否则认为该请求不是action,请求跳转到对应的页面,结束处理。该过滤器相当于struts.xml里面的:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4.如果匹配,则获取action类并创建该类对象获取该类里面的所有属性:
a.code属性如果属性是字符串且名字与表单提交过来的名字一致,则自动设置到action对象里面去。例如:表单<input type="text" name="code"/> action类里面: private string code ; setCode() getCode()方法
b.admin对象如果属性是bean对象,则把表单里所有元素设置到action的bean里面去。
<input type="text" name="admin.name"/><input type="password" name="admin.password"> action类里面: private Admin admin ; setAdmin() getAdmin()方法
c.adminService从Context里面取出项目启动时保存的adminService,也保存到action类中。
@Resource
private AdminService adminService ; 此处用了struts的注解系统在调用action时会自动注入,所以adminService不用写set和get方法。
自动注解要在applicationContext.xml文件里配置一句话:<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
</bean>
action类里面要导包:import javax.annotation.Resource;
最后调用action里面的public String execute(){
Admin admin ;
admin = adminService().checkLogin(admin) ;//因为action为服务器跳转,admin对象会保存在request里面,success对应的页面可以通过struts标签<s:property name="admin.name"/>取得admin对象的name属性
return "success" ;
}方法
,该方法有两种返回结果,如果操作成功返回success,反之则返回error。
5.获取struts.xml里面的success和error所对应的跳转页面<result name="success">,在通过
反射机制获取action类里面所返回的字符串进行匹配,最后跳转到处理结果页面。
分享到:
相关推荐
本文将通过使用Servlet来模拟Struts1的工作流程,深入理解其核心机制。 首先,让我们探讨Struts1的基本架构。Struts1框架的核心组件包括ActionServlet、ActionForm、Action、Tiles以及配置文件(struts-config.xml...
在本主题"Servlet简单模拟Struts2"中,我们将探讨如何利用Servlet来实现类似Struts2框架的一些关键功能,包括请求拦截、XML配置解析、动态代理以及日志拦截。 首先,让我们了解一下Struts2框架的核心特性。Struts2...
通过实践简单的Struts2模拟代码,可以更好地理解和体验Struts2框架的工作原理和优势。在实际开发中,还需要不断学习和熟悉Struts2的高级特性,如自定义拦截器、类型转换、插件使用等,以提升开发能力。
8. **异常处理**:Struts2提供了全局和局部两种异常处理策略,能够统一处理程序中的异常,提高了代码的健壮性。 9. **国际化与本地化**:Struts2支持多语言环境,通过资源文件管理不同地区的消息,为用户提供本地化...
通过分析和实践这个教学示范代码,学习者将能够了解Struts2的工作原理,掌握如何构建和配置Struts2应用,以及如何利用其特性进行自定义扩展。对于初学者来说,这是一个非常实用的学习资源,对于经验丰富的开发者,它...
总结来说,模拟Struts2框架的实现主要包括以下几个部分: 1. 创建Action类并定义业务逻辑方法。 2. 配置Action映射,指定Action类、方法和URL路径。 3. 实现和配置拦截器,以增强Action的执行过程。 4. 设计视图层...
这个"模拟Struts2代码+文档"的压缩包很可能包含了一个简化的Struts2应用实例和相关的技术文档,帮助初学者理解Struts2的工作原理和实践操作。 Struts2的核心特性包括: 1. **Action类**:在Struts2中,Action类是...
本文将深入探讨如何模拟Struts2的拦截器,并通过一个实际的Filter类来阐述其工作原理。 首先,我们需要理解Struts2拦截器的基本概念。拦截器是一个实现了`Interceptor`接口的Java类,它位于动作调用之前和之后,...
Struts是Apache软件基金会 Jakarta项目下的一个开源框架,...在继续完善你的模拟Struts时,可以考虑添加更多特性,如更复杂的业务逻辑处理、优化的配置管理、安全性和性能的改进等,进一步提高项目的完整性和实用性。
2. **模拟实现DispatcherAction**: 要模拟实现DispatcherAction,首先我们需要创建一个类,这个类将负责接收请求、解析配置信息以及调用目标Action。这个类可能包含以下方法: - `init()`: 初始化方法,用于加载...
下面我们将探讨如何利用Java反射模拟Struts2的工作原理。 首先,Struts2在启动时会读取配置文件,通常是`struts.xml`,该文件定义了各个Action及其对应的处理方法和结果页面。在模拟这个过程时,我们需要创建一个...
然而,为了理解MVC框架的基本工作原理,我们可以使用Servlet来模拟Struts的行为。 首先,我们要知道MVC的三个核心组件: 1. **Model(模型)**:负责业务逻辑处理和数据操作。在实际项目中,这通常由JavaBean或EJB...
总的来说,模拟Struts2环境是学习和理解MVC框架以及Java Web开发的一个良好途径。通过对配置文件的调整和实际代码的编写,开发者可以深入掌握Struts2的工作原理和最佳实践。同时,熟悉反射机制对于理解框架的内部...
在模拟Struts1的过程中,我们将创建一个Servlet类,这个类将扮演ActionServlet的角色。首先,我们需要在Servlet中读取XML配置文件,这个配置文件类似于Struts-config.xml,包含了ActionMapping的信息。这可以通过DOM...
首先,我们要理解Struts2漏洞的核心在于其ActionServlet组件处理用户输入的方式。例如,一个著名的漏洞是CVE-2017-5638,也就是Struts2 OGNL注入漏洞。这个漏洞允许攻击者通过HTTP请求头中的Content-Type字段注入...
这个“Struts2的简单模拟”项目可能是为了帮助初学者理解Struts2的核心概念和工作原理,通过实际操作来深入学习。 在Struts2框架中,主要有以下几个关键知识点: 1. **Action类**:它是业务逻辑处理的主要载体,...
总之,通过模拟Struts的小项目,开发者可以亲手实践MVC模式,理解Struts框架如何协调不同的组件,以及如何有效地组织和管理Java Web应用的各个部分。这个过程有助于提升对Web开发的理解,为进一步学习其他框架,如...
总的来说,Struts2漏洞利用工具2019版 V2.3是一个强大的安全工具,可以帮助我们理解和处理Struts2框架的潜在安全问题。然而,它应该仅由授权的安全专业人员使用,以避免误操作导致的系统破坏。正确使用这些工具,...
拦截器是Struts2框架中的核心组件之一,它在MVC(Model-View-Controller)架构中扮演着重要角色,实现了灵活的业务逻辑处理和请求流程控制。本文将深入探讨Struts2拦截器的工作原理及其应用。 首先,我们要理解什么...
这个"Struts原理学习(模拟)"的资源提供了一种实践的方式,帮助我们深入理解Struts框架的工作原理。Struts通过MVC(Model-View-Controller)设计模式,实现了业务逻辑与表现层的分离,从而提升了开发效率和代码的可...