- 浏览: 1356874 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (4)
- Struts1 (16)
- Spring (9)
- Hibernate (5)
- AJAX (16)
- MS Server (9)
- Oracle (35)
- 测试技术 (5)
- 其他 (37)
- JSF (1)
- EJB (5)
- ASP.NET (9)
- iBATIS (5)
- Struts Spring Hibernate (2)
- HTML (12)
- Eclipse使用 (5)
- 设计模式 (5)
- JSP (32)
- 正则表达式 (2)
- 服务器 (12)
- Java基础 (48)
- MySQL (4)
- 面试 (22)
- UML (1)
- 数据结构 (3)
- Ant (2)
- 规范 (4)
- JavaScript (29)
- 软件使用及技巧 (25)
- PHP (1)
- DWR (3)
- FreeMarker (1)
- ExtJs (17)
- JFreeChart (9)
- Reports (2)
- JavaException (1)
- Java Mail (1)
- Flex (9)
- 异常 (12)
- Log4j (2)
- WebService (1)
- jQuery (1)
- Sybase (2)
- myeclipse_plugin (2)
- Linux (5)
- jbpm (2)
- SCM (1)
- mongoDB (1)
最新评论
-
lihua2008love:
<typeAlias alias="User& ...
IBATIS简单操作 -
lihua2008love:
...
关于项目框架设计的一点学习 -
c_jinglin:
我使用<OBJECT CLASSID="cls ...
这就是个静态页面通过js控制mscomm对某com设备进行访问的例子. -
zlbjava:
赞,用了还不错
java获取请求的ip地址,并解析ip所属地区 -
完美天龙:
cs842813290 写道楼主,我明白的地方:在链表已有N个 ...
JAVA实现双向链表
③ 调用 initServlet(); 从web.xml中加载ActionServlet的初始化参数如servlet-name,加载DTD文件并把其放入HashMap缓存,读取并解析web.xml的内容
// Remember our servlet name
getServletConfig().getServletName();
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name> <!-- 得到"config"参数-->
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>convertNull</param-name> <!-- 得到"convertNull"参数-->
<param-value>true</param-value>
</init-param>
.......
</servlet>
// Prepare a Digester to scan the web application deployment descriptor
Digester digester = new Digester();
// 把当前的 ActionServlet 对象放入到解析堆栈中
digester.push(this);
// 指明要考虑命名空间
digester.setNamespaceAware(true);
// 缺省值[false] ,解析器只是检查XML是否格式良好(well formed)
digester.setValidating(false);
// Register our local copy of the DTDs that we can find
// struts 可使用 struts-core-1.3.5.jar 包 中的DTD中来处理struts配置文件,这样可适用于那些没有连接到internet的应用环境
for (int i = 0; i < registrations.length; i += 2) {
URL url = this.getClass().getResource(registrations[i + 1]);
if (url != null) {
// 读取DTD文件并把其放入 HashMap 缓存
digester.register(registrations[i], url.toString());
}
}
/************************************************************
// 一些文档类型定义,用来验证相应的配置文件如struts-config.xml是否正确
protected String[] registrations =
{
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN",
"/org/apache/struts/resources/struts-config_1_0.dtd",
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN",
"/org/apache/struts/resources/struts-config_1_1.dtd",
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN",
"/org/apache/struts/resources/struts-config_1_2.dtd",
"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN",
"/org/apache/struts/resources/struts-config_1_3.dtd",
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",
"/org/apache/struts/resources/web-app_2_3.dtd"
}; // ③ initServlet();
************************************************************/
// Configure the processing rules that we need
// 运行时,digester 就会调用 ActionServlet中的 addServletMapping() 方法,并传入两个参数
digester.addCallMethod("web-app/servlet-mapping", "addServletMapping", 2);
digester.addCallParam("web-app/servlet-mapping/servlet-name", 0);
digester.addCallParam("web-app/servlet-mapping/url-pattern", 1);
得到
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
/************************************************************
// 来判断当前 servlet 名称是否为正在运行的 servlet 名称,如是,就把 url-pattern 作为 servletMapping
public void addServletMapping(String servletName, String urlPattern) {
if (servletName == null) {
return;
}
if (servletName.equals(this.servletName)) {
if (log.isDebugEnabled()) {
log.debug("Process servletName=" + servletName
+ ", urlPattern=" + urlPattern);
}
this.servletMapping = urlPattern;
}
}
************************************************************/
// 读取配置文件web.xml的内容
InputStream input = getServletContext().getResourceAsStream("/WEB-INF/web.xml");
// 如找不到/WEB-INF/web.xml文件,则报错
if (input == null) {
log.error(internal.getMessage("configWebXml"));
throw new ServletException(internal.getMessage("configWebXml"));
}
/************************************************************
// 报错信息定义在org\apache\struts\action\ActionResources.properties中
configWebXml=The /WEB-INF/web.xml was not found.
************************************************************/
// 解析input流文件,每读到一个节点元素就触发一个事件
digester.parse(input);
注: Digester 是一个基于 DOM 的 SAX 实现的类,它是事件触发的,可以将XML文件转换为任意的Java对象,支持规则的对任意XML文档的处理。原先是struts项目的一部分,后因其通用性而划归Commons子项目。
// 把servletMapping存储到servletContext中,属性名为Globals.SERVLET_KEY ( " org.apache.struts.action.SERVLET_MAPPING " )
if (servletMapping != null) {
getServletContext().setAttribute(Globals.SERVLET_KEY,servletMapping);
}
发表评论
-
项目的热部署
2008-05-21 16:13 1363<Connector port=&q ... -
一个帐号同一时间只能一个人登录
2008-05-19 21:43 2278对于一个帐号在同一时间只能一个人登录,可以通过下面的方法实现: ... -
Struts 源码学习之ActionServlet (四)
2008-05-19 21:21 1634Ⅳ /* 循环struts配置文件(用",&quo ... -
Struts 源码学习之ActionServlet (三)
2008-05-19 21:20 2629④ 调用 initChain(); 读取web.xml中命令链 ... -
Struts 源码学习之ActionServlet ( 一)
2008-05-19 20:31 2551Struts 源码最新版本为 struts-1.3.8-src ... -
struts 学习笔记之MVC模式
2008-05-19 20:22 1787struts 中的MVC架构如下: View ... -
Struts 学习笔记之ActionForm
2008-05-19 20:13 7489Struts 学习笔记之ActionForm Stru ... -
Struts框架初始化流程
2008-05-19 11:38 1579重新看了一下孙卫琴老师的《精通Struts》,总结了一下Str ... -
RequestProcessor类的process()方法执行流程
2008-05-19 11:37 1886当ActionServlet实例接收到 ... -
Struts 基本工作流程
2008-05-17 15:55 1650在 Struts 對 MVC / Model 2 的實現方式中 ... -
struts工作原理的解释
2008-05-15 22:40 1760Struts 使用 Model 2 架构。Struts 的Ac ... -
LookupDispatchAction使用方法
2008-05-15 22:30 2583名词解释: LookupDispatchAction继承 ... -
Struts 1.1,1.2中DispatchAction的用法详解
2008-05-15 22:26 5445名称解释:DispatchAction就是在struts-co ... -
Struts 体系结构与工作原理(图)
2008-05-08 01:54 2444Struts 体系结构是目前基于 java 的 web ... -
一个struts+sql server得分页(存储过程版)
2008-05-07 22:35 1569sql server分页使用存储过程要更高效些 下面这个存储过 ...
相关推荐
### Struts 源码学习之ActionServlet #### 一、引言 在Java Web开发领域,Struts框架因其简洁的MVC(Model-View-Controller)架构模式而备受开发者青睐。本文旨在深入剖析Struts框架的核心组件之一——`Action...
通过对`struts源码学习.pdf`文件中的内容分析,我们可以深入了解Struts框架内部的工作原理,尤其是`RequestProcessor`类和`ModuleConfig`接口的关键作用。这些知识对于理解和优化基于Struts的应用程序至关重要,同时...
总的来说,深入学习Servlet和Struts的源码,不仅能够帮助开发者理解这两个组件的工作原理,还能提升他们的问题排查能力,以及进行更高效、更灵活的Java Web应用开发。通过实践和理解这些源码,你将能够更好地适应...
ActionServlet解析请求,查找与之对应的ActionMapping。 3. 根据ActionMapping,创建ActionForm实例,填充请求参数。 4. 调用Action的execute方法,执行业务逻辑。 5. Action返回一个ActionForward对象,指示...
在Struts框架中,核心组件包括Action、ActionForm、ActionServlet、配置文件(struts-config.xml)以及各种拦截器。Action是业务逻辑的载体,ActionForm用于收集用户输入,ActionServlet作为Struts的核心控制器,...
Struts通过Action类实现了对Servlet请求的分发,ActionForm负责收集和验证表单数据,而Model代表业务对象,View则负责展示数据。这种分离使得代码更易于维护和测试。Struts还提供了强大的国际化、异常处理、数据校验...
`Action`类是业务逻辑的入口点,`ActionForm`用于收集和验证用户输入,`ActionServlet`是Struts的控制器,负责调度请求。 2. **org.apache.struts.config**:配置相关的类,如`ModuleConfig`和`ActionConfig`,它们...
学习和理解Struts的源码可以帮助开发者深入掌握MVC架构的原理,以及如何有效地组织和管理Web应用的各个层面。此外,对于想要从事Java Web开发的人来说,熟悉Struts这样的经典框架,有助于理解后来的Spring MVC、...
Struts框架的核心组件包括Action、ActionForm、ActionServlet、Config、Tiles等。Action是处理用户请求的中心,它接收表单数据并调用业务逻辑;ActionForm用于封装表单数据,提供验证功能;ActionServlet作为控制器...
ActionServlet是Struts1的核心组件,它的生命周期分为初始化、拦截请求和销毁三个阶段。在初始化阶段,`init()`方法执行了一系列关键步骤: 1. `initInternal()`方法初始化内部资源,如国际化设置。它包含了英文和...
学习Struts 2源码,你将能了解到以下知识点: - MVC设计模式的实现。 - Struts 2的拦截器机制,如何自定义拦截器以实现权限控制、日志记录等功能。 - 动作和结果的配置,以及如何使用OGNL表达式进行数据绑定。 - ...
学习Struts源码有助于开发者深入理解其内部工作机制,例如: - 如何解析struts-config.xml并构建ActionMapping和ActionForm实例。 - 请求是如何被ActionServlet接收并分发到对应的Action的。 - Action是如何处理...
3. **ActionServlet**:Struts的入口点,它是一个Servlet,负责处理HTTP请求,调用相应的Action类执行业务逻辑。 4. **配置文件**:主要包括struts-config.xml,定义了Action、ActionMapping、FormBean等配置,是...
北大青鸟的这份文档是为了帮助学习者入门和精通Struts所编写的,包含了对Struts源码的详细解析。 首先,了解Struts的核心控制器ActionServlet是必要的。ActionServlet继承自javax.servlet.http.HttpServlet类,负责...
总的来说,Struts 1.2源码的学习将帮助你理解Web应用程序的生命周期,MVC模式的实现细节,以及如何通过配置文件和代码协作来构建可扩展的Web应用。深入研究源码,不仅可以提升你的编程技能,也能让你更好地应对实际...
学习Struts1源码有助于开发者更好地理解Web应用的架构设计,以及MVC模式的实现细节,对于提升Java Web开发技能和解决问题具有很大帮助。同时,虽然Struts1已逐渐被更新的框架如Struts2和Spring MVC取代,但其设计...
通过分析提供的源码,可以更好地了解Struts2的工作流程,学习如何组织Action、Interceptor、配置文件等,从而提升开发能力。在实践中不断探索,可以逐步熟练运用Struts2进行高效、稳定的Web应用开发。
1. **ActionServlet**:这是Struts的核心控制器,它是Servlet的一个子类,负责接收HTTP请求,并根据配置文件(struts-config.xml)将请求转发到相应的Action。 2. **ActionForm**:ActionForm对象用于封装来自视...
- **web.xml**:这是Servlet容器的部署描述符,其中包含了Struts的初始化参数,如ActionServlet的配置等。 **核心组件**: - **ActionServlet**:这是Struts框架的入口点,继承自Servlet,负责解析请求,执行Action...
- **Controller控制器**:Struts 2的ActionServlet负责接收请求,根据配置调用相应的Action。 4. **Action上下文(ActionContext)** - 它是Struts 2中所有请求处理过程的上下文对象,保存了当前请求的相关信息,...