`

定制Struts控制器组件

    博客分类:
  • java
阅读更多
在Struts API中,org.apache.struts.action.RequestProcessor类真正包含了Struts控制器在处理servlet请求时所遵循的控制逻辑。控制器核心组件ActionServlet就是通过调用RequestProcessor对象的process()方法来委托其处理客户端请求的,该方法格式如下:

public void process(public void process(

javax.servlet.http.HttpServletRequest request,

javax.servlet.http.HttpServletResponse response)

throws java.io.IOException, javax.servlet.ServletException{ … }

RequestProcessor类中还定义了多个processXXX()方法,process()方法正是通过调用他们来具体的处理工作的。下表中对其中重要的几个做简单介绍:

表1 RequestProcessor类的主要处理方法

方 法 功 能

protected String processPath() 获取客户端请求的路径URI
protected ActionForm processActionForm() 获取当前请求表单所映射的ActionForm Bean
protected ActionMapping processMapping() 根据请求URI获取所需的映射信息
protected Action processActionCreate() 初始化相应的ActionBean
protected ActionForward processActionPerform() 调用Action Bean的execute()方法处理请求
protected void processForwardConfig() 处理由Action Bean的execute()方法返回的ActionForward对象。


如果要定制ActionServlet的行为规则,其实应从RequestProcessor这个RequestProcessor类着手。要开发自己的RequestProcessor类以实现定制的控制逻辑,应遵循以下步骤:
1) 创建一个子类继承org.apache.struts.action.RequestProcessor类,在该子类中显式定义(或使用缺省的)无参、方法体为空的构造方法。
2) 重写所需要的方法,加入定制功能。
3) 将该子类编译后得到的class文件保存到Struts应用程序的WEB-INF/class/目录下
4) 修改配置文件struts-config.xml,在其中加入一个名为<controller>的元素,用以指定客户定制的RequestProcessor类。
在展示一个具体的实现定制功能的例子之前,有必要介绍一下RequestProcessor类中定义的另外几个有关方法:
 protected void log(java.lang.String message){…}
功能:将参数String对象message的内容存入当前应用程序日志文件。
 protected void log(java.lang.String message, java.lang.Throwable exception) {…}
功能:将参数String对象message和异常对象exception所封装的信息存入当前应用程序日志文件。
 protected boolean processPreprocess(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) {…}
功能:专门用于在子类中被重写,加入由开发者定制的预处理功能。
在RequestProcessor类中定义的processPreprocess()方法什么也不做,只是简单返回一个boolean类型值true,用以告知RequestProcessor继续后续处理程序。在定制RequestProcessor类时通常会重写此方法,注意一定要在方法的结尾返回true,如果重写如果返回值为false,则RequestProcessor对象终止对请求的处理,将控制权送回给ActionServlet的doPost()或doGet()方法。

下面给出用户定制RequestProcessor组件的具体实现步骤:
1)为已有的Struts应用程序创建用户自己的RequestProcessor类,重写其中的processPreprocess()方法,加入所需的控制逻辑。范例源代码如下:

源文件:MyRequestProcessor.java

package test;

import java.util.Enumeration;

import javax.servlet.http.*;

import org.apache.struts.action.RequestProcessor;

public class MyRequestProcessor extends RequestProcessor {

public MyRequestProcessor() {}

public boolean processPreprocess(HttpServletRequest request,

HttpServletResponse response) {

log("-------------- My Logging Start--------------");

log("Request URI = " + request.getRequestURI());

log("Context Path = " + request.getContextPath());

Enumeration headerNames = request.getHeaderNames();

log("Request Header:");

while (headerNames.hasMoreElements()) {

String headerName =(String)headerNames.nextElement();

Enumeration headerValues = request.getHeaders(headerName);

while (headerValues.hasMoreElements()) {

String headerValue =(String)headerValues.nextElement();

log("\t" + headerName + " = " + headerValue);

}

}

log("Locale = " + request.getLocale());

log("Method = " + request.getMethod());

log("Path Info = " + request.getPathInfo());

log("Protocol = " + request.getProtocol());

log("Remote Address = " + request.getRemoteAddr());

log("Remote Host = " + request.getRemoteHost());

log("Remote User = " + request.getRemoteUser());

log("Requested Session Id = "

+ request.getRequestedSessionId());

log("Scheme = " + request.getScheme());

log("Server Name = " + request.getServerName());

log("Server Port = " + request.getServerPort());

log("Servlet Path = " + request.getServletPath());

log("Secure = " + request.isSecure());

log("-------------- My Logging End --------------");

return true;

}

}


2)编译源文件MyRequestProcessor.java,将所生成的字节码文件(包括所在的package子目录)保存到Struts 应用程序的"WEB-INF/classes/"目录下。
3)修改此Struts应用程序配置文件struts-config.xml,在其中加入<controller>元素:

源文件:struts-config.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"

"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

……

<controller processorClass="test.MyRequestProcessor" />

</struts-config>


说明:其他组成页面、类设计和应用程序配置均不需做改变。
4)发布Struts应用程序,并通过客户端浏览器访问该应用程序。
5)打开Web服务器日志文件<WAS_HOME>/logs/localhost_log.<当天日期>.txt,可以看到新加入的用户定制信息:
2004-09-24 00:30:28 StandardContext[/myStrutsApp3]action:
-------------- My Logging Start--------------
Request URI = /myStrutsApp3/regist.do
Context Path = /myStrutsApp3
Request Header:
accept = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel,
application/msword , application/x-shockwave-flash, */*
referer = http://localhost:8080/myStrutsApp3/
accept-language = zh-cn
content-type = application/x-www-form-urlencoded
accept-encoding = gzip, deflate
user-agent = Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 5.1; .NET CLR 1.1.4322)
host = localhost:8080
content-length = 20
connection = Keep-Alive
cache-control = no-cache
cookie = JSESSIONID=FD8A69F16E329A362DB219596897D6DA
Locale = zh_CN
Method = POST
Path Info = null
Protocol = HTTP/1.1
Remote Address = 127.0.0.1
Remote Host = 127.0.0.1
Remote User = null
Requested Session Id = FD8A69F16E329A362DB219596897D6DA
Scheme = http
Server Name = localhost
Server Port = 8080
Servlet Path = /regist.do
Secure = false
-------------- My Logging End --------------

分享到:
评论

相关推荐

    [精选]控制器组件和控制器机制概述.pptx

    本文将深入探讨控制器组件和控制器机制,以帮助你更好地理解和应用Struts框架。 首先,控制器在MVC模式中起到桥梁的作用,它接收用户的请求,解析这些请求,并调用相应的模型组件去执行业务逻辑。在Struts框架中,...

    Struts2 校验器

    在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...

    struts01:描述一下ssh整体、struts核心控制器

    在Struts 2中,核心控制器组件被称为FilterDispatcher。与Struts 1的ActionServlet不同,FilterDispatcher是一个Servlet过滤器,而不是一个Servlet。这个改变使得Struts 2可以更好地与其他Web框架集成,因为它可以在...

    struts的教程.doc

    Struts ActionServlet控制器对象 8 Struts Action Classes 8 Struts Action Mapping 9 使用ActionForward导航 10 Struts ActionForm Bean捕获表单数据 11 Struts的其他组件 12 Validation Framework for ...

    Struts1万能文件操作组件

    在Struts1的MVC架构下,模型层处理文件操作逻辑,视图层展示结果,控制器协调两者。FOS组件使模型层的文件操作更加简洁,通过Action类调用组件的方法,处理文件的增删改查操作。 6. **安全考虑**: 使用任何文件...

    struts2拦截器

    Struts2是一个非常流行的Java Web框架,它提供了一种组织和控制MVC(模型-视图-控制器)应用程序的方式。在Struts2中,拦截器(Interceptor)是核心功能之一,用于增强应用的功能和处理业务逻辑。拦截器是基于AOP...

    浅谈Struts框架技术.

    ActionForm用于在控制器和视图之间传递数据,Action执行完毕后返回ActionForward,指示用户请求应被转发到哪个视图组件。 **Struts工作原理** 当用户发送请求时,ActionServlet首先拦截请求,依据struts.config.xml...

    Struts书籍 Struts_In_Action_中文版

    **2.2.3 Struts控制器组件** Struts的控制器组件是其核心之一,负责接收用户的请求、调用业务逻辑层处理数据,并将结果返回给视图层展示。 **2.2.4 用Struts开发Web应用** 这部分详细讲解了如何利用Struts框架来...

    Struts 2 自定义MVC 框架

    这一步骤可以理解为定制控制器的行为。 2. **创建Action类**:根据业务需求编写Action类,实现业务逻辑。Action类是模型和控制器的接口,处理用户请求并返回结果。 3. **定义结果类型**:配置Result来决定Action...

    Struts应用开发基础 入门

    总结来说,Struts框架是J2EE Web开发的重要工具,它以MVC设计模式为基础,通过提供标准化的组件和控制器,简化了开发流程,提高了开发效率,同时保持了代码的可维护性和可扩展性。学习和掌握Struts对于Java Web...

    Struts框架讲解

    虽然Struts框架提供了控制器组件,但它并不强制规定模型和视图的具体实现。开发者可以选择适合的持久化技术和表示层技术与Struts集成。例如,Struts可以很好地与EJB配合处理业务逻辑,与JSP或Velocity模板结合生成...

    struts2 ,struts2 demo

    Struts2是一个强大的Java EE应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的Web应用。这个“struts2,struts2 demo”很显然是一个包含Struts2框架示例代码的压缩包,旨在帮助开发者理解和学习如何在实际...

    struts教程的详细解答

    - 控制器(Controller):Struts的核心组件ActionServlet,负责接收用户请求,调用相应的Action类,并控制应用程序的流程。 四、Struts的基本组件包 Struts框架包含了多个组件包,如: - `struts-core`:包含基础...

    MVC框架struts1.2.9

    3. **Action**: 控制器组件,执行具体的业务逻辑,通常每个Action对应一个用户请求。 4. **ActionMapping**: 配置在struts-config.xml中,定义Action和ActionForm之间的映射关系以及请求的转发路径。 5. **Tiles**...

    struts2的各种jar包

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用程序。它在Java社区中广泛使用,因其灵活性、可扩展性和丰富的插件库而受到赞誉。Struts2的核心是Action类,它处理HTTP...

    struts2框架模板

    - **配置web.xml**:添加Struts2的前端控制器DispatcherServlet。 - **编写struts.xml**:定义Action、结果类型和拦截器栈。 - **创建Action类**:继承自ActionSupport,实现业务逻辑方法。 - **创建JSP页面**:...

    Struts在行动2

    Struts控制器组件主要包括以下几部分: - **超链接和表单**:开发人员可以通过定义超链接和表单来实现用户与Web应用程序的交互。这些超链接和表单通常指向特定的动作。 - **定制动作**:每个动作都是一个实现了`...

    Struts2工作流程

    Struts2是一个流行的Java Web开发框架,它遵循MVC(模型-视图-控制器)设计模式,用于构建可维护性和可扩展性高的Web应用程序。在深入理解Struts2的工作流程之前,我们需要先了解一些基本概念。 1. **MVC模式**: ...

    struts2讲义

    所有Web层框架都会基于前端控制器模式,这是一种常见的设计模式,用于集中处理所有的请求,并将它们分发到适当的组件进行处理。在Struts2中,前端控制器由`StrutsPrepareAndExecuteFilter`扮演,它负责拦截所有请求...

    Struts in Action 中文版.pdf

    - **Struts控制器组件**:Struts的核心是其控制器组件,它负责处理HTTP请求并将数据传递给模型对象或视图组件。 - **Struts开发Web应用流程**: - 用户通过浏览器发送请求到服务器。 - 服务器将请求交给Struts控制...

Global site tag (gtag.js) - Google Analytics