`

定制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 --------------

分享到:
评论

相关推荐

    struts的教程.doc

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

    java Struts教程

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

    struts 教程 很好很详细

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

    struts 入门教程

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

    struts2.0.jar

    Struts 2.0框架中出现的许多特性旨在让Struts更容易使用: · 改进的设计: 与Struts 1相比,...· 易于定制的控制器: Struts 1允许请求处理程序可按照模块来定制,在Struts 2中,需要的话,可以按照动作来定制请求处理

    JSP程序设计课件包含Hibernate,Struts的介绍

    它是开源框架:Struts 是 Apache 软件基金会资助的一个为开发基于MVC模式的Web应用而设计的一个开源框架.Struts框架中的各种Web组件:它是利用Servlet、JavaBean和JSP、定制标签库等Web组件、XML等方面的技术来实现...

    Struts2的使用-实验报告.docx

    Struts 2 框架的主要特点在于其 MVC(Model-View-Controller)架构,它将应用程序划分为三个核心组件,分别是模型(Model)、视图(View)和控制器(Controller)。这种分层结构有助于代码的组织和维护,同时也促进...

    Java Struts教程

    概述...................................................................组件.........................................................................6 Struts ActionServlet控制器对象.......................

    Struts in Action中文版

    2.2.3. Struts控制器组件................................................................................................39 2.2.4. 用 Struts 开发Web 应用...................................................

    struts in Action

    2.2.3. Struts 控制器组件................................................................................................39 2.2.4. 用Struts 开发Web 应用....................................................

    达内java培训目录

    Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。 熟练掌握Struts2核心...

    jsp毕业设计,很好用啊

    如果你是一个程序员,则会对第三部分详细介绍的高级主题倍加推崇,例如如何使用流行的Apache Struts MVC(模型-视图-控制器)框架将Servlet和JavaBeans组件与JSP集成,以及如何使用JSP API开发定制标记库,在此还...

    jsp + servlet + javaben实现springmvc

    MVC是一种软件架构的思想, 将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的JavaBean,作用是处理数据 V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据 C:...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    6.2.1 回顾MVC-控制器 6.2.2 Navigation HandleI-幕后主管 6.2.3 Faces动作方法说明 6.3 构建导航规则 6.3.1 静态导航示例 6.3.2 动态导航示例 6.4 更复杂的导航示例 6.4.1 使用通配符 6.4.2 使用条件导航 6.4.3 ...

    java web 开发详解

     优点: 架构简单——易于扩展 标记库很容易利用FreeMarker或者Velocity来定制 基于控制器或者基于页面的导航 缺点: 文档组织得很差 对新特征过分关注 Tapestry  优点: 一旦学会它,将极大地提高生产率 HTML模板...

    JAVA程序开发大全---上半部分

    2.3.3 定制编辑器 36 2.3.4 定制工作台公共设置 36 2.4 MyEclipse中常用操作 36 2.4.1 配置JRE 36 2.4.2 设置编译路径 37 2.4.3 设置项目属性 38 2.5 本章小结 39 第3章 Java程序的开发 40 3.1 使用JDT编写Java项目 ...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    6.2.1 回顾MVC-控制器 6.2.2 Navigation HandleI-幕后主管 6.2.3 Faces动作方法说明 6.3 构建导航规则 6.3.1 静态导航示例 6.3.2 动态导航示例 6.4 更复杂的导航示例 6.4.1 使用通配符 6.4.2 使用条件导航 6.4.3 ...

    基于struts+hibernate+spring+easyui+mysql的网上商城项目实战源码.zip

    MySQL提供了一系列安全措施,如用户账户管理、访问权限控制、SSL/TLS加密连接、审计日志等功能,确保数据的安全性和合规性。同时,MySQL附带了一系列管理工具,如MySQL Server、MySQL Workbench、MySQL Shell等,...

Global site tag (gtag.js) - Google Analytics