博文

Action - 高级(2007-03-13 09:53:00)

摘要:Action类有以下七种:
org.apache.struts.action.Action
常规Action。
1. org.apache.struts.actions.ForwardAction
因为所有请求都需要经过控制器,所以直接链接到JSP将违反MVC原理。通过ForwardAction将请求链接到JSP页面。
在struts-config.xml中创建一个请求映射,并指定将转到的位置。
struts-config.xml:
  <action-mappings >
    <action forward="/action/for.jsp" path="/for" />
  </action-mappings>
org.apache.struts.actions.IncludeAction
功能与ForwardAction功能相似,但不是转到指定页面,而是包含指定页面。
struts-config.xml:
  <action-mappings >
    <action include="/action/in.jsp" path="/in" />
  </action-mappings>
org.apache.struts.actions.DispatchAction
能将一系列相关功能模块化到一个操作中。无须为每个操作创建单独的action。
如:无须创建类AddUserAction、UpdateUserAction、RemoveUserAction,可以通过扩展DispatchAction,创建具有以下方法的UserAction类:add()、update()、remove()。
运行时,DispatchAction根据请求参数决定调用哪个方法,请求参数名在struts-cofig.xml中定义:
struts-config.xml:
  <action-mappings >
    <......

阅读全文(1990) | 评论:0

Action - 初级(2007-03-13 09:51:00)

摘要:Action负责将视图层的数据传输到模型层中的特定事务处理,然后将处理结果返回到视图层。 请勿将事务逻辑嵌入到操作中,因为违反MVC的原则。     控制器只创建一个Action类的实例,用这个实例处理所有请求。     不要将action 写的太复杂,可以将更多的业务逻辑放到一个独立的应用层中进行处理。     action主要的操作如下所示: 1. 验证用户当前的会话状态。进行权限检查。 2. 如果form bean 的validate()验证没有完成,则继续完成验证。 如果form bean的validate()验证没有通过,则将错误信息保存在request域里,并调到相关的JSP资源。 3. 完成请求需要执行的业务逻辑。 4. 更新作用于下个页面的服务器端对象。 5. 返回一个ActionForward,跳转的视图层或进行下一步处理。
......

阅读全文(1539) | 评论:0

乱码问题(2007-03-12 22:59:00)

摘要:一。URL: 修改%TOMCAT_HOME%\conf\server.xml文件 找到如下内容:     <Connector port="80"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"                enableLookups="false" redirectPort="8443" acceptCount="100"                debug="0" connectionTimeout="20000"                disableUploadTimeout="true" /> 添加:URIEncoding="utf-8" 修改后内容如下:     <Connector port="80"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"                enableLookups="false" redirectPort="8443" acceptCount="100" &......

阅读全文(2087) | 评论:0

上传(2007-03-12 22:55:00)

摘要:struts中含有支持文件上传功能的包org.apache.struts.upload。可以创建一个包含FormFile类型的属性的ActionForm。如: package cn.rolia.struts.upload; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; public class UploadForm extends ActionForm {     private FormFile theFile;     public ActionErrors validate(ActionMapping mapping,            HttpServletRequest request) {        return null;     }     public void reset(ActionMapping mapping, HttpServletRequest request) {     }     public FormFile getTheFile() {        return theFile;     }     public void setTheFile(FormFile theFile) {     ......

阅读全文(1715) | 评论:0

日志 log4j(2007-03-12 22:55:00)

摘要:日志分两种: 1.  系统日志:处理应用程序内部操作而不是基于用户的特定操作。例如:SMTP主机没有响应。 2.  应用程序日志:特定用户操作中的记录。   日志作用 记录异常; 安全检查 非法用户跟踪 测试 日志种类 1.  容器日志文件。日志文件的名称和位置依赖与文件。可在类中直接从获取日志记录器。如:        javax.servlet.ServletContext context = getServlet().getServletContext();        context.log("日志"); 2. 使用common-logging。具体不介绍。 3. 使用common-logging和log4j的结合。下面详细介绍如何使用log4j 使用log4j进行记录 配置步骤: 1.       下载log4j的 jar 文件 2.       将jar文件复制到应用程序的WEB-INF/lib目录里 3.       配置log4j.properties。举例如下: log4j.rootLogger=WARN,Console,File   log4j.logger.cn.rolia.top.LoggingListener=INFO,Console,File   log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d %-5p %c - %m%n   log4j.appender.File=org.apache.log4j.FileAppender log......

阅读全文(2826) | 评论:0

模块间的切换(2007-03-12 22:54:00)

摘要:问题 想从一个模块(源模块)切换到另一个模块(目标模块)。 解决方案 在你的源模块中建立一个type为“org.apache.struts.actions.SwitchAction”的action: <action path="/ChangeModuleTest"         type="org.apache.struts.actions.SwitchAction"/> 使用这个action,向它传递两个参数prefix和page。prefix指明了目标模块名称,必须是以斜扛开头(“/”),page指明了相对于目标模块的位置。如: <html:link page="/ChangeModuleTest.do?prefix=moduleName&page=/SomeAction.do">     Change Module </html:link>如果你要连接到一个action,别忘了加上”.do”。 讨论 SwitchAction能将应用程序从一个模块转到另一个模块,然后跳转到目标模块的指定位置。 同ForwardAction、IncludeAction一样SwitchAction不需要子类化。   当我们在浏览器中使用http://hostaddress/contextpath/module/action.do式样的的url时,actionservlet会根据module选择模块对象,下面是actionservlet处理http请求的代码:   protected void process(HttpServletRequest request,                            HttpServletResponse response)    ......

阅读全文(1781) | 评论:0

模块化(2007-03-12 22:53:00)

摘要:需求 需要将一个模块分割成多个子模块,每个模块有自己的配置文件。 解决方案 在web.xml中配置如下: <!-- Action Servlet Configuration --> <servlet>   <servlet-name>action</servlet-name>   <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>   <init-param>     <param-name>config</param-name>     <param-value>/WEB-INF/struts-config.xml</param-value>   </init-param>   <init-param>     <param-name>config/module1</param-name>     <param-value>/WEB-INF/struts-config-module1.xml</param-value>   </init-param>   <init-param>     <param-name>config/module2</param-name>     <param-value>/WEB-INF/struts-config-module2.xml</param-value>   </init-param>   <load-on-startup>1</load-on-startup> </servlet> 讨论 struts引入模......

阅读全文(1952) | 评论:0

使用多个struts-config配置文件(2007-03-12 22:52:00)

摘要: 可以将一个struts-config.xml分割成多个小的struts-config.xml。每个都必须按照struts-config DTD文件的格式进行编写。配置距举例如下: <servlet>   <servlet-name>action</servlet-name>   <servlet-class>     org.apache.struts.action.ActionServlet   </servlet-class>   <init-param>     <param-name>config</param-name>     <param-value>       /WEB-INF/struts-config.xml,       /WEB-INF/struts-config-2.xml     </param-value>   </init-param>   <load-on-startup>1</load-on-startup> </servlet> 当载入ActionServlet类时,struts将多个配置文件拼成单个的配置文件。 如果多个配置文件中有重复的元素则使用最后一个配置文件中的。 你也可以为多个字模块指定多个配置文件。如下所示: <servlet>   <servlet-name>action</servlet-name>   <servlet-class>     org.apache.struts.action.ActionServlet   </servlet-class>   <init-para......

阅读全文(2139) | 评论:0

全局常量(2007-03-12 22:52:00)

摘要:可以声明一个plug-in。在plug-in中声明常量并将其保存在ServletContext中 举例如下: Constants.java: package com.yourcompany.struts.constants; import java.util.HashMap; import java.util.Map; public class Constants {         public Map globalConstants;         public Constants(){         globalConstants = new HashMap();         globalConstants.put("userName","Rolia");         globalConstants.put("path",new java.util.Date());     }       public Map getGlobalConstants() {         return globalConstants;     }       public void setGlobalConstants(Map globalConstants) {         this.globalConstants = globalConstants;     }   } ConstantsPlugin.java: package com.yourcompany.s......

阅读全文(2163) | 评论:0

tag library(2007-03-12 22:49:00)

摘要:可以在JSP中创建引用绝对路径的一个taglib,这样的话就不许要在WEB.XML中声明了。如:<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %><%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %><%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %><%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   <!-- start taglib --> <%@ include file="/includes/taglibs.inc.jsp" %> <!-- end taglib -->   <html:html>   <body> ... 当你用绝对URL指定taglib时,你不需要将相应的taglib中加入到web.xml中去。   Servlet2.3之前必须在web.xml中声明taglib 从2.3开始才可以使用绝URI。绝对URI是由相应的TLD文件确定的。   如果你想在整个应用程序中使用同一个talib库,可以创建一个包含taglib的文件,然后将此文件包含到任意的JSP页面中去。   struts1.1和struts1.2中的taglib是有区别的: Tag......

阅读全文(1855) | 评论:0