struts2当请求一个action时:
直接进入:StrutsPrepareAndExecuteFilter的doFilter所以struts2是基于拦截器实现的。
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
prepare.setEncodingAndLocale(request, response);
prepare.createActionContext(request, response);
prepare.assignDispatcherToThread();
if ( excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
chain.doFilter(request, response);
} else {
request = prepare.wrapRequest(request);
//根据请求的uri封装为一个ActionMapping ActionMapping源码如下:
/* public class ActionMapping {
private String name;
private String namespace;
private String method;
private String extension;
private Map<String, Object> params;
private Result result;
*/
//这个方法里面有一步判断如果不是以<constant name="struts.action.extension" value="do,action,"></constant>中的配置结尾的mapping就会为null
//就会直接放行该方法源码如下:
/**
protected String dropExtension(String name, ActionMapping mapping) {
if (extensions == null) {
return name;
}
for (String ext : extensions) {
if ("".equals(ext)) {
// This should also handle cases such as /foo/bar-1.0/description. It is tricky to
// distinquish /foo/bar-1.0 but perhaps adding a numeric check in the future could
// work
int index = name.lastIndexOf('.');
if (index == -1 || name.indexOf('/', index) >= 0) {
return name;
}
} else {
String extension = "." + ext;
if (name.endsWith(extension)) {
name = name.substring(0, name.length() - extension.length());
mapping.setExtension(ext);
return name;
}
}
}
return null;
*/
ActionMapping mapping = prepare.findActionMapping(request, response, true);
//判断mapping如果为空,放行
if (mapping == null) {
boolean handled = execute.executeStaticResourceRequest(request, response);
if (!handled) {
chain.doFilter(request, response);
}
} else {
//进入主要拦截方法了
execute.executeAction(request, response, mapping);
}
}
} finally {
prepare.cleanupRequest(request);
}
}
分享到:
相关推荐
本文将深入探讨Struts2的源码分析,特别是关于StrutsPrepareAndExecuteFilter的初始化过程,这是Struts2的核心组件之一,负责处理HTTP请求。 首先,我们来看`StrutsPrepareAndExecuteFilter`的初始化。这个过滤器...
2. `getModuleConfig()`获取封装了请求的`ModuleConfig`对象。 3. 根据`ModuleConfig`获取Action处理类的实例,并调用其`process()`方法。 在`process()`方法内部: 1. `processPath()`解析请求的URI路径,用于...
7. **国际化与本地化**:Struts支持多语言环境,源码中的`org.apache.struts.util`包包含了一些本地化工具类,如MessageResources,用于加载和获取不同语言的资源文件。 8. **异常处理**:在`org.apache.struts....
在struts-config.xml文件中,每个ActionMapping对应一个请求URI,它包含了Action类的全限定名、ActionForm的类名以及Action完成后可能转发的ActionForward列表。当ActionServlet接收到请求时,会查找ActionMapping来...
此外,Struts还提供了ActionMapping、ActionForward等工具来帮助管理请求的流向和控制视图的呈现。 使用Struts1.x框架有以下优势: 1. 可靠性:业务逻辑和表示层分离,改动视图不会影响到后台代码。 2. 高重用性...
### Struts分页显示源码实例解析 #### 一、背景介绍 在Web应用开发中,特别是使用MVC架构的框架如Struts时,分页显示是常见的需求之一。分页不仅能提高用户体验,还能减轻服务器压力。本文档将详细介绍如何在...
### Struts2自定义标签详解 #### 一、引言 在Java Web开发中,Struts2框架因其灵活的架构和强大的功能而受到广大开发者们的青睐。其中,自定义标签是Struts2的一个强大特性,它允许开发者创建自己的HTML标签,以...
2. **创建ActionForm**:创建一个继承自Struts1的`ActionForm`类,如`UploadForm`,并添加一个`File`类型的属性,用于存储上传的文件信息: ```java public class UploadForm extends ActionForm { private File...
2. **ActionServlet接收请求**:ActionServlet作为前端控制器接收请求,并通过解析请求的URI来定位到对应的ActionMapping。 3. **查找ActionMapping**:根据ActionMapping中配置的信息(如路径、类型等),Action...
2. 请求到达ActionServlet,ActionServlet解析请求URI,找到对应的ActionMapping。 3. ActionServlet将请求参数绑定到ActionForm对象,并传递给对应的Action类实例。 4. Action类执行业务逻辑,可能涉及数据库操作。...
ActionServlet根据请求URI和ActionMapping对象决定调用哪个Action,并通过ActionForward指定响应页面。 总的来说,"经典struts+hiberante+spring课件"涉及的知识点主要包括Java Web开发中的Struts、Hibernate和...
### Struts文件上传知识点 #### 一、Struts框架简介 Struts是一个开源的MVC(Model-View-Controller)框架,它简化了基于Java的Web应用程序开发过程。Struits框架提供了一种结构化的方式来组织代码,使得开发更加...
2. **查找映射**:`ActionServlet`根据请求的URI,查找`struts-config.xml`中的`ActionMapping`配置,确定应该调用哪个`Action`。 3. **实例化ActionForm**:如果`ActionMapping`中指定了`ActionForm`,`Action...
### Struts+Hibernate查询所有记录 #### 一、概述 在Java Web开发中,Struts与Hibernate是非常流行的框架组合,用于构建复杂的企业级应用。本文将详细介绍如何利用Struts和Hibernate来实现对Oracle数据库中所有...
<%@ taglib prefix="s" uri="/struts-tags" %> <form action="<s:url action='test'/>" method="post"> 请输入数据"/> 提交"/> ``` 7. **运行和测试**:部署应用到服务器,访问`test.jsp`,填写表单并提交,...
在Struts中,ActionForm对象用于封装用户表单数据,并且可以实现表单数据的验证功能。当表单数据不符合预期时,可以通过ActionForm对象来捕获这些错误,并将其返回给用户。下面将详细介绍如何在ActionForm中实现错误...
在Struts中,`ActionServlet`扮演了核心的角色,它作为控制器,负责接收客户端的请求,并根据请求的URI或路径决定由哪个`Action`来处理这些请求。当`ActionServlet`接收到请求后,会通过配置文件(struts-config.xml)...
在Struts中,ActionForm Bean是用来封装表单数据的对象。你需要在ActionForm类中创建一个与`property`属性对应的字段,比如: ```java public class YourForm extends ActionForm { private String selectedOption...
Struts原理、开发及项目实施 Holen 2002-9-12 <br/>1、 摘要 2、 关键词 3、 Framework 4、 Struts的起源 5、 Struts工作原理 6、 Struts安装 7、 一个实例 8、 Struts优缺点...