- 浏览: 890608 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
<controller>用于配置ActionServlet. 属性 描述
bufferSize 指定上载文件的输入缓冲的大小。该属性为可选项,默认值为4096.
className 指定和<controller>元素对应的配置类。默认为org.apache.struts.config.ControllerConfig.
contentType 指定响应结果的内容类型和字符编码。该属性为可选项,默认值为text/html。如果在Action和JSP网页中也设置了内容类型和字符编码,将会覆盖该设置。
locale 指定是否把Locale对象保存到当前用户的Session中。默认值为false.
processorClass 指定负责处理请求的Java类的完整类名。默认值为org.apache.struts.action.RequestProcessor。如果把此项设置为自定义的类,那么应该保证该类扩展了org.apache.struts.action.RequestProcessor类。
tempDir 指定处理文件上传的临时工作目录。如果此项没有设置,将采用Servlet容器为Web应用分配的临时工作目录。
nochache 如果为true,在响应结果中将加入特定的头参数 :Pragma, Cache-Control和Expires,防止页面被存储在客户浏览器的缓存中。默认值为false.
如果应用包含多个子应用,可以在每个字应用的Struts配置文件中配置<controller>元素。这样,尽管这些子应用共享同一个ActionServlet对象,但是他们可以使用不同的RequestProcessor类。
以下是<controller>元素的配置代码示例:
<controller contentType="text/html;charset=UTF-8" locale="true" processorClass="CustomRequestProcessor"/>
定制Struts控制器组件
在Struts API中,org.apache.struts.action.RequestProcessor类真正包含了Struts控制器在处理servlet请求时所遵循的控制逻辑。控制器核心组件ActionServlet就是通过调用RequestProcessor对象的process()方法来委托其处理客户端请求的,该方法格式如下:
public void process(
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException{ … }
RequestProcessor类中还定义了多个processXXX()方法,process()方法正是通过调用他们来具体的处理工作的。下表中对其中重要的几个做简单介绍:
主要处理方法
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 --------------
bufferSize 指定上载文件的输入缓冲的大小。该属性为可选项,默认值为4096.
className 指定和<controller>元素对应的配置类。默认为org.apache.struts.config.ControllerConfig.
contentType 指定响应结果的内容类型和字符编码。该属性为可选项,默认值为text/html。如果在Action和JSP网页中也设置了内容类型和字符编码,将会覆盖该设置。
locale 指定是否把Locale对象保存到当前用户的Session中。默认值为false.
processorClass 指定负责处理请求的Java类的完整类名。默认值为org.apache.struts.action.RequestProcessor。如果把此项设置为自定义的类,那么应该保证该类扩展了org.apache.struts.action.RequestProcessor类。
tempDir 指定处理文件上传的临时工作目录。如果此项没有设置,将采用Servlet容器为Web应用分配的临时工作目录。
nochache 如果为true,在响应结果中将加入特定的头参数 :Pragma, Cache-Control和Expires,防止页面被存储在客户浏览器的缓存中。默认值为false.
如果应用包含多个子应用,可以在每个字应用的Struts配置文件中配置<controller>元素。这样,尽管这些子应用共享同一个ActionServlet对象,但是他们可以使用不同的RequestProcessor类。
以下是<controller>元素的配置代码示例:
<controller contentType="text/html;charset=UTF-8" locale="true" processorClass="CustomRequestProcessor"/>
定制Struts控制器组件
在Struts API中,org.apache.struts.action.RequestProcessor类真正包含了Struts控制器在处理servlet请求时所遵循的控制逻辑。控制器核心组件ActionServlet就是通过调用RequestProcessor对象的process()方法来委托其处理客户端请求的,该方法格式如下:
public void process(
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException{ … }
RequestProcessor类中还定义了多个processXXX()方法,process()方法正是通过调用他们来具体的处理工作的。下表中对其中重要的几个做简单介绍:
主要处理方法
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 --------------
发表评论
-
struts2 拦截器获取 request
2011-11-26 23:23 1044ActionContext actionContext = ... -
Struts2与DWR在项目中的共存解决方案
2011-09-10 22:35 899在struts2.properties中配置即可. strut ... -
Struts串讲
2011-02-11 10:40 1226Struts串讲 一、struts概述 1、Strut ... -
struts2 配置文件中,一个package中有多个name属性相同的action的执行
2011-01-26 08:53 1267如果在一个package中有多个name属性相同的action ... -
Struts1.x note
2010-10-26 17:32 1203转自http://javaee-dev.iteye.com/ ... -
密码MD5加密及日期转换器
2010-10-26 10:21 2033今天继续学习bbs项目,汤老师讲了会员注册的实现,要对密码进行 ... -
传智播客erp项目学习,防止表单重复提交及MRP
2010-10-26 09:47 916今天结束了erp的学习, ... -
ActionForm的生命周期浅探
2010-10-21 12:48 1011看了很多的资料书籍,都提了一下ActionForm的生命周期。 ... -
Struts 1.x | <html> 标签库
2010-10-21 12:11 1766html标签库 生成html元 ... -
SSH项目中利用struts的ExceptionHandler处理异常
2010-10-13 17:25 1045一、概述 在Struts1.X的版本中加入 ... -
commons-beanutils包ConvertUtils使用(二)
2010-10-13 16:37 20191.org.apache.commons.beanutils. ... -
org.apache.commons.beanutils.ConvertUtils
2010-10-13 16:33 1364ConvertUtils,这个工具类的职能是在字符串和指定类型 ... -
透析struts中的redirect="true"与redirect="false"
2010-10-13 13:28 1729再struts-config.xml文件的forward下有个 ... -
防止刷新、重复提交
2010-09-06 10:33 749问题场景:在项目的添加方法中,添加完毕后,当用户再次刷新当前页 ... -
struts中ActionServlet核心处理RequestProcessor.process()
2010-08-29 17:04 1255public void process(HttpServlet ...
相关推荐
`struts-config.xml`文件遵循一定的DTD(Document Type Definition),其根元素为`<struts-config>`。根据文档提供的信息,这个根元素主要包括以下8个子元素: 1. `<data-sources>` 2. `<form-beans>` 3. `<global-...
本文将深入探讨 `struts-config.xml` 的主要元素和属性,帮助开发者更好地理解和配置 Struts 应用。 1. **<struts-config>**:根元素,包含整个配置信息。 - **form-beans**: 子元素,用于定义表单bean,这些bean...
除了上述元素,`struts-config.xml`还允许定义其他元素,如`<action-forward>`用于定义Action内部的转发,以及`<message-resource>`来配置应用程序的消息资源文件。 正确理解和配置`struts-config.xml`是开发Struts...
在 Struts-config.xml 文件中,数据源配置是通过 `<data-sources>` 元素实现的,该元素可以包含多个 `<data-source>` 子元素,每个 `<data-source>` 元素可以配置一个数据源。数据源配置中可以设置 driverClass、url...
Struts的配置文件通常命名为struts-config.xml,它是整个Struts应用的核心配置文件,通过定义一系列的XML元素来设定框架的不同功能和行为。下面将详细介绍struts-config.xml中8个主要配置元素的功能和使用方法。 1....
SSH之Struts1之struts-config.xml常用配置详解(3-21-2008)
`struts-config.xml`是Struts框架的核心配置文件,它定义了应用程序的行为、请求映射、数据源等关键元素。这个配置文件位于Web应用的WEB-INF目录下,是开发者与Struts框架交互的主要方式。 **1. 框架组件配置** `...
`struts-config.xml`是Struts框架的核心配置文件,它定义了应用程序的行为和组件之间的交互。这个文件的主要目的是提供一个集中式的配置点,用于设置数据源、表单bean、异常处理、动作映射等关键元素。以下是每个...
在编写Struts-config.xml时,元素的顺序很重要,必须按照上述顺序排列,否则可能导致应用程序启动时出现错误。理解并正确配置这些元素是构建有效Struts应用程序的关键步骤。通过精细调整这些配置,开发者可以实现...
使用Struts 1.3.8时,开发者需要配置web.xml和struts-config.xml,定义ActionServlet、Action、ActionForm等元素。此外,还需要编写ActionForm类,实现业务逻辑的Action类,以及使用JSP和Struts标签创建用户界面。 ...
在Struts框架中,`struts-config.xml`是核心配置文件,用于定义动作映射、数据源等关键组件。本篇文章将深入探讨如何在`struts-config.xml`中配置数据源,以及这在实际开发中的意义和作用。 数据源(DataSource)是...
1. **struts-config_1_2.dtd**:定义了`struts-config.xml`的元素和属性。 2. **web-app_2_4.dtd** 或 **web-app_2_5.dtd**:定义了`web.xml`的元素和属性,这是Servlet容器用来配置Web应用程序的文件。 在使用...
Struts-config.xml文件是Struts框架的核心配置文件,它定义了应用程序的行为、数据源、ActionForm Bean等关键元素。以下是关于struts-config.xml文件配置的详细说明: 1. **数据源配置(Data Sources)**: - `...
DTD 规定了 `struts-config.xml` 文件中元素的结构和顺序,确保文件格式正确无误。在文件开头,可以看到 DTD 的引用声明: ```xml <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts ...
下面是struts-config.xml文件的主要元素: 一、struts-config.xml的主要元素 * 数据源配置(<data-sources>):用于配置struts应用程序的数据源,例如数据库连接池等。 * 表单Bean配置(<form-beans>):用于配置...
`struts-config.xml`定义了Action映射、Form Beans、DataSources等,而`web.xml`则配置了Servlet和Filter,用于启动Struts框架。 5. **Form Beans**: Form Beans是Struts中的表单对象,用于在请求之间存储和传递...
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH...
1. WEB-INF:这是Web应用的核心目录,包含web.xml(Web应用的部署描述符),struts-config.xml(Struts框架的配置文件),以及其他类和库文件。 2. classes:这里存放编译后的Java类文件,包括Action类和其他业务...