- 浏览: 567883 次
文章分类
- 全部博客 (235)
- 数据库 (12)
- j2se (10)
- JQuery (2)
- 经验总结 (4)
- 防毒 (1)
- Struts (20)
- Spring (12)
- 项目 (3)
- 电脑维修项目 (1)
- Eclipse (2)
- JSP (13)
- mysql (5)
- Hibernate (54)
- ssh (1)
- 学习网站 (1)
- tomcat (9)
- servlet (24)
- java语言基础 (1)
- jbpm (1)
- linux (0)
- 技巧积累 (1)
- javaBean (2)
- 设计模式 (2)
- 实用的操作 (9)
- oracle (1)
- UML学习 (1)
- 版本控制 (1)
- 框架 (9)
- javaWeb基础 (13)
- c语言 (0)
- ant (0)
- 关于权限 (3)
- 真正开发有用 (5)
- javascript (2)
- 算法 (1)
- J2EE (1)
- junit (1)
最新评论
-
alleni123:
不错 一搜就搜到这个了
ssession和servletContext的比较 -
hua7381:
楼主,你真实帮了大忙了!!
万能乱码处理---url传中文 -
albrich:
1楼是正解
摘] 装了个Tomcat遇到的问题 -
JA_mcj:
ssession和servletContext的比较 -
haotw:
看了很有帮助,总算对hibernate的延迟加载有一定的了解了 ...
[转]hibernate延迟加载
From Gossip@caterpillar
Struts Gossip: 简介 RequestProcessor
在Struts中,担任 MVC / Model 2 中Controller角色的是ActionServlet,所有的请求都必须先通过它,然而在Struts 1.1後,有关於请求的处理大部份已交由RequestProcessor,当ActionServlet收到GET或POST的请求,其doGet() 或doPost()会呼叫process()方法来处理请求:
protected void process(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
RequestUtils.selectApplication(request,
getServletContext());
getApplicationConfig(
request).getProcessor().process(request, response);
}
RequestUtils是个工具类,ActionServlet呼叫其selectApplication()方法,藉由 request.getServletPath()来取得请求路径以选择应用程式模块来处理请求,之後从ApplicationConfig物件取得 RequestProcessor物件,将使用者的请求委托它来进行处理。
通常是将ActionServlet当作黑盒子,您只要使用它,然而您也可以继承ActionServlet来定义自己的控制器,但由於在Struts 1.1中大部份的请求已经委托RequestProcessor来处理,继承ActionServlet来定义自己的控制器请求处理意义已经不大,通常的 目的是重新定义ActionServlet的init()方法,增加自己的初始化动作:
public class CustomActionServlet extends ActionServlet {
public void init() throws ServletException {
super.init();
// 增加自己的初始化动作
....
}
}
预设的RequestProcessor物件是org.apache.struts.action.RequestProcessor,您可以藉由观看 process()方法的原始码来了解它作了哪些事情:
public void process(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
// 处理 contentType 为 multipart/form-data 的 POST 请求
request = processMultipart(request);
// 取得 URI 路径
String path = processPath(request, response);
if(path == null)
return;
.....
// 确定客户端的位置
// 是否要将一个Locale物件储存在 session 中
// 配合 <controller> 的 locale 属性使用
processLocale(request, response);
// 确定contentType,预设是 text/html
processContent(request, response);
// 判断<controller>属性nocache是否被确定
// 若是,在 response 中加入防止快取的header
processNoCache(request, response);
// 前置处理,预设返回 true
//子类可以重新定义它以决定要不要继续处理
if(!processPreProcess(request, response)) {
return;
}
// 从URI路径确定ActionMapping
ActionMapping mapping =
processMapping(request, response, path);
if(mapping == null) {
return;
}
....
// 处理ActionForm
// 如果没有就新增一个,之後一直使用它
ActionForm form =
processActionForm(request, response, mapping);
// 将表单的栏位值填入ActionForm
processPopulate(request, response, form, mapping);
// 判断是否执行ActionForm的validate()方法
if(!processValidate(request, response, form, mapping)) {
return;
}
// 判断 标签的 forward 或 include 标签
// 是不是被设定,这两个标签在设定一个路径
// 其与 type 属性是互斥的,当设定其中一个属性时
// 调用 RequestDispatcher 的 forward() 或 include()
// 其作用与设定ForwardAction或IncludeAction相同
// 直接绕送而不再使用Action物件进行接下来的处理
if(!processForward(request, response, mapping)) {
return;
}
if(processInclude(request, response, mapping)) {
return;
}
// 处理Action,如果没有就生成一个,之後一直使用它
Action action =
processActionCreate(request, response, mapping);
if(action == null) {
return;
}
// 呼叫Action的execute()或perform()方法
// 并返回ActionForward
ActionForward forward =
processActionPerform(request,
response,
action,
for, mapping);
// 处理ActionForward
processActionForward(request, response, forward);
}
您可以继承RequestProcessor,并改写其中的processXXXXX()方法来自定义请求的处理方式,如果您要使用自己的 RequestProcessor,要在struts-config.xml中使用<controller>标签来定义,例如:
struts-config.xml
... <controller contentType="text/html;charset=Big5" locale="true" nocache="true" processorClass="caterpillar.CustomRequestProcessor"/> ...
在Struts 1.1後,新增了<controller>标签,它可以用於指定ActionServlet的一些参数,在Struts 1.1之前,这些参数是在<init-params>中加以指定,使用<controller>标签,应用程式中不同的模组也可 以指定各自的参数给ActionServlet。
Struts Gossip: 简介 RequestProcessor
在Struts中,担任 MVC / Model 2 中Controller角色的是ActionServlet,所有的请求都必须先通过它,然而在Struts 1.1後,有关於请求的处理大部份已交由RequestProcessor,当ActionServlet收到GET或POST的请求,其doGet() 或doPost()会呼叫process()方法来处理请求:
protected void process(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
RequestUtils.selectApplication(request,
getServletContext());
getApplicationConfig(
request).getProcessor().process(request, response);
}
RequestUtils是个工具类,ActionServlet呼叫其selectApplication()方法,藉由 request.getServletPath()来取得请求路径以选择应用程式模块来处理请求,之後从ApplicationConfig物件取得 RequestProcessor物件,将使用者的请求委托它来进行处理。
通常是将ActionServlet当作黑盒子,您只要使用它,然而您也可以继承ActionServlet来定义自己的控制器,但由於在Struts 1.1中大部份的请求已经委托RequestProcessor来处理,继承ActionServlet来定义自己的控制器请求处理意义已经不大,通常的 目的是重新定义ActionServlet的init()方法,增加自己的初始化动作:
public class CustomActionServlet extends ActionServlet {
public void init() throws ServletException {
super.init();
// 增加自己的初始化动作
....
}
}
预设的RequestProcessor物件是org.apache.struts.action.RequestProcessor,您可以藉由观看 process()方法的原始码来了解它作了哪些事情:
public void process(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
// 处理 contentType 为 multipart/form-data 的 POST 请求
request = processMultipart(request);
// 取得 URI 路径
String path = processPath(request, response);
if(path == null)
return;
.....
// 确定客户端的位置
// 是否要将一个Locale物件储存在 session 中
// 配合 <controller> 的 locale 属性使用
processLocale(request, response);
// 确定contentType,预设是 text/html
processContent(request, response);
// 判断<controller>属性nocache是否被确定
// 若是,在 response 中加入防止快取的header
processNoCache(request, response);
// 前置处理,预设返回 true
//子类可以重新定义它以决定要不要继续处理
if(!processPreProcess(request, response)) {
return;
}
// 从URI路径确定ActionMapping
ActionMapping mapping =
processMapping(request, response, path);
if(mapping == null) {
return;
}
....
// 处理ActionForm
// 如果没有就新增一个,之後一直使用它
ActionForm form =
processActionForm(request, response, mapping);
// 将表单的栏位值填入ActionForm
processPopulate(request, response, form, mapping);
// 判断是否执行ActionForm的validate()方法
if(!processValidate(request, response, form, mapping)) {
return;
}
// 判断 标签的 forward 或 include 标签
// 是不是被设定,这两个标签在设定一个路径
// 其与 type 属性是互斥的,当设定其中一个属性时
// 调用 RequestDispatcher 的 forward() 或 include()
// 其作用与设定ForwardAction或IncludeAction相同
// 直接绕送而不再使用Action物件进行接下来的处理
if(!processForward(request, response, mapping)) {
return;
}
if(processInclude(request, response, mapping)) {
return;
}
// 处理Action,如果没有就生成一个,之後一直使用它
Action action =
processActionCreate(request, response, mapping);
if(action == null) {
return;
}
// 呼叫Action的execute()或perform()方法
// 并返回ActionForward
ActionForward forward =
processActionPerform(request,
response,
action,
for, mapping);
// 处理ActionForward
processActionForward(request, response, forward);
}
您可以继承RequestProcessor,并改写其中的processXXXXX()方法来自定义请求的处理方式,如果您要使用自己的 RequestProcessor,要在struts-config.xml中使用<controller>标签来定义,例如:
struts-config.xml
... <controller contentType="text/html;charset=Big5" locale="true" nocache="true" processorClass="caterpillar.CustomRequestProcessor"/> ...
在Struts 1.1後,新增了<controller>标签,它可以用於指定ActionServlet的一些参数,在Struts 1.1之前,这些参数是在<init-params>中加以指定,使用<controller>标签,应用程式中不同的模组也可 以指定各自的参数给ActionServlet。
发表评论
-
[转]Struts1.2 验证用户是否登陆 两种方法
2007-12-05 21:43 5360Struts1.2 验证用户是否登陆 两种方法 ... -
struts解决乱码问题
2007-09-15 16:38 1720在中文插如mysql数据库的时候出现乱码问题. 解决方法有2 ... -
[摘]struts2原来如此
2007-09-14 18:03 1293许多朋友可能对于Struts 2.0与WebWork关系还搞 ... -
[摘]在Struts 2中实现CRUD
2007-09-14 18:01 1209http://www.blogjava.net/max/arc ... -
简单测试的方法
2007-09-14 17:03 1017简单测试的方法: 在类里面加一个主函数进行测试,测试完了之后可 ... -
struts国际化
2007-09-10 15:38 1372PropertiesEditor插件 更新站点: ... -
validatorForm和DynavalidatorForm
2007-09-09 22:23 2948这两个是用于生成脚本的验证.类似javascript效果 相同 ... -
[摘]Struts 学习笔记之ActionForm
2007-09-09 20:34 2234版权所有:(xiaodaoxiaodao)蓝小刀 xi ... -
[摘]actionMessages(),actionError()介绍
2007-09-09 20:08 5504actionMessages(),actionError()介 ... -
[摘]struts入门(1)
2007-09-09 19:10 1392bbbh.org.NET Visual Basic ASP V ... -
ActionErrors和ActionError
2007-09-09 19:04 3256/**ActionErrors和ActionError都是Ac ... -
struts中的验证
2007-09-09 17:24 1061Form里面的validate方法进行格式验证:比如说长度,比 ... -
[摘]ActionError和ActionMessage
2007-09-09 16:51 2039ActionForm是表單的物件化,有關於表單資料的完整性檢查 ... -
struts中的listenter监听
2007-09-09 15:12 1741ServletContextListener, Servlet ... -
struts执行流程
2007-09-09 13:48 1491My processPreprocess.......---- ... -
中文乱码问题
2007-09-09 12:45 1028在Struts1.2中在RequestProcessor的控制 ... -
Struts中actionservlet(1)
2007-09-09 09:56 1652ActionServlet类对应的类名为org.apche.s ... -
[摘]struts入门
2007-09-09 09:13 1063Struts框架 struts框架具有 ... -
Struts掌握这么几个基本
2007-09-08 22:32 1178Struts基本原理,Form, 国际化,控制器的应用,Str ...
相关推荐
在"struts1整合spring 通过代理RequestProcessor实现"这个主题中,核心思想是利用Spring的AOP(面向切面编程)能力,对Struts1的RequestProcessor进行代理,以此来增强或扩展RequestProcessor的功能。...
这里我们将详细探讨如何解决 Struts 中的中文乱码问题。 一、在 Action 类中的解决方法: 当在 Action 类中遇到中文乱码问题时,可以使用以下代码进行转换。创建一个静态工具类,如 `Chinese`,并定义一个 `...
`RequestProcessor`是Struts框架中的核心组件,它负责处理ActionServlet接收到的所有请求,并将请求分解为多个任务。通过自定义`RequestProcessor`,我们可以在请求处理的早期阶段就解决编码问题,使得所有后续操作...
- **自定义 RequestProcessor 类:**继承 Struts 的 RequestProcessor 类,并重写 `processPreprocess` 方法,在此方法中设置请求的字符编码。 ```java package servlets; import java.io....
4. **拦截器**:虽然Struts1没有正式的拦截器概念,但通过RequestProcessor可以实现类似的功能。 5. **标签库**:Struts1提供了丰富的自定义标签库,如logic、bean、html等,简化了JSP页面的编写。 **Struts2详解:...
2. **使用DelegatingRequestProcessor替换RequestProcessor**:在`struts-config.xml`中,将Struts的RequestProcessor替换为Spring的`DelegatingRequestProcessor`,并在Spring配置文件中定义与Struts `...
API文档是开发者理解并熟练运用任何框架的基础,Struts1.x中文API文档详细解释了框架中的各个类、接口、方法以及常量等,使得国内开发者无需英文基础也能轻松掌握Struts的核心功能。通过查阅这份文档,你可以了解到...
`DispatchAction`是Struts中的一种特殊Action,它的主要职责是根据用户请求的不同参数来调用不同的方法,从而实现多方法处理一个HTTP请求的功能。在`DispatchAction`中,每个子方法对应于一个特定的业务操作,这使得...
10. **RequestProcessor**:RequestProcessor是Struts1处理请求的起点,它负责解析请求,初始化ActionForm,调用Action,以及处理其他请求相关的任务。 "readme2.txt" 和 "readme.txt" 文件通常包含关于压缩包的...
以下两种方法可以有效解决Struts中的中文乱码问题: 方法一: 1. **配置JSP页面**:首先确保在每个JSP页面的头部声明正确的字符编码。例如,添加以下代码: ```html ;charset=UTF-8" language="java" %> ``` 这...
3. **MVC模式**:手册会深入讲解MVC模式在Struts中的应用,包括模型(model)如何处理业务逻辑,视图(view)如何展示数据,以及控制器(controller)如何协调两者。 4. **动作(Action)**:Action是Struts中的关键组件,...
Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它主要负责处理MVC(Model-View-Controller)架构中的Controller部分。Struts1 API是开发者在使用该框架时的重要参考文档,提供了详细的类、接口和...
5. **RequestProcessor**:处理请求的入口,它是Struts生命周期的第一步,负责初始化和调度ActionServlet。 6. **ActionForward**:表示请求转发的对象,用于定义请求处理后转向的页面或资源。 7. **Tiles**:...
ActionForm是Struts中用于接收和验证用户输入的数据的类。当用户通过表单提交数据时,这些数据会被封装到一个ActionForm实例中,然后由Struts框架将这个实例传递给对应的Action进行业务逻辑处理。ActionForm类通常...
//第一种方式:使用 Spring 的 ActionSupport 类整合 Structs ...//第二种方式:使用 Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor //第三种方式:将 Struts Action 管理委托给 Spring 框架
<controller processorClass="org.apache.struts.action.RequestProcessor"> ``` 或者在ActionForm的子类中覆盖`getServletEncoding()`方法返回"UTF-8"。 3. **修改JSP页面**:确保每个JSP页面顶部有正确的...
在Struts中,Model代表业务逻辑,通常由JavaBeans实现;View负责数据显示,常用JSP页面;Controller通过ActionServlet协调Model和View,处理用户请求并调用相应的业务方法。 三、配置文件 1. struts-config.xml:这...
- FormBean是Struts中的模型组件,用于在视图和控制器之间传递数据。 - 在`struts-config.xml`中定义FormBean,并在Action类中使用get和set方法访问其属性。 11. **JSP页面**: - JSP页面负责显示数据和接收用户...
Struts1.x的配置相对静态,每个Action的请求处理器(RequestProcessor)配置在web.xml中,不易修改。而Struts2.x通过拦截器栈(Interceptor Stack)实现了动态配置,可以根据需要为不同Action配置不同的拦截器,大大...
综上所述,处理Struts中的中文预处理成UTF-8编码是一个涉及多个层面的过程,包括请求处理器、响应设置、配置文件调整以及客户端设置。通过细致的配置和编码设置,我们可以确保中文字符在Struts应用中得到准确无误的...